【Linux】NUMA一点基础知识

NUMA,非统一内存访问(Non-uniform Memory Access),介于SMP(对称多处理)和MPP(大规模并行处理)之间,各个节点自有内存(甚至IO子系统),访问其它节点的内存则通过高速网络通道。NUMA信息主要通过BIOS中的ACPI(高级配置和编程接口)进行配置,Linux对NUMA系统的物理内存分布信息从系统firmware的ACPi表中获得,最重要的是SRAT(System Resource Affinity Table)和SLIT(System locality Information Table)表。SRAT表包含CPU信息、内存相关性信息,SLIT表则记录了各个节点之间的距离,在系统中由数组node_distance[]记录。这样系统可以就近分配内存,减少延迟。

Linux中用一个struct pg_data_t表示一个numa节点,Linux内核支持numa调度,并实现CPU的负载均衡。

既然提到了NUMA架构,那么我们就有必要先来了解下NUMA是什么。 NUMA,非统一内存访问(Non-uniform Memory Access),介于SMP和MPP之间。

在NUMA架构中,每一颗CPU被称为一个node,每个node之间的内存使用的独立的。首先我们来看下传统模式SMP的情况:

SMP架构:

我们可以看到,每个CPU之间是绝对平等的,没有优先级之分,访问内存都必须通过系统总线。同时CPU之间的访问也是需要经过系统总线的。

从这个架构大家也可以看到SMP架构的短板是什么地方了。 对于现在动辄数十个甚至几百个CPU的系统来讲,这显然是有问题的。系统的总线将是

整个系统的瓶颈。

因此随着技术的发展,引入了新的一种架构NUMA。 我们来看NUMA架构是什么样的:

NUMA架构:

大家从NUMA架构可以看出,每颗CPU之间是独立的,相互之间的内存是不影响的。每一颗CPU访问属于自己的内存,延迟是最小的。我们这里再混到前面的例子中:



查看是否支持:dmesg | grep -i numa


点击(此处)折叠或打开

  1. [root@bj150 ~]# dmesg | grep -i numa
  2. NUMA: Allocated memnodemap from b000 - b240
  3. NUMA: Using 28 for the hash shift.
  4. pci_bus 0000:00: on NUMA node 0 (pxm 1)
  5. pci_bus 0000:40: on NUMA node 1 (pxm 2)
  6. pci_bus 0000:3f: on NUMA node 0 (pxm 1)
  7. pci_bus 0000:7f: on NUMA node 1 (pxm 2)

要查看具体的numa信息用numastat

点击(此处)折叠或打开

  1. [root@bj150 ~]# numastat
  2.                node0 node1
  3. numa_hit 45239238685 13466502885
  4. numa_miss 975259 1223334238
  5. numa_foreign 1223334238 975259
  6. interleave_hit 19791 19712
  7. local_node 45239134585 13466488455
  8. other_node 1079359 1223348668
  9. numa_hit是打算在该节点上分配内存,最后从这个节点分配的次数;

    num_miss是打算在该节点分配内存,最后却从其他节点分配的次数;

    num_foregin是打算在其他节点分配内存,最后却从这个节点分配的次数;

    interleave_hit是采用interleave策略最后从该节点分配的次数;

    local_node该节点上的进程在该节点上分配的次数

    other_node是其他节点进程在该节点上分配的次数



lscpu可以看到两个node的cpu归属:

点击(此处)折叠或打开

  1. [root@bj150 ~]# lscpu
  2. Architecture: x86_64
  3. CPU op-mode(s): 32-bit, 64-bit
  4. Byte Order: Little Endian
  5. CPU(s): 32
  6. On-line CPU(s) list: 0-31
  7. Thread(s) per core: 2
  8. Core(s) per socket: 8
  9. Socket(s): 2
  10. NUMA node(s): 2
  11. Vendor ID: GenuineIntel
  12. CPU family: 6
  13. Model: 62
  14. Stepping: 4
  15. CPU MHz: 2600.110
  16. BogoMIPS: 5199.29
  17. Virtualization: VT-x
  18. L1d cache: 32K
  19. L1i cache: 32K
  20. L2 cache: 256K
  21. L3 cache: 20480K
  22. NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
  23. NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31

  24. 各个cpu负载情况,使用命令:mpstat -P ALL(需要安装sysstat)

    Linux上使用numactl设定进程的numa策略。常见的情况是,数据库daemon进程(mongodb,mysql)可能会吃掉很多内存,而一个numa节点上的内存很有限,内存不够时虚拟内存频繁与硬盘交换数据,导致性能急剧下降(标识是irqbalance进程或cpuspeed进程top中居高不下),这时应该采用interleave的numa策略,允许从其他节点分配内存。



查看每个节点对应的内存使用情况
  1. [root@bj150 ~]# numactl --show
  2. policy: default
  3. preferred node: current
  4. physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  5. cpubind: 0 1
  6. nodebind: 0 1
  7. membind: 0 1
  8. [root@bj150 ~]# numactl --hardware
  9. available: 2 nodes (0-1)
  10. node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
  11. node 0 size: 32722 MB
  12. node 0 free: 11452 MB
  13. node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
  14. node 1 size: 32768 MB
  15. node 1 free: 3877 MB
  16. node distances:
  17. node 0 1
  18.   0: 10 20
  19.   1: 20 10


禁用numa
1. 在操作系统中关闭,可以直接在/etc/grub.conf的kernel行最后添加numa=off,如下所示:

  kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off


2 启动MySQL的时候,关闭NUMA特性:

  numactl --interleave=all mysqldpath 这是使用交叉分配模式启动一个程序,也就是说程序可以随意跨节点用其他节点的内存,传说中这是效率最高的关闭NUMA特性的方法,只是传说。
   或
   numactl –cpunodebind=node –localalloc mysqld
3 BOIS层关闭




参考文档
 http://blog.csdn.net/jollyjumper/article/details/17168175
http://www.tuicool.com/articles/FzmmQj

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2063145/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-2063145/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值