CPU 架构SMP/NUMA,调优

  • SMP:全称是“对称多处理”(Symmetrical Multi-Processing)技术 。

    是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存以及总线。

    弱点:CPU变多后,但是内存和内存控制器只有一个,CPU是通过内存控制器访问内存的,所以多个CPU对内存控制器就会产生竞争,为了避免竞争就出现了NUMA架构。

  • NUMA:Non Uniform Memory Access

    各个CPU有自己专用的内存(学名叫node),但是也可以访问别的CPU的专业内存,这时性能就会下降。

Linux下NUMA相关的命令

  • numastat:查看节点的状态。

    可以看到自己CPU下的进程命中了自己的内存(node)多少次,没命中多少次,如果没命中的次数多了怎么办?就要强制把这进程绑定到自己的CPU上。

    经典的应用场景:把nginx的worker进程绑定到numa架构下的特定的CPU上,性能会大幅度提升。

  • numactl:可以实现把进程绑定到特定的CPU上

    但是,当机器重新启动后,绑定就失效了。如何解决呢,使用numad

  • numad:守护进程
  • numademo

非numa架构,如何把进程绑定到特定的CPU上呢,使用taskset

$ taskset -p -c 0,1,2-4,5,9 1234

上面命令的意思:把进程ip为1234的进程,绑定到0号,1号,2号,3号,4号,5号,9号CPU上。

这只是个例子,一般都绑定到1个CPU上,但是当系统重启后,还需要重新绑定,因为pid也变了。

Nginx比较厉害,可以配置哪个worker绑定到哪个CPU,事先写到配置nginx的配置文件里。

用上面的方法可以让某个进程专门让某几个CPU执行,但是这几个CPU除了要执行这个进程外,还要执行内核,怎么避免不让这些CPU不执行内核,只执行这个进程呢?

解决办法:假设有6个CPU,系统启动时,只让2个CPU执行内核的指令,其余4个不让执行内核指令。

编辑/etc/default/grub 文件,在 quiet splash ?后面加上 ?isolcpus=2,3。回到终端执行update-grub 。其将自动依照刚才编辑的配置文件(/etc/default/grub)生成为引导程序准备的配置文件(/boot/grub/grub.cfg)

参考:ubuntu中测试进程的处理器亲和性和vCPU的绑定

即便预留了CPU,被预留的CPU不处理内核的指令了,但是也要处理中断啊,那么如何把中断也不让这些CPU处理呢?

修改/proc/irq//smp_affinity文件

$ echo cpu_mask > /proc/irq/<irq_num>/smp_affinity

cpu_mask:用比特位表示。

0001:代表1号CPU
0011:代表1号和2号CPU
0101:代表1号和3号CPU

非numa架构,如何判断要把哪些进程绑定到特定CPU上呢?如何判断哪些线程被频繁的切换了呢?有如下命令

sar -q
使用sar之前要配置一下
1,修改:/etc/default/sysstat, 将 ENABLED=“false“ 改为ENABLED=“true“
2,执行:sudo /etc/init.d/sysstat restart
top
w
uptime
wmstat 1 5
下面的是查看CPU的使用率
mpstat 1 2
sar -P 1 2
iostat -c 1
cat /proc/stat

命令iostat -c 1的截图,含义查看CPU的占用率

  • %user:用户进程的CPU占用率
  • %system:内核的CPU占用率
  • %iowait:io处理的CPU占用率
  • %steal:虚拟机的CPU占用率
  • %idle:CPU空闲
ys:~$ iostat -c 1
Linux 4.15.0-20-generic (ys-VirtualBox)         2019年09月27日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.26    0.03    0.08    0.05    0.00   99.57

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

命令【dstat】比较强大,可以直观的得到如下信息:

       --top-bio
           show most expensive block I/O process
           显示最消耗blockI/O的进程
       --top-bio-adv
           show most expensive block I/O process (incl. pid and other stats)
           显示最消耗blockI/O的进程
       --top-childwait
           show process waiting for child the most
           显示等待子进程时间最长的父进程
       --top-cpu
           show most expensive CPU process
           显示最消耗CPU的进程
       --top-cpu-adv
           show most expensive CPU process (incl. pid and other stats)
           显示最消耗CPU的进程
       --top-cputime
           show process using the most CPU time (in ms)
           显示最消耗CPU时间片的进程
       --top-cputime-avg
           show process with the highest average timeslice (in ms)
           显示最消耗CPU时间片的进程
       --top-int
           show most frequent interrupt
           显示最经常发生的中断信号
       --top-io
           show most expensive I/O process
           显示最消耗I/O的进程
       --top-io-adv
           show most expensive I/O process (incl. pid and other stats)
           显示最消耗I/O的进程
       --top-latency
           show process with highest total latency (in ms)
           显示等待时间最长的进程
       --top-latency-avg
           show process with the highest average latency (in ms)
           显示等待时间最长的进程
       --top-mem
           show process using the most memory
           显示使用内存最多的进程

命令【sar -w 1(秒为单位)】比较强大,可以直观的得到进程在指定秒数里的平均切换次数

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

原文地址:https://www.cnblogs.com/xiaoshiwang/p/11599492.html

时间: 2024-10-03 20:38:23

CPU 架构SMP/NUMA,调优的相关文章

CPU负载观察及调优方法

红帽6实现无滴答 tick less interrupt-driven 由软中断进行驱动 在SMP多CPU架构中,传统上多CPU对于内存的访问是总线方式.是总线就会存在资源争用和一致性问题,而且如果不断的增加CPU数量,总线的争用会愈演愈烈,这就体现在4核CPU的跑分性能达不到2核CPU的2倍,甚至1.5倍!理论上来说这种方式实现12core以上的CPU已经没有太大的意义.Intel的NUMA解决方案,放弃总线的访问方式,将CPU划分到多个Node中,每个node有自己独立的内存空间.各个nod

性能调优攻略

关于性能优化这是一个比较大的话题,在<由12306.cn谈谈网站性能技术>中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法.本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充. 在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的<代码优化概要>,这篇文章基本上告诉你--要进行优化,先得找到性能瓶颈! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后

[转载] 性能调优攻略

原文: http://coolshell.cn/articles/7490.html 作为架构工程师, 性能调整是平时经常需要做的工作了, 这篇文章对性能调优方面做了一个很好的综述, 不知道怎么入手的同学们, 赶紧看一下吧 关于性能优化这是一个比较大的话题,在<由12306.cn谈谈网站性能技术>中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法.本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充. 在开

转载:性能调优攻略

关于性能优化这是一个比较大的话题,在<由12306.cn谈谈网站性能技术>中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法.本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充. 在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的<代码优化概要>,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后

Android/Linux 系统性能调优

关于性能优化这是一个比较大的话题,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法.本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充. 在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的<代码优化概要>,这篇文章基本上告诉你--要进行优化,先得找到性能瓶颈! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后面的定位和优化无从谈起. 一.系统性能定义 让我们先来说说如何什么是系统性能.这个定义非常关键,如果我们不清楚

系统性能测试及调优--转载

原文地址:http://www.51ste.com/front/det-2-1.html 1系统性能定义 性能测试,主要是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试.系统性能主要包括两个值: 吞吐量(Throughtput),即每秒钟可以处理的请求数,事务数. 系统延迟(Latency),也就是系统在处理一个请求或一个事务时的延迟. 它们两者之间的关系: Throughput越大,Latency会越差.请求量过大,系统繁忙,响应速度自然低. Latenc

系统调优

前面说到过select/poll/epoll这三个系统调用,我们都知道,Unix/Linux下把所有的设备都当成文件来进行I/O,所以,那三个操作更应该算是I/O相关的系统调用.说到I/O模型,这对于我们的I/O性能相当重要,我们知道,Unix/Linux经典的I/O方式是(关于Linux下的I/O模型,大家可以读一下这篇文章<使用异步I/O大大提高性能>): 第一种,同步阻塞式I/O,这个不说了. 第二种,同步无阻塞方式.其通过fctnl设置O_NONBLOCK来完成. 第三种,对于sele

Java性能调优笔记

Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多.外部处理系统的性能不足.资源消耗不多但程序的响应速度却仍达不到要求. 资源消耗:CPU.文件IO.网络IO.内存. 外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够. 资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高.未充分使用资源.程序结构不合理. C

Perf Event :Linux下的系统性能调优工具

Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护和发展.Perf 不仅可以用于应用程序的性能统计分析,也可以应用于内核代码的性能统计和分析.得益于其优秀的体系结构设计,越来越多的新功能被加入 Perf,使其已经成为一个多功能的性能统计工具集 .本文将介绍 Perf 在应用程序开发上的应用. AD:2014WOT全球软件技术