NUMA与英特尔下一代Xeon处理器学习心得(6)

接下来讲讲 NUMA 策略,也就是为了更好的利用NUMA来给咱们干活:
为描述在 NUMA 架构下针对内存访问的优化,我们可以引入 NUMA 策略的概念。 NUMA 策略 (NUMA Policy) 即是指在多个节点上合理的进行内存分配的机制。对于不同软件设计要求,策略的目标可能会不同:有一些设计可能强调低延迟访问,另一些则可能更加看重内存的访问带宽。
 
对于强调低延迟访问的设计,基本的分配方式就是尽量在线程的本地内存上为其进行分配, 并尽量让线程保持在该节点上。这被称为线程的节点亲和性 (Node affinity) 。这样既充分利用了本地内存的低延迟, 同时也能有效降低节点间的通信负担。
 
NUMA 架构的一个优势是,即便是在拥有大量 CPU 的大规模系统中,我们也可以保证局部内存访问的低延迟。通常来讲, CPU 的处理速度是远大于内存的存取速度的。在读写内存时, CPU 常常需要花大量的时钟周期来等待。降低内存访问的延迟因而能够有效的提升软件性能。
 
另外,为 SMP 设计的操作系统通常会有缓存亲和性 (Cache Affinity) 的优化措施。缓存亲和性机制可以让数据尽量长时间的保留在某一个 CPU 的缓存中,而不是来回在多个 CPU 的缓存里换来换去。操作系统通常是通过优化进行线程 / 进程调度来保证这一点:在线程被重新调入时,调度器会尽量让线程在之前运行的同一个 CPU 上运行,从而保证缓存利用率。这一机制显然是和 NUMA 系统尽量利用本地内存的策略是一致的,有利于面向 SMP 系统的程序向 NUMA 架构移植。
 
但缓存亲和性机制同 NUMA 系统的节点亲和性又是有区别的:首先,同一个节点间多个 CPU 或者核的线程迁移并不影响该线程的节点亲和性;其次,当线程被迫迁移到其他节点时,他所拥有的内存是不会跟着迁移的, 仍然保留在原来位置。这个时候,本地内存就变成了远端内存,对它的访问既慢又占用节点通信带宽。相对的,线程在迁移之后能够以较小的代价迅速建立起新的缓存,并继续在新 CPU 上体现缓存的亲和优势。 因此, NUMA 系统对于节点亲和性的依赖更大。
 
操作系统的调度器同时也不能仅仅为保证节点亲和性做优化。因为通常相对于频繁访问远端内存来说,让 CPU 空闲带来的性能损失更大。如果特定应用系统的性能受内存访问的影响远大于 CPU 的利用率,这个时候程序员或者管理员则可采用特别的 NUMA 策略来强调节点的亲和性,从而提升性能。
 
另外 , 尽管大部分应用会因为优化响应时间而收益,还有一部分应用则对内存带宽比较敏感。为了提升内存带宽, NUMA 架构下的多个内存控制器可以并行使用。这类似于 RAID 阵列通过并行处理磁盘 IO 来提升读写性能。通过适当的软件或者硬件机制, NUMA 架构可以使内存控制单元在各个内存控制器上交替的分配内存。这意味着分配得到的连续内存页面会水平地分布到各个节点上。当应用程序对内存进行流式读写时,各个内存控制器的带宽就相当于累加了。此机制获得性能提升决定于 NUMA 架构的实现。对于远端内存访问延迟严重的架构,该提升往往会比较明显。在一些 NUMA 系统中,系统硬件本身提供了节点交织分配机制;而在没有硬件提供节点交织的系统中,可由操作系统来实现该机制。

你可能感兴趣的:(职场,英特尔,休闲,Xeon,numa)