欢迎您访问第A百科网

系统性能调优:提升 CPU 缓存的命中率

312次浏览     发布时间:2024-01-19 16:37:33     编辑: IT小白进阶之路

如果 CPU 所要操作的数据在缓存中,则直接读取,这称为缓存命中。命中缓存会带来很大的性能提升,因此,我们的代码优化目标是提升 CPU 缓存的命中率。

支持超线程的numa架构

物理硬件视角,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核Processor的数量。

每个硬件线程都可以按逻辑cpu寻址,因此这个处理器看上去有八块cpu。

对于操作系统的视角:

  • CPU(s):8
  • NUMA node0 CPU(s):0,4
  • NUMA node1 CPU(s):1,5
  • NUMA node2 CPU(s):2,6
  • NUMA node3 CPU(s):3,7

L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。L1和L2缓存在第一个CPU核中,L3则是所有CPU核心共享的内存。L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。我们来看一些他们的速度:

  • L1 的存取速度:4 个CPU时钟周期
  • L2 的存取速度:11 个CPU时钟周期
  • L3 的存取速度:39 个CPU时钟周期
  • RAM内存的存取速度 :107 个CPU时钟周期

如果 CPU 所要操作的数据在缓存中,则直接读取,这称为缓存命中。命中缓存会带来很大的性能提升,因此,我们的代码优化目标是提升 CPU 缓存的命中率。

在主流的服务器上,一个 CPU 处理器会有 10 到 20 多个物理核。同时,为了提升服务器的处理能力,服务器上通常还会有多个 CPU 处理器(也称为多 CPU Socket),每个处理器有自己的物理核(包括 L1、L2 缓存),L3 缓存,以及连接的内存,同时,不同处理器间通过总线连接。通过lscpu来看:

root@ubuntu:~# lscpu
Architecture:          x86_64
CPU(s):                32
Thread(s) per core:    1
Core(s) per socket:    8
Socket(s):             4
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7
NUMA node1 CPU(s):     8-15
NUMA node2 CPU(s):     16-23
NUMA node3 CPU(s):     24-31

你可能注意到,三级缓存要比一、二级缓存大许多倍,这是因为当下的 CPU 都是多核心的,每个核心都有自己的一、二级缓存,但三级缓存却是一颗 CPU 上所有核心共享的。

但是,有个地方需要你注意一下:如果应用程序先在一个 Socket 上运行,并且把数据保存到了内存,然后被调度到另一个 Socket 上运行,此时,应用程序再进行内存访问时,就需要访问之前 Socket 上连接的内存,这种访问属于远端内存访问。和访问 Socket 直接连接的内存相比,远端内存访问会增加应用程序的延迟。

常用性能监测工具

Linux系统下,CPU与内存子系统性能调优的常用性能监测工具有top、perf、numactl这3个工具。1) top工具 top工具是最常用的Linux性能监测工具之一。通过top工具可以监视进程和系统整体性能。

  • top 查看系统整体的资源使用情况
  • top后输入1 查看看每一个逻辑核cpu的资源使用情况
  • top -p $PID -H 查看某个进程内所有检查的CPU资源使用情况
  • top后输入F,并选择P选项 查看线程执行过程中是否调度到其他cpu上执行,上下文切换过多时,需要注意。

2) perf工具 perf工具是非常强大的Linux性能分析工具,可以通过该工具获得进程内的调用情况、资源消耗情况并查找分析热点函数。以CentOS为例,使用如下命令安装perf工具:

  • perf top 查看占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数。
  • perf -g record -- sleep 1 -p $PID 记录进程在1s内的系统调用。
  • perf -g latency --sort max 查看上一步记录的结果,以调度延迟排序。
  • perf report 查看记录

3) numactl工具 numactl工具可用于查看当前服务器的NUMA节点配置、状态,可通过该工具将进程绑定到指定CPU核上,由指定CPU核来运行对应进程。以CentOS为例,使用如下命令安装numactl工具:

  • numactl -H 查看当前服务器的NUMA配置。
  • numastat 查看当前的NUMA运行状态。

优化方法

(1) NUMA优化,减少跨NUMA访问内存 不同NUMA内的CPU核访问同一个位置的内存,性能不同。内存访问延时从高到低为:跨CPU>跨NUMA,不跨CPU>NUMA内。因此在应用程序运行时要尽可能地避免跨NUMA访问内存,这可以通过设置线程的CPU亲和性来实现。常用的修改方式有如下:(1)将设备中断绑定到特定CPU核上。可以通过如下命令绑定:

echo $cpuNumber > /proc/irq/$irq/smp_affinity_list
 例子:echo 0-4 > /proc/irq/78/smp_affinity_list
      echo 3,8 > /proc/irq/78/smp_affinity_list

(2)通过numactl启动程序,如下面的启动命令表示启动程序./mongod,mongo就只能在CPU core 0到core7运行(-C控制)。

numactl -C 0-7 ./mongod

(3)可以使用 taskset 命令把一个程序绑定在一个核上运行。

taskset -c 0 ./redis-server

(4)在C/C++代码中通过sched_setaffinity函数来设置线程亲和性。(5)很多开源软件已经支持在自带的配置文件中修改线程的亲和性,例如Nginx可以修改nginx.conf文件中worker_cpu_affinity参数来设置Nginx线程亲和性。

绑核注意事项

在 CPU 的 NUMA 架构下,对 CPU 核的编号规则,并不是先把一个 CPU Socket 中的所有逻辑核编完,再对下一个 CPU Socket 中的逻辑核编码,而是先给每个 CPU Socket 中每个物理核的第一个逻辑核依次编号,再给每个 CPU Socket 中的物理核的第二个逻辑核依次编号。

注意的是在多个进程要进行亲和性绑核的,你一定要注意 NUMA 架构下 CPU 核的编号方法,这样才不会绑错核。


相关文章

单眼皮眼妆的画法步骤图片(可盐可甜的单眼皮眼妆教程)

大大的双眼皮,朦朦胧胧的眼睛好像成了女神小仙女们的标配。但是单眼皮也有单眼皮的美啊,单眼皮的人也可以很迷人,很有辨识度。近年来,纯天然的单眼皮小眼睛越来越受欢迎,单眼皮完全可以美出自己的特色。可以可爱也可以性感像周冬雨、金高银和阿沁这类单眼皮女孩,在一成不变的网红脸里简直是一股清流,让人过目不忘。今

2024-09-20 10:31

淘宝签收了还能退货吗(网购收货7天后发现质量问题还能退货吗?)

网购是当下潮流,给快递行业也带来了新的商机,相信很多消费者都不愿意遇到快递破损或者商品质量有问题的情况,因为退换货还是很麻烦的,为了保护消费者的利益,法律规定消费者可以七天无理由退货。七天期限过后,部分消费者认为不能继续要求退货。事实上,在实践中,即使商品已经签收超过七天,消费者如果发现商品存在质量

2024-09-20 10:16

情人节送老公什么比较实用(情人节适合送给老公的实用礼物)

Xbox游戏机队友早些年还是挺喜欢玩游戏的,但这几年上有老下有小后,我们的生活就越发单一了,除了工作外,每天剩余的时间基本都用来带娃了。年前和队友一起在游戏电玩社体验了双人成行感觉还不错,后来收到年终奖后的第一时间就为队友安排了Xbox SERIES S。因为考虑以后可能会抽时间玩一些双人游戏,所以

2024-09-20 10:01

屈原投的是什么江自尽(屈原为何投汨罗江?)

端午节,中国四大传统节日之一,历来受中国人民以及东亚东南亚地区人民的重视。同时,端午节也是中国所有节日中叫法别称最多的,竟然超过20种叫法:比如龙舟节、粽子节、端阳节、端午节、重五节、龙日节、诗人节、五黄节、午日节、浴兰节、草药节、天医节、五月节等。端午节 古代的端午节可比如今花样多的多了。那时候

2024-09-20 09:45

坐飞机什么东西不能带上机(乘坐飞机哪些东西不能携带)

乘坐飞机时,有一些物品是禁止携带的,主要包括以下几类:枪支、军用或警用械具(含主要零部件)及其仿制品,如弹药、烟火制品、爆破器材等及其仿制品[2][4]。管制刀具,如菜刀、水果刀、大剪刀、剃刀等生活用刀,手术刀、屠宰刀、雕刻刀等专业刀具,以及文艺单位表演用的刀、矛、剑等[2][4]。易燃、易爆物品,

2024-09-20 09:31

打死蛇真的会有报应吗(八大灵性动物,不可杀,不可食)

天生皮骨非天生,只有业障随此身。猫、狗猫狗是和人类最亲近的动物,都通人性,都是我们忠实的朋友。当今社会,豢养宠物盛行,有主人照看的比较安逸,而大量流浪狗、流浪猫却只能靠捡吃垃圾等生存。如果您能发慈悲心,请时常在垃圾箱等地方留点食物给它们充饥,延其生命,必增福报!不能如此,也千万不要无故打杀、虐待猫狗

2024-09-20 09:15

准生证办理流程(新生儿证件办理全攻略!)

1、准生证(计划生育服务证)计划生育服务证是集准生证、查环等功能为一体的证件,多数地方已废除准生证。去办准生证时,拿到的多是计划生育服务证。这是宝宝来到这个世界上的第一个证件,需要提前准备宝宝爸妈的身份证、户口本、结婚证和孕检证明。办理时间:在怀孕前或怀孕后三个月内办理办理地点:户籍所在地或现居住地

2024-09-20 09:01

检察官和律师的区别通俗(法官、检察官、律师哪个职业比较好?)

先说结论:三个专业本身并无好坏之分,关键还要看自身对于未来的规划。一、职业的定位律师(lawyer)是指接受委托或者指定,为当事人提供诉讼代理或者辩护业务等法律服务的人员。法官是指依照法律规定的程序产生,在司法机关(一般指法院)中依法行使国家审判权的审判人员,是司法权的执行者。检察官是依法行使国家检

2024-09-20 08:46

专升本报名流程及条件详细(专升本需要什么条件?)

1、专升本报考不允许跨省首先,专升本考试是由各个省份自行组织的,换句话说,专升本考试是以省为基本单位的,不同省份的招生政策是不同的。在哪个省份读的专科,就只能在哪个省份参加专升本考试,一般来说,不会出现跨省升本的情况。 2、专升本的条件总体上来说,专升本考试针对的是各个省应届毕业的高职高专学生,专项

2024-09-20 08:30

洛可可建筑风格的代表(十大洛可可建筑代表作)

建筑是日常生活中非常常见的,现在的建筑风格一般都是钢筋水泥式的现代建筑,当然也遗留了一些之前的建筑。洛可可式建筑是一个比较特别的建筑风格,比较华丽而美丽世界上有很多地方还遗留着洛可可建筑的身影,下面为大家盘点一下吧。十大洛可可建筑代表作 1、十四圣洁大教堂十四圣洁大教堂始建于1743年德国,1772

2024-09-20 08:15