超線程技術并不能應用在所有環境中,對于不同的情況來說,其有可能幫助提升虛擬服務器的性能表現,但是反過來也有可能造成負面影響,而獲得良好性能表現的關鍵就在于判斷應該何時使用這種技術。 超線程是一種計算機處理器技術,能夠將一個物理處理器變成兩個虛擬處理器。
這種方式能夠提升處理器核心的指令隊列工作效率,從而提高處理器的整體性能表現,此外虛擬化技術也能夠受益于這種技術。這種技術允許hypervisor為虛擬機提供之前兩倍的虛擬處理器數量——但是超線程技術并不是完美的。如果使用超線程技術,那么效率低下、質量不佳的代碼甚至是分配不當的負載都有可能對系統性能造成負面影響。
問題:超線程技術是什么?其能夠為hypervisor帶來哪些好處?
超線程是英特爾公司的私有技術,其能夠幫助提升物理處理器的資源使用效率,保證處理器一直處于繁忙狀態,以便完成更多工作。
超線程技術——也被稱為HTT或HT——的出現是由于傳統物理服務器核心在同一時間只能處理一項任務。所有負載都需要使用處理器的指令通道,但是通常指令通道的使用率并不會達到100%或者一直處于繁忙狀態。造成這種現象的部分原因在于應用程序的編碼和運行方式不同,此外,由于現代處理器的運行速度越來越快,已經完全超出許多應用程序的需求,因此被浪費的處理器周期越來越多。
超線程技術在處理器核心中添加了新的電路,能夠提供額外的指令通道來共享物理處理器的執行資源,比如內存總線、處理器緩存以及處理器的執行引擎。增加的超線程電路能夠將物理核心分割成兩個邏輯核心。在啟用超線程技術之后,每個邏輯處理器都相互獨立,中斷、停止和操作都獨立于另外一個共享相同物理核心的虛擬處理器。當某個邏輯核心空閑時,另外一個邏輯核心將會得到更多的執行資源。
關于超線程技術需要記住的重要一點是在相同物理核心上啟用第二個邏輯處理器并不會使得處理器的性能提升一倍。這是因為處理器的執行資源是共享的,并沒有翻倍。HTT技術允許處理器在特定時間內處理更多的任務或者指令線程,但是仍然需要使用原有的物理資源完成這些任務。這是超線程架構和多核處理器——比如雙核或者四核——的最大區別,多核技術擁有多個物理處理器。
而虛擬處理器的性能提升幅度取決于負載對于處理器的資源需求以及操作系統管理和規劃邏輯處理器的能力。如果超線程技術不能識別操作系統,就會使用同樣的方式管理所有邏輯處理器,可能會將資源需求很大的負載放在相同核心的邏輯處理器上——這樣會對應用程序的性能表現造成負面影響——而同時其他核心并沒有得到充分利用。與此形成對比的是,能夠識別操作系統的超線程技術可以將線程分配到不同的處理器上,最大程度上提升負載的性能表現。
比如,如果某個應用程序需要使用大量處理器資源,就會一直占用指令隊列,那么即便同一個物理處理器核心提供額外的邏輯處理器也無濟于事——因為物理處理器已經沒有額外的資源可以共享。操作系統可以將第二個線程加入到處理隊列中,但是通常其性能表現會非常差,此外,由于其會占用當前運行線程的處理器周期,因此還會導致現有應用程序性能受到影響。Hypervisor或者操作系統應該能夠識別HTT,并且最大程度上提升負載對于物理處理器的使用效率,這些都是分配邏輯處理器的前提。如果這個前提不能實現,那么超線程(并非虛擬化)功能應該被禁用。
從hypervisor系統角度來看,超線程并不是虛擬化技術——HTT只是一種位于處理器硬件層、以硬件為基礎的虛擬化技術。而虛擬化和hypervisor能夠帶來哪些好處?超線程和hypervisor之間并沒有直接的關聯。Hypervisor能夠工作在不支持超線程技術的物理處理器上,而支持超線程的處理器也可以使用非虛擬化系統。但是這兩種方案可以相互補充,而像VMware vSphere這樣的現代hypervisor在創建資源池并且將虛擬CPU分配給虛擬機時已經能夠識別并且使用超線程技術。這種方式能夠在組織和計劃任務方面為hypervisor提供更多的靈活性,因此能夠提升虛擬服務器的工作效率。