2
A
回答
5
一個相當直接的方法是讓兩個線程通過管道進行通信。一個線程會做(僞代碼):
for(n = 1000; n--;) {
now = clock_gettime(CLOCK_MONOTONIC_RAW);
write(pipe, now);
sleep(1msec); // to make sure that the other thread blocks again on pipe read
}
另一個線程會做:
context_switch_times[1000];
while(n = 1000; n--;) {
time = read(pipe);
now = clock_gettime(CLOCK_MONOTONIC_RAW);
context_switch_times[n] = now - time;
}
即,將測量時的數據是由一個線程寫入到管之間的持續時間以及另一個線程醒來並讀取數據的時間。直方圖context_switch_times
數組將顯示上下文切換時間的分佈。
時間將包括管道讀取和寫入的開銷,並獲得時間,但是,它可以很好地理解上下文切換時間。
在過去,我使用庫存Fedora 13內核和實時FIFO線程做了類似的測試。我得到的最小上下文切換時間大約是4-5個usec。
3
我不認爲我們可以從用戶空間實際測量這個時間,因爲在內核中你永遠不知道什麼時候你的進程在時間片到期之後被提取出來。所以無論你在用戶空間中得到什麼,都包括調度延遲。但是,從用戶空間中可以得到更接近的測量值,但始終不準確。即使是很短暫的延遲也很重要。
1
我相信LTTng可以用來捕獲上下文切換時序的詳細跟蹤等等。
相關問題
- 1. 變量上下文切換時間
- 2. 什麼是上下文切換時間?
- 3. 線程之間的上下文切換
- 4. 線程上下文切換vs進程上下文切換
- 5. 切換測量
- 6. 上下文切換在Linux中需要多長時間?
- 7. 我們如何減少上下文切換時間
- 8. lpc 1769上下文切換
- 9. Python:GIL上下文切換
- 10. 切換畫布上下文
- 11. 上下文切換太貴
- 12. PHP上下文切換
- 13. 切換OpenGL上下文或切換上下文渲染目標,而最好?
- 14. 從進程上下文切換切換線程上下文有多好?
- 15. WaitForSingleObject在超時時間爲零時會導致上下文切換嗎?
- 16. 上下文切換意味着模式切換
- 17. 如何檢測運行C#代碼時發生的上下文切換次數?
- 18. POSIX:如何在線程之間執行上下文切換?
- 19. 調度程序和上下文切換器之間的區別?
- 20. 雙向鏈表創建期間的上下文切換
- 21. 在執行兩個函數上下文之間切換
- 22. 兩個線程之間的上下文切換問題
- 23. 將上下文切換與Xenomai
- 24. 在ReverseProxy上下文中切換SSLVerifyClient
- 25. 忙等待和上下文切換
- 26. FreeRTOS的上下文切換 - xQueueSend
- 27. 多線程:上下文切換
- 28. 上下文切換多線程
- 29. BlockingQueue中的上下文切換開銷
- 30. 計算有多少上下文切換
如果你添加了一個標籤,說明*你正在談論/感興趣的內核(例如,Linux,OSX/Darwin,Windows等),那麼這可能會有所幫助 –
[寫一個C程序來測量在Linux操作系統上下文切換花費的時間](http://stackoverflow.com/questions/2368384/write-ac-program-to-measure-time-spent-in-context-switch-in-linux-os) –
@ Jerry Coffin 這是一個Linux內核 – soker