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. 什麼是上下文切換時間?
- 5. Linux獲取上下文切換時間
- 6. 我如何測量進程上下文切換所用時間的aproximation?
- 7. 上下文切換使用了大量的時間嗎?
- 8. 線程量程時間中是否包含上下文切換時間?
- 9. 程序檢測上下文切換
- 10. 線程之間的上下文切換
- 11. 如何測量和修復上下文切換瓶頸?
- 12. 線程上下文切換vs進程上下文切換
- 13. 切換測量
- 14. 防止上下文切換(或測量然後減去時間在線程實際上不花費)
- 15. 上下文切換在Linux中需要多長時間?
- 16. 是否可以減少上下文切換時間
- 17. 我們如何減少上下文切換時間
- 18. 上下文切換死鎖
- 19. 切換畫布上下文
- 20. Python:GIL上下文切換
- 21. 上下文切換太貴
- 22. PHP上下文切換
- 23. lpc 1769上下文切換
- 24. GPU上下文切換
- 25. 切換OpenGL上下文或切換上下文渲染目標,而最好?
- 26. 從進程上下文切換切換線程上下文有多好?
- 27. 上下文切換問題:管理上下文切換涉及哪部分OS?
- 28. WaitForSingleObject在超時時間爲零時會導致上下文切換嗎?
- 29. 上下文切換和交換同時發生?
- 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