超线程技术并不能应用在所有环境中,对于不同的情况来说,其有可能帮助提升虚拟服务器的性能表现,但是反过来也有可能造成负面影响,而获得良好性能表现的关键就在于判断应该何时使用这种技术。
超线程是一种计算机处理器技术,能够将一个物理处理器变成两个虚拟处理器。这种方式能够提升处理器核心的指令队列工作效率,从而提高处理器的整体性能表现,此外虚拟化技术也能够受益于这种技术。这种技术允许hypervisor为虚拟机提供之前两倍的虚拟处理器数量——但是超线程技术并不是完美的。如果使用超线程技术,那么效率低下、质量不佳的代码甚至是分配不当的负载都有可能对系统性能造成负面影响。
问题:超线程技术是什么?其能够为hypervisor带来哪些好处?
超线程是英特尔公司的私有技术,其能够帮助提升物理处理器的资源使用效率,保证处理器一直处于繁忙状态,以便完成更多工作。
超线程技术——也被称为HTT或HT——的出现是由于传统物理服务器核心在同一时间只能处理一项任务。所有负载都需要使用处理器的指令通道,但是通常指令通道的使用率并不会达到100%或者一直处于繁忙状态。造成这种现象的部分原因在于应用程序的编码和运行方式不同,此外,由于现代处理器的运行速度越来越快,已经完全超出许多应用程序的需求,因此被浪费的处理器周期越来越多。
超线程技术在处理器核心中添加了新的电路,能够提供额外的指令通道来共享物理处理器的执行资源,比如内存总线、处理器缓存以及处理器的执行引擎。增加的超线程电路能够将物理核心分割成两个逻辑核心。在启用超线程技术之后,每个逻辑处理器都相互独立,中断、停止和操作都独立于另外一个共享相同物理核心的虚拟处理器。当某个逻辑核心空闲时,另外一个逻辑核心将会得到更多的执行资源。
关于超线程技术需要记住的重要一点是在相同物理核心上启用第二个逻辑处理器并不会使得处理器的性能提升一倍。这是因为处理器的执行资源是共享的,并没有翻倍。HTT技术允许处理器在特定时间内处理更多的任务或者指令线程,但是仍然需要使用原有的物理资源完成这些任务。这是超线程架构和多核处理器——比如双核或者四核——的最大区别,多核技术拥有多个物理处理器。
而虚拟处理器的性能提升幅度取决于负载对于处理器的资源需求以及操作系统管理和规划逻辑处理器的能力。如果超线程技术不能识别操作系统,就会使用同样的方式管理所有逻辑处理器,可能会将资源需求很大的负载放在相同核心的逻辑处理器上——这样会对应用程序的性能表现造成负面影响——而同时其他核心并没有得到充分利用。与此形成对比的是,能够识别操作系统的超线程技术可以将线程分配到不同的处理器上,最大程度上提升负载的性能表现。
比如,如果某个应用程序需要使用大量处理器资源,就会一直占用指令队列,那么即便同一个物理处理器核心提供额外的逻辑处理器也无济于事——因为物理处理器已经没有额外的资源可以共享。操作系统可以将第二个线程加入到处理队列中,但是通常其性能表现会非常差,此外,由于其会占用当前运行线程的处理器周期,因此还会导致现有应用程序性能受到影响。Hypervisor或者操作系统应该能够识别HTT,并且最大程度上提升负载对于物理处理器的使用效率,这些都是分配逻辑处理器的前提。如果这个前提不能实现,那么超线程(并非虚拟化)功能应该被禁用。
从hypervisor系统角度来看,超线程并不是虚拟化技术——HTT只是一种位于处理器硬件层、以硬件为基础的虚拟化技术。而虚拟化和hypervisor能够带来哪些好处?超线程和hypervisor之间并没有直接的关联。Hypervisor能够工作在不支持超线程技术的物理处理器上,而支持超线程的处理器也可以使用非虚拟化系统。但是这两种方案可以相互补充,而像VMware vSphere这样的现代hypervisor在创建资源池并且将虚拟CPU分配给虚拟机时已经能够识别并且使用超线程技术。这种方式能够在组织和计划任务方面为hypervisor提供更多的灵活性,因此能够提升虚拟服务器的工作效率。