详说 NUMA

标签(空格分隔): Cloud2.0


测试条件

两台机器:

CPU:

Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz X 24

Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz X 40

背景知识

![300px-NUMA.svg.png-10.1kB][1]

简要的说一下NUMA架构,更多的资料请google,本文只针对NUMA做一些特定点的测试,论证网上很多关于NUMA的流言蜚语.

测试过程

  • NUMA 结构下,某个CPU SOCKET NODE 无内存的情况下,会使用交换分区还是使用其他 NODE 的内存 ?

    NUMA 信息如下, 看到 node 0 和 node 1 的内存都还剩下42G 左右,那在 cpu0 上占用64G 的内存,剩下的22G会不会使用到交换分区,还是使用 node 1 的内存呢?
root@ip-10-21-184-4:/home/zhangbo3# numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 20 21 22 23 24 25 26 27 28 29
node 0 size: 64141 MB
node 0 free: 42625 MB
node 1 cpus: 10 11 12 13 14 15 16 17 18 19 30 31 32 33 34 35 36 37 38 39
node 1 size: 64509 MB
node 1 free: 43405 MB
node distances:
node 0 1
0: 10 20
1: 20 10

使用 stress 将某个 CPU 的内存沾满,总共 64G

root@ip-10-21-184-4:/home/zhangbo3# stress -m 1 --vm-bytes 64G --vm-keep
stress: info: [23651] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd

查看内存使用情况

root@ip-10-21-184-4:/home/zhangbo3# numastat -p 23652

Per-node process memory usage (in MBs) for PID 23652 (stress)
Node 0 Node 1 Total
--------------- --------------- ---------------
Huge 0.00 0.00 0.00
Heap 0.00 0.00 0.00
Stack 0.00 0.01 0.01
Private 44313.61 21222.64 65536.25
---------------- --------------- --------------- ---------------
Total 44313.61 21222.66 65536.27

统计结果发现并没有使用交换分区,而是使用到了 Node1 的内存,系统并没有那么傻,有内存不用而使用交换分区.

是否是因为numa balancing参数导致?

我们关闭 numa balancing 再测试一次

echo 0 > /proc/sys/kernel/numa_balancing

root@ip-10-21-184-4:/home/zhangbo3# numastat -p 24003

Per-node process memory usage (in MBs) for PID 24003 (stress)
Node 0 Node 1 Total
--------------- --------------- ---------------
Huge 0.00 0.00 0.00
Heap 0.00 0.00 0.00
Stack 0.00 0.01 0.01
Private 44318.18 21218.07 65536.25
---------------- --------------- --------------- ---------------
Total 44318.18 21218.08 65536.26

结果仍然是一样。

  • NUMA 结构下,跨 NODE 访问和 NODE 本地访问的效率差别是多少?

打开NUMA

cpu 与 mem 不在同一个 node 情况下,写内存速度

root@ip-10-21-184-4:/home/zhangbo3# numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/local bs=20M count=1024
1024+0 records in
1024+0 records out
21474836480 bytes (21 GB) copied, 9.14673 s, 2.3 GB/s

cpu 与 mem 在同一个 node 情况下,读内存速度

root@ip-10-21-184-4:/home/zhangbo3# numactl --cpubind=0 --membind=0 dd of=/dev/null if=/dev/shm/local bs=20M count=1024
1024+0 records in
1024+0 records out
21474836480 bytes (21 GB) copied, 5.22966 s, 4.1 GB/s

cpu 与 mem 不在同一个 node 情况下,写内存速度

numactl --cpubind=0 --membind=1 dd if=/dev/zero of=/dev/shm/remote bs=20M count=1024
1024+0 records in
1024+0 records out
21474836480 bytes (21 GB) copied, 12.2229 s, 1.8 GB/s

cpu 与 mem 不在同一个 socket 情况下,读内存速度

root@ip-10-21-184-4:/home/zhangbo3# numactl --cpubind=0 --membind=1 dd of=/dev/null if=/dev/shm/B bs=20M count=1024
1024+0 records in
1024+0 records out
21474836480 bytes (21 GB) copied, 7.31183 s, 2.9 GB/s

关闭NUMA

写效率

numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/1 bs=20MB count=1024
1024+0 records in
1024+0 records out
20480000000 bytes (20 GB) copied, 10.8606 s, 1.9 GB/s

读效率

root@ip-10-21-184-243:/home/zhangbo3# numactl --cpubind=0 --membind=0 dd of=/dev/null if=/dev/shm/A bs=20MB count=1024
1024+0 records in
1024+0 records out
20480000000 bytes (20 GB) copied, 5.41376 s, 3.8 GB/s

以上测试只作为一个基准测试,并不代表真实的内存访问或写入速率.

结论

  1. NUMA 架构情况下,并不会导致到某个node内存不够的情况下,使用到交换分区而不使用其他内存的数据,可能这跟node1 上的内存比较充裕有关,但是node1上内存不够的情况下,大家都使用交换分区,并没有什么不妥。
  2. 大多数情况下,还是建议打开NUMA,特别是在CPU核数比较多的情况下,local memory access 还是快很多,毕竟大部分情况下不会出现remote memory access。

    [1]: http://static.zybuluo.com/mr8/kuz5e78l2cc8nvw5j2rqr59s/300px-NUMA.svg.png

[原] 细说 NUMA的更多相关文章

  1. OpenStack 虚拟机冷/热迁移的实现原理与代码分析

    目录 文章目录 目录 前文列表 冷迁移代码分析(基于 Newton) Nova 冷迁移实现原理 热迁移代码分析 Nova 热迁移实现原理 向 libvirtd 发出 Live Migration 指令 ...

  2. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  3. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

  4. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  5. 【原】SDWebImage源码阅读(五)

    [原]SDWebImage源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 前面的代码并没有特意去讲SDWebImage的缓存机制,主要是想单独开一章节专门讲 ...

  6. 【原】SDWebImage源码阅读(三)

    [原]SDWebImage源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1.SDWebImageDownloader中的downloadImageWithURL 我们 ...

  7. C#综合揭秘——细说多线程(上)

    引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发. 其中委托的BeginInvoke方法以及回调函数最为常用. 而 I/O线程 ...

  8. [转]C#综合揭秘——细说进程、应用程序域与上下文之间的关系

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...

  9. PHP图像处理之在原图像处理

    处理原有的图像        图片处理,缩放,裁剪,翻转,旋转,透明,锐化等图片操作        一.创建图片资源            imagecreatetruecolor(width,hei ...

随机推荐

  1. [Visual Studio]透过Visual Studio 2012的选择性贴上将XML与JSON直接转成对应的类别

    原文:[Visual Studio]透过Visual Studio 2012的选择性贴上将XML与JSON直接转成对应的类别 在开发专案时若碰到要串接服务或是他人的API,常常避免不了都要面对XML或 ...

  2. poj3903 Stock Exchange(最长上升子序列)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=3903">http://poj.org/problem?id=3903 Descrip ...

  3. Android通过意图使用内置的音频播放器

    假设实现一个音频文件的播放,那么在应用程序中提供播放音频文件功能的最简单的方式是利用内置的"Music(音乐)"应用程序的功能--即使用系统自带的或已安装好的音乐播放器来播放指定的 ...

  4. Javascipt数组去重的几种方式

    方法一 function unique(arr) { var retArr = []; for (var i = 0; i < arr.length; i++) { (retArr.indexO ...

  5. Spring Security 入门详解(转)

    1.Spring Security介绍 Spring Security是基于spring的应用程序提供声明式安全保护的安全性框架,它提供了完整的安全性解决方案,能够在web请求级别和方法调用级别 处理 ...

  6. Web Api 2, Oracle and Entity Framework

    Web Api 2, Oracle and Entity Framework I spent about two days trying to figure out how to expose the ...

  7. CQRS模式实现

    [.NET领域驱动设计实战系列]专题十:DDD扩展内容:全面剖析CQRS模式实现 一.引言 前面介绍的所有专题都是基于经典的领域驱动实现的,然而,领域驱动除了经典的实现外,还可以基于CQRS模式来进行 ...

  8. hdu 3460 Ancient Printer

    Problem Description The contest is beginning! While preparing the contest, iSea wanted to print the ...

  9. ashx的学习

    原文:ashx的学习 嘿嘿,今天我们休息,本来是想总结一下前两周学习的javascript和jquery,但是感觉好困哦,就没有认真地学习啦,于是做了一个小小的练习,刚开始学习html使用在项目中还是 ...

  10. hardware_hp存储映射_方案

    修改虚拟磁盘映射方式 每个刀片独立对应映射存储空间 这样就不会造成数据写入冲突, old new 步奏: 创建过程  lun号码  1-155 之间 第二步奏 最后 指定: 就ok了 2012年12月 ...