天天看點

Windows是如何利用超線程特性的

這個問題,取決于你所問的Windows是哪個版本?每個版本的Windows都不太一樣。

請容我慢慢道來。

對于Windows 95,Windows 98和Windows ME,答案很簡單:壓根不會用到超線程。因為這些作業系統不是多處理器作業系統。

對于Windows NT和Windows 2000來說,答案是:連作業系統自己都不知道有超線程這回事兒。為什麼?這兩個作業系統是在超線程發明之前編寫的。如果你啟用了處理器的超線程,則一塊實體CPU在作業系統看來是兩塊獨立的邏輯CPU。(也是以你需要為這兩塊CPU核心付授權費)

因為排程器(Scheduler)不會在多個虛拟CPU之間實作連接配接,是以,和一開始就不啟用超線程相比,啟用超線程之後的運作性能可能會更糟。

考慮一台搭載有雙超線程處理器的機器。這台機器上有兩塊實體處理器A和B,每塊實體CPU會擴充出兩塊虛拟CPU,讓我們将它們命名為A1, A2, B1和B2吧。

假設你有兩項CPU密集的計算任務。對于Windows NT和Windows 2000排程程式而言,所有四個處理器都是等效的,作業系統會選擇其中兩塊CPU進行計算。如果你不那麼走運,它會選擇A1和A2,進而導緻一塊實體CPU同時運作兩項計算密集型的任務 (每個都可能以半速和四分之三速之間的速度運作),而另外一塊實體處理器B則會空閑等待排程。作業系統壓根就不知道可以将這兩項任務分别排程到兩塊不同的實體處理器上,進而提升性能。

Windows XP和Windows Server 2003作業系統進行了改良,它們都可以正确面對這種超線程特性。

當出現上述情況時,排程器會知道目前處理器的虛拟化配置,并智能地将兩項計算任務分發到不同的實體處理器上。

請注意,即使使用支援超線程的處理器,也可能發生緩存未命中的問題。

例如,如果你有四個任務,其中兩個嚴重依賴L2緩存,而其中兩個不依賴,你最好将每個L2密集型任務放在單獨的處理器上,因為L2緩存是由兩個虛拟處理器共享的。将它們放在同一個處理器上會導緻大量L2緩存未命中,因為這兩個任務會争奪L2緩存插槽。

當你使用資料中心伺服器或者企業伺服器版本的Windows時,事情又變得棘手了。

這個時候,就不是三言兩語能講明白的了。我建議你瞄一瞄這篇白皮書,以了解其中的玄機。

總結

虛拟化其實一直都在進行,比如,現在比較火熱的”元宇宙”。

這讓我想起了這東西:缸中之腦。

最後

最近我寫了個東西

繼續閱讀