Linux

比較 Linux 和 Windows 上的上下文切換數量的經驗法則

  • May 3, 2013

我正在尋找一個粗略的值來比較 Windows 和 Linux 之間的上下文切換(假設相同的硬體和相似的負載)。我發現 Windows 的時間片長度範圍似乎比 Linux 更小(10-120ms vs. 10-200ms),但該資訊並不權威。

我看不出可以從您嘗試執行的操作中收集到什麼有用的資訊,但是您可以通過標準 Win32 API 更改 Windows 機器上的時鐘解析度。系統上需要更高響應時間的不同應用程序(例如多媒體應用程序)一直在執行此操作。時鐘解析度可能在 0.5 毫秒到 15.6 毫秒甚至更高的範圍內。所以讓你的兩台機器有相同的時鐘解析度。

預設情況下,Windows 7 配置為讓執行緒執行 2 個時鐘間隔,然後再做出另一個調度決策。(即,我是否切換上下文?)預設情況下,Server 2008 R2 線上程調度決策之間設置了 12 個時鐘間隔(也稱為執行緒量子)。這個想法是,執行緒量子越長,伺服器作業系統就有更好的機會在不被中斷的情況下啟動和完成客戶端請求。(即,更少的上下文切換。)但是您不會在 Windows 的伺服器版本上獲得“快速”的桌面體驗。(通常沒有人關心。)

這是使用我的 Win7 PC 的範例。Google瀏覽器實際上已經要求降低 1 毫秒的系統範圍時鐘解析度。您可以使用 Sysinternals 的 clockres.exe 查看目前和基本時鐘解析度,並使用 powercfg.exe 查看哪些應用程序一直在更改您的時鐘解析度。

我的 CPU 每秒完成 3,501,000,000 個週期(3.5GHz),計時器每 0.001 秒觸發一次。3501000000 * 0.001 = 每個時鐘間隔 3501000 個 CPU 週期。

1 個量子單元 = 1/3(三分之一)時鐘間隔,因此 1 個量子單元 = 1167000 個 CPU 週期。

假設在 3.501GHz 的速率下,每個 CPU 週期為 286 皮秒,那麼每個量子單位為 333.8 微秒。由於我的 PC 配置了 2 個時鐘間隔的執行緒量子,並且每個時鐘間隔是 3 個量子單位,這意味著我的 PC 大約每 2 毫秒做出一次執行緒調度決策。

讓我們甚至不要進入可變長度執行緒量子或搶占式調度程序(執行緒在被另一個更高優先級的執行緒搶占之前無法完成它的量子。)

因此,您想要比較執行完全不同程式碼集的兩個不同作業系統上的上下文切換的實驗對我來說仍然沒有意義,但這也許有幫助,至少在 Windows 方面。

引用自:https://serverfault.com/questions/504785