Windows 10 雖然已經推出不算短的時間,也歷經了幾次的大版本更新,但一些小問題總會不經意的被發現出來,最近有 Google 開發者在 Windows 10 平台,利用 24 核處理器 來編譯程式。照理說硬體強大不至於 Lag ,但實際上卻是連滑鼠都動不了,令人稱奇:
Windows 10 並不是第一天出現 bug ,通常 Windows 的 Bug 透過更新就會解決,有的比較複雜,例如 AMD Ryzen 先前曾爆出 FMA3 指令集測試問題,接著還有 AMD SMT 技術水土不服問題。最近的則更玄,居然是 24 核心處理器會 Lag 的問題。
這是一位 Google 工程師的困擾,也是一位軟體開發者才會遇到的狀況。這位工程師使用 Windows 10 系統,電腦配置 24 核 48 執行緒的處理器,有64GB記憶體,高速 SSD 等配備加持下的配備,這樣系統還會 Lag 到滑鼠動不了,相當令人在意。
身為一個工程師,一旦遇到系統 Lag 連連,又沒跑什麼網路應用,第一時間當然是先開工作管理員看看狀況。更神奇的事情出現了,CPU 使用率奇低無比,記憶體也還有相當多的容量,這樣的配置到底 Lag 在哪,工程師這下可是丈二金剛摸不著頭腦,就目前來看,硬體的嫌疑減輕很多,所以接下來得看系統面的部分。
工程師接下來使用 Windows 系統事件追蹤工具 ETW,結果發現更有趣的內容,Windows 10 在消去執行緒內的任務的操作上存在問題。當下的程式所佔用的執行緒,在程式需要關閉時,Windows 10 核心會透過某個單獨的執行緒來執行這個指令,也就是說,就算有幾十個處理器核/執行緒。只要程式跟 Windows 10 說要關閉程序,這時候的 Windows 10 突然就會退化成為單執行緒系統,因此就算有相當多的核心數量,也逃不過 Lag 的命運:
▲CPU 使用率並未超過 50%,系統卻 Lag 到連滑鼠都難動。
這其實不算什麼,因為一般人不太會用到這麼多核心的處理器,也不會一口氣大量關閉許多程式,但這些行為在寫程式的時候是常見到的。而且更殘酷的是,就算有相當多核心在運作,只要在頻繁開關程式的時候,卡頓的情況越嚴重,照理說不該讓單一核心有過重的 Loading 才對。
▲一個執行緒就佔用相當大量的資源,後面的其他程序也在這個執行緒內排隊。
▲為了找出問題,寫了一個一次開啟 1000 個執行緒的軟體,然後一口氣關掉,單執行緒內的 CPU 用量顯示出問題,而且就算重新啟動系統後再測一次,也會得到相近的結果。
更奇怪的是,這個 Bug 通常只出現在 Windows 10 上,這位工程師發現舊版本的 Windows 7 並不存在這樣的問題,顯然這個狀態並非是硬體方面的問題,也跟工程師撰寫的程式無關,是作業系統本身存在缺陷。
原作者目前以經向微軟提出這個 Bug ,可預期的將來,微軟會透過更新機制將這個問題修補起來。至於最後這個問題是否會被原廠解決,也許留意一下最近的更新或許就會知道是否解決了。