超線程技術能夠在很大程度上幫助系統管理員提升處理器性能表現,但是管理員還是應該注意使用這種技術的最終結果可能難以預測。
問題:使用超線程技術可能對系統造成哪些負面影響?
新手系統管理員最常犯的錯誤之一就是認為使用超線程技術與添加一個全新內核是一樣的——但實際情況并非如此。超線程技術并不會為處理器內核增加任何額外計算資源,只是允許不同任務共享內核的現有計算資源而已。如果處理器使用率相對較低,擁有充足的空閑時間,那么這種方式能夠大幅度提升系統的性能表現。新增加的線程通過運行額外任務能夠有效利用內核空閑時間,這樣處理器——以及整個系統——就能夠在同樣的時間段內完成更多的任務。
但是超線程技術并非總是能夠起到幫助作用。比如,超線程技術的成功需要依賴于合適的調度系統,只有Windows Server 2016這樣的全新一代操作系統才具有這種特性。即便底層硬件處理器能夠支持超線程,并且在系統BIOS中已經啟用這種特性,但是像Windows Server 2013這樣的操作系統并不能識別超線程。此外,超線程技術能夠帶來的性能提升會隨著內核數量的增加而逐漸降低。比如,借助于超線程技術,單核系統最多能夠實現30%的性能提升,而雙核系統通常最多只能實現15%的性能提升。而四核——或者更多核心——的處理器需要在啟用和關閉超線程的情況下分別進行測試,才能夠最終確定性能表現。但是既然已經擁有了多個物理內核,那么同時使用多個內核比使用超線程技術要更加高效。
在hypervisor中啟用CPU affinity特性也需要十分小心。如果啟用超線程技術,hypervisor能夠在系統的物理和邏輯核心之間提供良好的線程調度和自動負載均衡功能。啟用CPU affinity特性將會對hypervisor的調度和負載均衡能力造成影響,導致系統不能提供最好的性能表現。CPU affinity特性還會對CPU針對特定虛擬機進行資源預留的能力造成影響。即便CPU affinity特性在當前服務器上能夠發揮其作用,如果將虛擬機遷移到不同處理器數量的其他服務器上,也會對CPU affinity特性造成嚴重影響,因此最好讓hypervisor或者操作系統自動進行配置。
最后,不要忽略負載自身的特性。使用多個邏輯處理器并不會對單線程負載帶來任何幫助作用,因此超線程技術無法提升這些負載的性能表現。此外,需要占用大量計算資源以及需要和內存進行大量數據傳輸——也就是占用大量內存I/O——的負載也無法受益于超線程技術。因此需要在了解常駐內存負載的特性之后再決定是否使用超線程技術,或者將負載遷移到其他啟用(未啟用)超線程技術的系統上。
超線程技術允許不同任務共享處理器內核的空閑計算資源。使用這種方式,管理員無需購買或者添加/升級處理器,使用現有處理器就能夠完成更多的任務。但是這種技術并非適用于任何硬件或者負載。在評估全新負載的性能和遷移特性過程中,考慮超線程技術所帶來的影響,并且在必要的時候禁用超線程技術。