使用超线程提升处理器性能
处理器设计师总是关注于不同的性能提升策略,为的是在每个时钟周期内完成尽可能多的计算。更快的频率、更大的数据路径以及不同的指令集方式都提升了性能。但是,性能提升最可能引起误解的一个方面就是超线程对处理器性能的影响。
超线程能够提升处理器效率已经得到了证实,但是其并不适用于所有场景,而且现代处理器设计可能会令超线程成为明日黄花。
超线程工作原理
传统的处理器队列指令在传输到处理器的执行引擎之前会通过流水线架构。应用设计以及需求差异总是会在处理器的指令管道中留有空隙,导致存在空闲的处理器时钟周期。糟糕的程序设计可能会浪费时钟周期并降低处理器性能。
为了优化处理器架构并提升多任务处理的可能性,处理器设计人员增加了与一级管道共享执行引擎的二级管道。设计人员想让第二个线程或者任务的相关指令在单个管道中排队,当第一个指令管道空闲时再通过执行核心运行这些指令。Intel开发了超线程技术,增强了计算机系统上的多线程并行处理。
在处理器核心中包括第二级指令管道,操作系统会识别到两个独立的处理器。能够将活动分解为单独任务的应用程序能够利用处理器超线程技术。单独的指令序列帮助处理器调度工作负载以有效地使用其指令引擎,这反过来提升了核心的计算能力。
然而,处理器核心仍旧只有一个执行引擎,因此超线程带来的性能提升取决于正在被调度的工作负载的设计与实现方式。性能改善从不会超过通过增加第二个核心所带来的提升,增加第二个核心通常会使处理器的计算资源成倍增加。
在实现超线程之前需要具备哪些条件
处理器、BIOS、操作系统以及工作负载构成了超线程服务器应具备的四大基本元素。当代大多数操作系统能够支持超线程: 2002年Intel在至强处理器中就引入了目前已经很完善的超线程技术,现在Itanium以及Atom处理器也支持超线程。
然而,处理器需要特定的软硬件元素,包括服务器主板对BIOS提供支持。超线程的成熟特性几乎保证了对BIOS的合理支持,通过设置BIOS允许系统技术人员启用超线程及相关的活动。
由于OS在指令队列中解析工作负载任务并处理任务调度,因此操作系统也必须支持超线程。目前,大多数企业级操作系统,包括Windows Server 2012以及SuSE和Red Hat Linux的某些新的发行版都支持HT和SMT.检查操作系统文档以确认HT支持所有数据中心平台。
最后,应用设计本身也影响超线程。设计为能够借助超线程优势的SMT应用要比只是部署在启用超线程服务器的应用性能更好。因为处理器版本、BIOS版本、OS版本以及应用设计都影响超线程,因此很难准确判断对性能有多大提升。
超线程如何影响虚拟服务器
超线程通常提升了单核处理器的性能,但不幸的是,处理器性能提升并不等于更不可能超越多核的性能优势。你无法基于核心或者插槽来选择启用或者禁用超线程,而且在某些情况下,超线程有可能会对处理器虚拟化带来不良影响。因此,很多管理员选择禁用超线程。
超线程技术增强了处理器组织及调度应用任务的方式,提升了性能。然而现代企业服务器至少使用有8到10个核心的多核处理器。在大多数情况下和超线程相比,可用的计算资源能够带来更好的性能提升。超线程还可能会对处理器虚拟化的方式带来不良印象。
例如,当启用超线程时虚拟化特性比如CPU关联性并非总是能够很好地运行。超线程在每个核心上创建了两个逻辑处理器,但是这些逻辑处理器仍旧共享物理核心的计算资源。因此,当虚拟机或者单个SMP虚拟机试图使用位于同一个物理核心上的vCPU时可能会发生资源争用,出现性能瓶颈。
实际上,服务器上可用的核心数量可能会导致超线程浪费计算资源。如果一台服务器包括4颗10核处理器,那么一共有40个核心,运行在Windows Server 2008 R2的Hyper-V服务器支持64个逻辑处理器。如果启用超线程,服务器将提供80个逻辑处理器,这样就有16颗逻辑处理器处于空闲状态,而且几乎浪费了整个处理器插槽。在这种情况下超线程带来的性能提升不会超过物理核心所增加的计算能力。