linux上numa架构实例分析


今天小编给大家分享一下linux上numa架构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。以下案例基于 Ubuntu 16.04,同样适用于其他的 Linux 系统。我使用的案例环境如下所示:机器配置:32 CPU,64GB 内存1)处理器层:单个物理核,称为处理器层。2)本地节点层:对于某个节点中的所有处理器,此节点称为本地节点。3)home节点层:与本地节点相邻的节点称为home节点。4)远程节点层:非本地节点或邻居节点的节点,称为远程节点。CPU访问不同类型节点内存的速度是不相同的,访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢,此距离称作Node Distance。应用程序要尽量的减少不同CPU模块之间的交互,如果应用程序能有方法固定在一个CPU模块里,那么应用的性能将会有很大的提升。**以鲲鹏920处理器讲一下cpu芯片的的构成:**鲲鹏920处理器片上系统的每个超级内核集群包含6个内核集群、2个I/O集群和4个DDR控制器。每个超级内核集群封装成一个CPU晶片。每个晶片上集成了4个72位(64位数据加8位ECC)、数据传输率最高为3200MT/s的高速DDR4通道,单晶片可支持最多512GB4的DDR存储空间。L3 Cache在物理上被分为两部分:L3 Cache TAG和L3 Cache DATA。L3 Cache TAG集成在每个内核集群中,以降低监听延迟。L3 Cache DATA则直接连接片上总线。Hydra根代理(Hydra Home Agent,HHA)是处理多芯片系统Cache一致性协议的模块。POE_ICL是系统配置的硬件加速器,一般可以用作分组顺序整理器、消息队列、消息分发或者实现某个处理器内核的特定任务等。此外,每个超级内核集群在物理上还配置了一个通用中断控制器分发器(GICD)模块,兼容ARM的GICv4规范。当单芯片或多芯片系统中有多个超级内核集群时,只有一个GICD对系统软件可见。Linux提供了一个一个手工调优的命令numactl(默认不安装),在Ubuntu上的安装命令如下:首先你可以通过man numactl或者numactl –h了解参数的作用与输出的内容。查看系统的numa状态:运行得到如下的结果:根据这个图与命令得到的结果,可以看到,此系统共有4个node,各领取8个CPU和16G内存。 这里还需要注意的就是CPU共享的L3 cache也是会自己领取相应的空间。通过numastat命令可以查看numa状态,返回值内容:numa_hit:是打算在该节点上分配内存,最后从这个节点分配的次数;numa_miss:是打算在该节点分配内存,最后却从其他节点分配的次数;numa_foreign:是打算在其他节点分配内存,最后却从这个节点分配的次数;interleave_hit :采用interleave策略最后从本节点分配的次数local_node:该节点上的进程在该节点上分配的开发云主机域名次数other_node:是其他节点进程在该节点上分配的次数注:如果发现 numa_miss 数值比较高时,说明需要对分配策略进行调整。例如将指定进程关联绑定到指定的CPU上,从而提高内存命中率。–localalloc或者-l:规定进程从本地节点上请求分配内存。–membind=nodes或者-m nodes:规定进程只能从指定的nodes上请求分配内存。–preferred开发云主机域名=node:指定一个推荐的node来获取内存,如果获取失败,则尝试别的node。–interleave=nodes或者-i nodes:规定进程从指定的nodes上,以round robin算法交织地请求内存分配。因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当开启了swap,某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity 现象。或导致性能急剧下降。所以在运维层面,我们也需要关注NUMA架构下的内存使用情况(多个内存节点使用可能不均衡),并合理配置系统参数(内存回收策略/Swap使用倾向),尽量去避免使用到Swap。Node->Socket->Core->Processor随着多核技术的发展,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核Processor数量。Socket = NodeSocket是物理概念,指的是主板上CPU插槽;Node是逻辑概念,对应于Socket。Core = 物理CPUCore是物理概念,一个独立的硬件执行单元,对应于物理CPU;Thread = 逻辑CPU = ProcessorThread是逻辑CPU,也就是Processolscpu的使用显示格式:Architecture:架构CPU(s):逻辑cpu颗数Thread(s) per core:每个核心线程,也就是指超线程Core(s) per socket:每个cpu插槽核数/每颗物理cpu核数CPU socket(s):cpu插槽数L1d cache:级缓存(google了下,这具体表示表示cpu的L1数据缓存)L1i cache:开发云主机域名一级缓存(具体为L1指令缓存)L2 cache:二级缓存L3 cache:三级缓存NUMA node0 CPU(s) :CPU上的逻辑核,也就是超线程执行lscpu,结果部分如下:以上就是“linux上numa架构实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注开发云行业资讯频道。

相关推荐: apache和tomcat有哪些区别

这篇文章主要介绍apache和tomcat有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!apache和tomcat有什么区别?共同点:1、两者都是ap开发云主机域名ache组织开发的2、两者都有HTTP服务的功能3、两者都是免…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/29 17:14
下一篇 03/29 17:14

相关推荐