NUMA:非均匀访存带来了哪些提升与挑战

407 阅读2分钟

不同的 CPU 访问不同地址主存的速度各不相同,我们把采用这种设计的内存叫做非一致性访存(Non-uniform memory access,NUMA)。

物理内存最重要的三个部分是:

  • 从 640K(0xa0000)到 1M(0xfffff)区间,是被 ISA 设备的 RAM 和 ROM 占据的;
  • 从 1M 开始才是主存(System RAM)
  • 物理内存的最后 256M(0xf0000000 到 0xffffffff)保留给了 PCI 设备,用于 IO 内存映射。

IO 端口主要用于状态读取和设置等控制命令的通讯,而 IO 内存映射主要用于大量的数据传输。

一致性是指,同一个 CPU 对所有内存的访问的速度是一样的,因为物理内存是连续且集中的。而非一致性是指,内存在物理上被分为了多个节点 node,CPU 可以访问所有节点,但是为了提升访问效率,CPU 可以有选择地优先访问离自己近的内存节点。

image.png

NUMA 在扩展时只需要关注 CPU 之间的连接,不占用总线带宽,自然就成为现代处理器的选择。

绑核的意思就是将进程的运行环境和特定的 CPU 组,内存节点捆绑在一起。实际应用中,我们可以根据自身需求,调整绑核策略,来提升应用程序的性能。

内存分配策略:

image.png

libnuma 是一套封装了 NUMA 相关操作的共享库,目的是为开发者提供一套绑核操作的 API。使用也非常简单,只要在源码文件中引入相应的头文件,并且在编译时加入链接选项。就可以进行使用了。可以采用libnuma所提供的API来自主控制NUMA策略。


此文章为7月Day17学习笔记,内容来源于极客时间《编程高手必学的内存知识》