NUMA技术相关笔记

标签: numa 技术 相关 | 发表时间:2013-12-07 00:33 | 作者:jollyjumper
出处:http://blog.csdn.net

起源于在mongo启动脚本中看到numactl --interleave=all mongod ...。

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的负载均衡。

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

要查看具体的numa信息用numastat

numastat

返回如:

                           node0           node1
numa_hit             19983469427     20741805466
numa_miss             1981451471      2503049250
numa_foreign          2503049250      1981451471
interleave_hit         849781831       878579884
local_node           19627390917     20298995632
other_node            2337529981      2945859084

numa_hit是打算在该节点上分配内存,最后从这个节点分配的次数;

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

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

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

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

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

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

lscpu

...

NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31

numactl --hardware命令则会返回不同节点的内存总大小,可用大小,以及node distance等信息。

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

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

各个内存的访问延迟如何?numactl man中的example提供了参考,我在公司的服务器上测了一下:

写速度:

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.546679 s, 2.0 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.612825 s, 1.8 GB/s

读速度:

测试从同一个节点读取:

numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/A bs=1M count=1000
date +%s.%N
numactl --cpubind=0 --membind=0 cp /dev/shm/A /dev/null
date +%s.%N
rm /dev/shm/A

花费0.264556884765625秒,速度是3.779905410081901GB/s。

从另一个节点读取:

numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/A bs=1M count=1000
date +%s.%N
numactl --cpubind=1 --membind=1 cp /dev/shm/A /dev/null
date +%s.%N
rm /dev/shm/A

花费0.3308408260345459秒,速度是3.022601569419312GB/s。

加速效果还是很明显的。


参考:

http://www.ibm.com/developerworks/cn/linux/l-numa/

http://www.dedecms.com/knowledge/data-base/nosql/2012/0820/8684.html

作者:jollyjumper 发表于2013-12-6 16:33:55 原文链接
阅读:66 评论:0 查看评论

相关 [numa 技术 相关] 推荐:

NUMA技术相关笔记

- - CSDN博客架构设计推荐文章
起源于在mongo启动脚本中看到numactl --interleave=all mongod .... NUMA,非统一内存访问(Non-uniform Memory Access),介于SMP(对称多处理)和MPP(大规模并行处理)之间,各个节点自有内存(甚至IO子系统),访问其它节点的内存则通过高速网络通道.

NUMA微架构

- - 夏清然的日志
现在开始补日志,逐步的扫清以前写了一半的和“欠账未还的”. 半年之前开的头,今天先把NUMA说完. PC硬件结构近5年的最大变化是多核CPU在PC上的普及,多核最常用的SMP微架构:. 多个CPU之间是平等的,无主从关系(对比IBM Cell);. 多个CPU平等的访问系统内存,也就是说内存是统一结构、统一寻址的(UMA,Uniform Memory Architecture);.

深挖NUMA

- - 开源小站
首先列出本站之前相关的几篇帖子:. cgroup的cpuset问题. 这次,就来深入了解下NUMA. 就如之前说的,在若干年前,对于x86架构的计算机,那时的内存控制器还没有整合进CPU,所有内存的访问都需要通过北桥芯片来完成. 此时的内存访问如下图所示,被称为UMA( uniform memory access, 一致性内存访问  ).

NUMA对性能的影响

- - 开源小站
事出这一段时间做了不少基于SPECjbb2005的系统性能测试,发觉对于不少平台,可以出现相当大的采样偏差,而有这么一台主机却表现的相当稳定. 仔细排查之后,最终定位到了NUMA. 之前曾经介绍过 NUMA的原理以及基于 Cgroup的NUMA设定. 这次我采用的是通过docker封装好的SPECjbb2005,Docker从本质上说底层就是一个cgroup.

Hadoop相关技术

- - CSDN博客云计算推荐文章
Apache的Hadoop是什么. Apache的Hadoop项目™®开发出可靠的,可扩展的,分布式计算的开源软件. Apache的Hadoop的软件库是一个框架,允许大型数据集通过计算机集群使用简单的编程模型,进行分布式处理. 它的设计规模从单一服务器到数千台计算机,每个提供本地计算和存储. 软件库是用来检测和处理应用层失败的,而不是依靠硬件提供高的有效度,因此在计算机集群上提供高度可用性服务,其中每个都有可能会有失败.

NUMA 架构中 MySQL 的 “swap insanity” 问题

- khsing - Linux@SOHU
翻译:王鑫、朱翊然、李凯、曾怀东、马少兵、林业. 在一台包括了2个4核CPU,64GB内存的服务器上,给 MySQL 配置了 48GB 之巨的 InnoDB 缓冲,随着时间的推移,尽管观察到的数据(见最后注1)表示并没有真正的内存压力,Linux 也会把大量的内存交换到磁盘上. 通过监控发现,配置的内存超过了实际所需,而且也不存在内存泄漏,mysqld的RSS占用正常且稳定.

修改numa和io调度优化mysql性能

- 高春辉 - C1G军火库
单机单实例,建议关闭NUMA,关闭的方法有三种:. 1.硬件层,在BIOS中设置关闭;. 2.OS内核,启动时设置numa=off;. 3.可以用numactl命令将内存分配策略修改为interleave(交叉). 修改mysql.server 330行加上numactl. numastat 查看内存分配.

NUMA架构的CPU -- 你真的用好了么?

- - cenalulu's Tech Blog
本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部. 作者:卢钧轶(cenalulu). 本文原文地址: http://cenalulu.github.io/linux/numa/.

论Web Service 相关技术(转)

- - 互联网 - ITeye博客
摘要:随着Internet和weh技术的迅速发展,传统的分布式计算技术已经不能 很好的适用于Web环境. 正是基于这种情况,Web Service技术应运而生. Web Service是一个新概念,它的系统架构、实现技术是现有应用的面向Internet的一个延伸. Web是为了程序到用户的交互,而Web Service是为程序到程序的交互作准备,web Service已成为IT产业近几年来探索的热点课题之一.

国外技术相关优秀网站分享

- - Java译站
最近翻译关注的一些博客和网站,排名不分先后. http://blog.adam-bien.com/ Adam Bien的个人博客,主要是Java&Java EE相关. http://techblog.bozho.net/ Java, Android,WEB相关. http://www.captaindebug.com/ Java, Spring, Weblogic, Oracle, MySQL等.