【连载之六】~~NUMA与英特尔下一代Xeon处理器学习心得!

ozar1155 2009-01-07 04:43:26
加精
接下来讲讲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系统中,系统硬件本身提供了节点交织分配机制;而在没有硬件提供节点交织的系统中,可由操作系统来实现该机制。
...全文
360 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dnsRRR 2009-04-27
  • 打赏
  • 举报
回复
?numa系统和群集系统各自适用的场合及性价比比较
yunyouyou 2009-01-10
  • 打赏
  • 举报
回复
顶!
DLM8207 2009-01-09
  • 打赏
  • 举报
回复
楼主这么兴致
piternb 2009-01-09
  • 打赏
  • 举报
回复
非常全面的学习心得, 跟着一起学了
wzzwt 2009-01-09
  • 打赏
  • 举报
回复
站在高手面前,真是幸运!
derelictangel 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjf30366 的回复:]
UP
[/Quote]

PS:
我的目标是 ---->

^_^
zjf30366 2009-01-09
  • 打赏
  • 举报
回复
UP
mengxj85 2009-01-09
  • 打赏
  • 举报
回复
支持,拜读结束

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧