我们应该使用CPU亲和力来提升Windows Server 2012 R2性能吗?
在几乎所有情况下,没有必要使用Windows Server 2012 R2中的CPU亲和力将一个工作负载限制在特定的处理器线程(假设每个英特尔处理器内核提供了两个线程)。有几个问题考虑。
首先,CPU亲和力会与现代大多数服务器中的非一致性内存访问(NUMA)产生冲突。NUMA的设计是每个线程几乎不可能以同样的速度访问大量的可用内存:接近某个的核心或处理器封装(槽)的内存可以比较远的内存有更快的访问速度。因此,服务器的调度程序将尝试安排处理器上的线程最接近运行相应工作负载的内存。人们对此几乎不了解,因此线程affinity更常驱动不同NUMA区的处理器线程,实际上是降低了工作负载的性能。
CPU亲和力更适用于对称多处理(SMP)系统,该系统中所有的处理器平均访问内存空间(跟NUMA架构不同)。在SMP模式中,任何线程可以平均地运行在任何处理器上,这是并行处理系统的首个重要条件。然而,操作系统可以根据线程优先级进行自动调度。人为干预对性能的影响较小,但通常不会产生更好的工作负载性能。
现在使用关联规则时,通常测试特定处理器(或特定处理器的核心)的性能。管理员可以看到当前线程使用GetProcessAffinityMask函数关联过程或使用SetProcessAffinityMask函数来指定进程的线程关联。IT管理员可以选择使用SetThreadIdealProcessor函数为线程推荐首选(理想的)处理器。该函数并不迫使应用亲和力,调度程序仍然可以选择其他处理器,但设置理想的处理器可以促使调度程序使用建议的处理器。