CPU 架构SMP/NUMA,调优
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)
即便预留了CPU,被预留的CPU不处理内核的指令了,但是也要处理中断啊,那么如何把中断也不让这些CPU处理呢?
修改/proc/irq/<irq_num>/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
CPU 架构SMP/NUMA,调优的更多相关文章
- CPU VS GPU(性能调优 12.1)
		CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史原因,我们可以说CPU所做的工作都在 ... 
- MySQL 调优基础(一) CPU与进程
		一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ... 
- Linux系统调优——CPU(一)
		(1).系统调优思路 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对OS 各子系统达到一种平衡的定义.具体步骤如下: 1. 系统的运行状况: CPU -> MEM -& ... 
- Java性能调优笔记
		Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多. ... 
- Perf -- Linux下的系统性能调优工具,第 1 部分【转】
		转自:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/ Perf 简介 Perf 是用来进行软件性能分析的工具. 通过它,应用程序可以利用 ... 
- Perf -- Linux下的系统性能调优工具,第 1 部分
		Perf 简介 Perf 是用来进行软件性能分析的工具. 通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计.它不但可以分析指定应用程序的性能问题 (per t ... 
- hadoop 集群调优实践总结
		调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ... 
- Perf Event :Linux下的系统性能调优工具
		Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能 ... 
- ActiveMQ 性能调优
		本章重点 学习普通的性能调优技巧 怎么优化生产者和消费者 调优实例 简介 ActiveMQ 的性能高度依赖于多种不同的因素,包括:网络代理拓扑架构,传输层,底层网络的服务质量和速度,硬件,操作系统和 ... 
随机推荐
- Servlet 使用介绍(3)
			说明 本篇记录一个Servlet的创建过程和基本使用.由于,Servlet是基于Http协议使用的,所以,可以在http协议的基础上作一些改变,来修改适用我自己的servlet. Servlet使用 ... 
- 最常见的 Git 问题和操作清单汇总
			最常见的 Git 问题和操作清单汇总 引言 本文整理自工作多年以来遇到的所有 Git 问题汇总,之前都是遗忘的时候去看一遍操作,这次重新整理了一下,发出来方便大家收藏以及需要的时候查找答案. 一.必备 ... 
- 高通平台开机LOGO修改LK(bootloader)下实现【转】
			网络上已经有许多在kernel中修改开机Logo的文章,本文就LK下实现开机logo进行简述 需要用到ffmpeg工具,没有安装ffmpeg请参考这里: http://blog.csdn.net/re ... 
- Linux下搭建及配置禅道服务器详细过程-包含软件资源-Dotest-董浩
			Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接:https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操作系 ... 
- Python爬虫(学习准备)
			编码格式的认识: 字符:各种文字和符号的统称 字符集:多个字符的集合 字符集包括:ASCII字符集,GB2312字符集,GB18030,Unicode字符集等 1个字符ASCII编码占1个字节,用Un ... 
- git(1) 比较两个不同版本的文件
			git diff commit_id1:file_name commit_id2:file_name 或者 git diff commit_id1 commit_id2 -- file_name co ... 
- flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session
			目录 1.wsgiref.py 2.werzeug.py 3.三件套 4.配置文件 5.路由本质 6.cbv.py 7.路由转化器 8.自定义转化器 9.模板语言 10.session原理 11.te ... 
- hdu6521 吉司机线段树
			http://acm.hdu.edu.cn/showproblem.php?pid=6521 待填 代码 #include<bits/stdc++.h> #define ls o<& ... 
- Numpy 随机序列 shuffle & permutation
			1. numpy.random.shuffle(x) Modify a sequence in-place by shuffling its contents. This function only ... 
- 【Sublime】Sublime 常用插件
			1.sublime设置默认浏览器及打开网页的快捷键设置插件 名称:SideBarEnhancements 地址:https://github.com/titoBouzout/SideBarEnhanc ... 
