1. 概述

NUMA(Non-Uniform Memory Access Architecture)即非一致性内存访问技术。 NUMA系统有多个Node通过高速互连的网络联系起来的系统。而Node则是由一组cpu 和本地内存组成。不同的Node有不同的物理内存,由于Node访问本地内存和访问其它节点 的内存的速度是不一致的,为了解决非一致性访问内存对性能的影响,有一些工具可以使用。 包括 numactl,autonuma, HPE-AIX等。

2.  Node/zone/page之间的关系

注1: linux用 pg_data_t结构来描述一个Node。 一个Node的内存由多个 zone组成。zone的类型主要有ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM。ZONE_DMA位于低端的内存空间,用于某些旧的ISA设备。ZONE_NORMAL的内存直接映射到Linux内核线性地址空间的高端部分,许多内核操作只能在ZONE_NORMAL中进行。例如,在X86中,zone的物理地址如下:

类型 地址范围
ZONE_DMA 前16MB内存
ZONE_NORMAL 16MB - 896MB
ZONE_HIGHMEM 896 MB以上
Zone是用struct zone_t描述的,它跟踪页框使用、空闲区域和锁等信息
说明
Lock 旋转锁,用于保护该zone
free_pages 该zone空闲页总数
pages_min,

pages_low,

pages_high

Zone的阈值
need_balance 该标志告诉kswapd需要对该zone的页进行交换
Free_area 空闲区域的位图,用于buddy分配器
wait_table 等待释放该页进程的队列散列表,这对wait_on_page()和unlock_page()是非常重要的。当进程都在一条队列上等待时,将引起进程的抖动
zone_mem_map 全局mem_map中该zone所引用的第一页
zone_start_paddr 含义与node_start_paddr类似
zone_start_mapnr 含义与node_start_mapnr类似
Name 该zone的名字。如,“DMA”,“Normal”或“HighMem”
Size Zone的大小,以页为单位

3.  NUMA 相关信息查看工具

1) 查看是否支持NUMA

# dmesg | grep -i NUMA
[    0.000000] NUMA: Initialized distance table, cnt=2
[    0.000000] NUMA: Node 0 [mem 0x00000000-0x7fffffff] + [mem 0x100000000-0x107fffffff] -> [mem 0x00000000-0x107fffffff]
[    0.000000] Enabling automatic NUMA balancing. Configure with numa_balancing= or the kernel.numa_balancing sysctl
[    1.082448] pci_bus 0000:00: on NUMA node 0
[    1.084608] pci_bus 0000:7f: on NUMA node 0
[    1.085942] pci_bus 0000:80: on NUMA node 1
[    1.088235] pci_bus 0000:ff: on NUMA node 1
2) 查看numa的状态 numastat
# numastat
                           node0           node1
numa_hit                15911737        17595326       #  numa_hit是打算在该节点上分配内存,最后从这个节点分配的次数;
numa_miss                      0               0     #  num_miss是打算在该节点分配内存,最后却从其他节点分配的次数;;
numa_foreign                   0               0 #  num_foregin是打算在其他节点分配内存,最后却从这个节点分配的次数;
interleave_hit             36706           36904 #  interleave_hit是采用interleave策略最后从该节点分配的次数;
local_node              15903586        17527159 #  local_node该节点上的进程在该节点上分配的次数
other_node                  8151           68167 #  other_node是其他节点进程在该节点上分配的次数
3) 查看各个Node的cpu信息 lscpu
# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                40
On-line CPU(s) list:   0-39
Thread(s) per core:    2
Core(s) per socket:    10
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-2660 v2 @ 2.20GHz
Stepping:              4
CPU MHz:               2118.617
BogoMIPS:              4405.31
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              25600K
NUMA node0 CPU(s):     0-9,20-29     *
NUMA node1 CPU(s):     10-19,30-39

4  测试(访问不同节点的内存的IO)

1)  write 测试
# numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.823497 s, 1.3 GB/s
# numactl --cpubind=0 --membind=1 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.936182 s, 1.1 GB/s
明显访问同一节点的内存速度比访问不同节点内存的速度快。
2) read 测试
# numactl --cpubind=0 --membind=0 dd if=/dev/shm/A of=/dev/null  bs=1K count=1024K
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 1.09543 s, 980 MB/s
# numactl --cpubind=0 --membind=1 dd if=/dev/shm/A of=/dev/null  bs=1K count=1024K
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 1.11862 s, 960 MB/s
结论和write 相同。但是差距比较小。

5. 参考资料

1) http://www.ibm.com/developerworks/cn/linux/l-numa/
2) http://blog.csdn.net/jollyjumper/article/details/17168175

linux NUMA技术相关推荐

  1. Linux内存管理:NUMA技术详解(非一致内存访问架构)

    图片来源:https://zhuanlan.zhihu.com/p/68465952 <Linux内存管理:转换后备缓冲区(TLB)原理> <内存管理:Linux Memory Ma ...

  2. KVM虚拟化技术的-NUMA技术和应用

    KVM虚拟化技术的-NUMA技术和应用 NUMA技术是解决多CPU共同工作的技术方案,多CPU共同工作主要有3中架构:SMP:Symmetric Multi-Processor),非统一存储访问结构( ...

  3. 【银河麒麟V10】【服务器】numa技术

    目录 1.numa介绍 2.numa工具安装 3.numa查看 4.numa测试 5.numa打开与关闭 6.补充:服务器SMP.NUMA.MPP三大体系结构介绍 (1). SMP(Symmetric ...

  4. Linux NUMA

    1. 基本概念 1.1 SMP VS. AMP SMP(Symmetric Multiprocessing), 即对称多处理器架构,是目前最常见的多处理器计算机架构. AMP(Asymmetric M ...

  5. 预测汽车级Linux专业技术的需求

    预测汽车级Linux专业技术的需求 Anticipating need for Automotive Grade Linux expertise 在听了多年汽车级Linux(AGL)及其所有潜力之后, ...

  6. Linux内存技术分析(下)

    Linux内存技术分析(下) 五. 内存使用场景 out of memory 的时代过去了吗?no,内存再充足也不可任性使用. 1.内存的使用场景 · page管理 · slab(kmalloc.内存 ...

  7. Linux内存技术分析(上)

    Linux内存技术分析(上) 一.Linux存储器 限于存储介质的存取速率和成本,现代计算机的存储结构呈现为金字塔型.越往塔顶,存取效率越高.但成本也越高,所以容量也就越小.得益于程序访问的局部性原理 ...

  8. Linux磁盘阵列技术详解(二)--raid 1创建

    我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...

  9. Linux系统管理技术

    Linux系统管理技术 操作系统(Operating System) 简称OS,软硬件资源的管理者,它是最复杂的软件,对下管理各种硬件资源,对上为所有应用软件的运行提供一个平台 主流操作系统 PC:W ...

最新文章

  1. 面了个 32+ 岁 Java 大佬,一言难尽......
  2. python语言入门详解-python初级教程:入门详解
  3. php获取控制器返回,从php中的mvc控制器方法返回一个json值
  4. html 常用字符,html 常用特殊字符
  5. Python __name__ == ‘__main__’详细解释-Python零基础入门教程
  6. android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法
  7. 权限修饰符(public、protected、default、private)权限验证
  8. Java中四种遍历Map对象的方法
  9. 最大子数组累加和(2种方法)
  10. 回溯策略的汉诺塔问题
  11. ubuntu mysql5.5编码_Ubuntu下MySQL5.5编码设置
  12. Log4cpp 安装和使用
  13. 将HaneWin DHCP 注册为服务
  14. C++“准”标准库Boost学习指南(3):Boost.Utility
  15. 决定使用JBPM3、JBPM4、Drools Folw 还是等待JBPM5?
  16. Qt开发环境下载和安装
  17. Anroid通过设置“自启动管理”让应用被杀死也能收到推送消息
  18. react 微信公众平台实现支付功能
  19. 英文歌曲:my heart will go on(我心永恒)
  20. 【LaTex】常用特殊符号对应表

热门文章

  1. JavaWeb开发概览
  2. Python正则表达式文本替换
  3. 基于Python Django框架后端的微信小程序开发
  4. c++中的类成员函数指针
  5. Python题综合练习一
  6. 【模板】最小费用最大流
  7. 一文读懂JVM虚拟机:JVM虚拟机的内存管理(万字详解)
  8. 3万亿背后 阿里正在造全球通用计算机
  9. 大学四年是这么度过的——大学四年总结
  10. 一文读懂Q-Learning,DQN,DDPG的连接关系