我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux上numa架构实例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux上numa架构实例分析

今天小编给大家分享一下linux上numa架构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

linux上numa架构实例分析

以下案例基于 Ubuntu 16.04,同样适用于其他的 Linux 系统。我使用的案例环境如下所示:

机器配置:32 CPU,64GB 内存

在NUMA中储存层次的概念:

linux上numa架构实例分析

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通道,单晶片可支持最多512GB×4的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上numa架构实例分析

numactl的使用

Linux提供了一个一个手工调优的命令numactl(默认不安装),在Ubuntu上的安装命令如下:

sudo apt install numactl -y

首先你可以通过man numactl或者numactl --h了解参数的作用与输出的内容。查看系统的numa状态:

numactl --hardware

运行得到如下的结果:

available: 4 nodes (0-3)node 0 cpus: 0 1 2 3 4 5 6 7node 0 size: 16047 MBnode 0 free: 3937 MBnode 1 cpus: 8 9 10 11 12 13 14 15node 1 size: 16126 MBnode 1 free: 4554 MBnode 2 cpus: 16 17 18 19 20 21 22 23node 2 size: 16126 MBnode 2 free: 8403 MBnode 3 cpus: 24 25 26 27 28 29 30 31node 3 size: 16126 MBnode 3 free: 7774 MBnode distances:node   0   1   2   3  0:  10  20  20  20  1:  20  10  20  20  2:  20  20  10  20  3:  20  20  20  10

linux上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上,从而提高内存命中率。

root@ubuntu:~# numastat                           node0           node1           node2           node3numa_hit             19480355292     11164752760     12401311900     12980472384numa_miss                5122680       122652623        88449951            7058numa_foreign           122652643        88449935            7055         5122679interleave_hit             12619           13942           14010           13924local_node           19480308881     11164721296     12401264089     12980411641other_node               5169091       122684087        88497762           67801

NUMA的内存分配策略

--localalloc或者-l:规定进程从本地节点上请求分配内存。--membind=nodes或者-m nodes:规定进程只能从指定的nodes上请求分配内存。--preferred=node:指定一个推荐的node来获取内存,如果获取失败,则尝试别的node。--interleave=nodes或者-i nodes:规定进程从指定的nodes上,以round robin算法交织地请求内存分配。

 numactl --interleave=all mongod -f /etc/mongod.conf

因为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 = Node

Socket是物理概念,指的是主板上CPU插槽;Node是逻辑概念,对应于Socket。

Core = 物理CPU

Core是物理概念,一个独立的硬件执行单元,对应于物理CPU;

Thread = 逻辑CPU = Processor

Thread是逻辑CPU,也就是Processo

lscpu的使用

显示格式:

  • 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,结果部分如下:

root@ubuntu:~# lscpuArchitecture:          x86_64CPU(s):                32Thread(s) per core:    1Core(s) per socket:    8Socket(s):             4L1d cache:             32KL1i cache:             32KL2 cache:              256KL3 cache:              20480KNUMA node0 CPU(s):     0-7NUMA node1 CPU(s):     8-15NUMA node2 CPU(s):     16-23NUMA node3 CPU(s):     24-31

以上就是“linux上numa架构实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux上numa架构实例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux上numa架构实例分析

今天小编给大家分享一下linux上numa架构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。以下案例基于 Ubunt
2023-06-29

C#插件构架实例分析

这篇文章主要介绍“C#插件构架实例分析”,在日常操作中,相信很多人在C#插件构架实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#插件构架实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#
2023-06-17

Kubernetes架构的示例分析

这篇文章主要介绍Kubernetes架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先,为什么要用Kubernetes? 使用一个工具先要梳理下使用这个工具的目标,我们不是为了工具而用工具。Kubern
2023-06-19

分布式微服务云架构实例分析

今天就跟大家聊聊有关分布式微服务云架构实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。源码结构JEESZ驱动式项目构建内置高效可靠的代码生成器支持多种数据模型,根据数据库表生成
2023-06-05

Linux主流架构运维工作的示例分析

这篇文章将为大家详细讲解有关Linux主流架构运维工作的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。LVS+KEEPALIVED(heartbeat)+Squid+Nginx/Apache+JA
2023-06-12

服务器的高并发架构实例分析

本篇内容主要讲解“服务器的高并发架构实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“服务器的高并发架构实例分析”吧!服务器架构业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再
2023-06-05

Python自定义主从分布式架构实例分析

本文实例讲述了Python自定义主从分布式架构。分享给大家供大家参考,具体如下: 环境:Win7 x64,Python 2.7,APScheduler 2.1.2。 原理图如下:代码部分: (1)、中心节点:#encoding=utf-8
2022-06-04

RabbitMQ集群架构的示例分析

这篇文章主要介绍了RabbitMQ集群架构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、为什么使用集群?内建集群作为RabbitMQ最优秀的功能之一,它的作用有
2023-06-05

PHP架构布局的示例分析

这篇文章主要介绍PHP架构布局的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!执行流程从上图中看出主要从解析PHPCode到执行主要经过了四个阶段。获取token可以通过Token_get_all(
2023-06-15

Flex4beta架构变化的示例分析

这篇文章给大家分享的是有关Flex4beta架构变化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex4beta架构变化概述Flex4beta的重要主题之一是“用心设计”。这个目标涉及在设计人员和开
2023-06-17

C++的构造和析构实例分析

本篇内容主要讲解“C++的构造和析构实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的构造和析构实例分析”吧!1. 构造函数 1.1 构造函数长什么样子(1) 函数名和类名相同(2)
2023-06-29

Javascript框架实例分析

今天小编给大家分享一下Javascript框架实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。文中的所有代码都基于鸿蒙
2023-06-27

编程热搜

目录