Linux CPU 亲和性
在Linux中,我们知道可以通过nice、renice命令改变进程的执行优先级,优先级高的进程优先执行,从而一定程度上保证重要任务的运行。
除了nice、renice外,可以通过CPU affinity指定进程在哪些处理器上运行。CPU affinity表示进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。
2.6 版本的Linux内核,实现了CPU affinity的接口,
需要说明的说:应用程序显示指定了CPU affinity的话,表示应用程序只会在指定的处理器上运行,就算其他处理器空闲,也不会切换到别的处理器上运行。
以下两种情况有可能需要使用自定义进程CPU affinity:
- 保证高优先级任务
如有存在一些优先级高的任务,可以将其他任务都分配到指定的处理器执行,这个高优先级任务设定CPU affinity到其他处理器,避免非重要任务对高优先级任务的干扰。
一个比较好的case是,在分布式计算系统中,在凌晨常常会进行一些数据/索引merge或者导数据的工作,为了避免对服务进程的影响,可以将这些任务都放到一个处理器上执行 - 测试复杂程序
对于号称scale out的程序,在资源受限的情况下进行测试,可以通过定义进程的cpu affinity,逐步测试在提供不同数量处理器的情况下,程序的处理能力!
linux下可以通过taskset(需安装schedutils)显示指定进程的cpu affinity
taskset功能如下:
$ taskset -help
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
Options:
-a, --all-tasks operate on all the tasks (threads) for a given pid
-p, --pid operate on existing given pid
-c, --cpu-list display and specify cpus in list format
......
实例:
编写一个简单的C程序(让CPU忙起来即可):
#cat test.c
#include <stdio.h>
void main(int argc, char** argv)
{
for(int i = 0; i<=10000000000000; i++)
{
if(i == 100000000)
{
i = 0;
printf("program is running!\n");
}
}
}
生成可执行文件:gcc -o test test.c -std=c99
启动1个实例,将进程都绑定到Cpu0:
taskset -c 0 ./test
启动第一个实例,发现跑满第一个cpu0
#mpstat -P ALL 1 2
Linux 3.10.0-327.ali2000.alios7.x86_64 (jiangyi01.sqa.zmf) 10/18/2016 _x86_64_ (24 CPU)
11:11:24 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:11:25 AM all 5.91 0.00 3.08 0.00 0.00 0.00 0.00 0.00 0.00 91.00
11:11:25 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:11:25 AM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 2 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
11:11:25 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 6 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.01
11:11:25 AM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 14 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
11:11:25 AM 15 36.63 0.00 63.37 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:11:25 AM 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 19 1.98 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 95.05
11:11:25 AM 20 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
11:11:25 AM 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:11:25 AM 22 1.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
11:11:25 AM 23 1.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 0.00 96.00
top - 11:12:17 up 60 days, 14:47, 2 users, load average: 1.93, 1.48, 1.47
Tasks: 564 total, 3 running, 561 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.8 us, 3.1 sy, 0.0 ni, 91.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 98795000 total, 3829944 free, 1281404 used, 93683648 buff/cache
KiB Swap: 2097148 total, 2093876 free, 3272 used. 96585224 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30027 root 20 0 4172 364 280 R 99.7 0.0 1:40.67 test
14533 root 20 0 990000 21192 6340 S 0.7 0.0 430:19.81 staragent-core
33662 root 20 0 146564 2540 1444 R 0.7 0.0 0:00.05 top
152 root 20 0 0 0 0 S 0.3 0.0 1:32.77 rcuos/14
4913 root 20 0 120944 7776 1800 S 0.3 0.0 17:57.85 bash
启动第二个实例,发现两个程序各占50%跑满第一个cpu0
top - 11:14:12 up 60 days, 14:48, 3 users, load average: 2.72, 1.85, 1.60
Tasks: 572 total, 4 running, 568 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.8 us, 3.1 sy, 0.0 ni, 91.0 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 98795000 total, 3822612 free, 1288476 used, 93683912 buff/cache
KiB Swap: 2097148 total, 2093876 free, 3272 used. 96578080 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
36925 root 20 0 4172 364 280 R 50.3 0.0 0:22.60 test
30027 root 20 0 4172 364 280 R 49.7 0.0 3:12.82 test
#mpstat -P ALL 1 12
Linux 3.10.0-327.ali2000.alios7.x86_64 (jiangyi01.sqa.zmf) 10/18/2016 _x86_64_ (24 CPU)
11:14:38 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:14:39 AM all 5.71 0.00 3.12 0.08 0.00 0.00 0.00 0.00 0.00 91.09
11:14:39 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:14:39 AM 1 0.00 0.00 0.00 2.02 0.00 0.00 0.00 0.00 0.00 97.98
11:14:39 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 5 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
11:14:39 AM 6 33.00 0.00 67.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:14:39 AM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 13 1.01 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 96.97
11:14:39 AM 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 15 0.99 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 96.04
11:14:39 AM 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 20 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
11:14:39 AM 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:14:39 AM 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
继续测试,将pid为18057的test迁移到CPU1上运行,执行:
[root@jiangyi01.sqa.zmf /home/ahao.mah]
#ps au x| grep test
root 30027 75.1 0.0 4172 364 pts/0 R 11:10 4:14 ./test
root 36925 49.9 0.0 4172 364 pts/3 R+ 11:13 1:23 ./test
root 43502 0.0 0.0 112652 968 pts/4 S+ 11:16 0:00 grep --color=auto test
迁移PID到CPU1
[root@jiangyi01.sqa.zmf /home/ahao.mah]
#taskset -pc 1 30027
pid 30027's current affinity list: 0
pid 30027's new affinity list: 1
top - 11:16:56 up 60 days, 14:51, 3 users, load average: 3.12, 2.39, 1.85
Tasks: 572 total, 4 running, 568 sleeping, 0 stopped, 0 zombie
%Cpu(s): 10.0 us, 3.1 sy, 0.0 ni, 87.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 98795000 total, 3818960 free, 1291464 used, 93684576 buff/cache
KiB Swap: 2097148 total, 2093876 free, 3272 used. 96574880 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30027 root 20 0 4172 364 280 R 100.0 0.0 4:46.70 test
36925 root 20 0 4172 364 280 R 100.0 0.0 1:56.45 test
CPU0 CPU1都开始忙碌
[root@jiangyi01.sqa.zmf /home/ahao.mah]
#mpstat -P ALL 1 12
Linux 3.10.0-327.ali2000.alios7.x86_64 (jiangyi01.sqa.zmf) 10/18/2016 _x86_64_ (24 CPU)
11:17:09 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:17:10 AM all 10.00 0.00 3.00 0.00 0.00 0.00 0.00 0.00 0.00 87.01
11:17:10 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:17:10 AM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:17:10 AM 2 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
11:17:10 AM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:17:10 AM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:17:10 AM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:17:10 AM 6 36.00 0.00 64.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:17:10 AM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11:17:10 AM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Linux CPU 亲和性的更多相关文章
- linux cpu亲和性设置
1.设置进程的cpu亲和性程序如下, #Using:g++ setCpuAffinity.c -o setCpuAffinity #include<sys/types.h> #includ ...
- Linux中CPU亲和性(affinity)
0.准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和 ...
- 【转】 管理CPU 亲和性
简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性.Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affi ...
- Linux CPU亲缘性详解
前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣.“自动根据CPU数目设置进程个数和绑定CPU亲缘性”.当时笔者对CPU亲缘性没有任何概念,当时作者只是 ...
- 关于CPU亲和性的测试
今天看到运维的同事在配置nginx的CPU亲和性时候,运维同事说他在所有的机器上都是按照8核的方式来配置worker进程的CPU亲和性的. 但我觉得就是有点不太对劲,就查了一下nginx的处理work ...
- UIO,大页内存,CPU亲和性,NUMA机制等
Linux环境下的UIO(Userspace I/O) UIO 用户空间下驱动程序的支持机制.DPDK使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能 ...
- cpu亲和性绑定
将进程与cpu绑定,最直观的好处就是减少cpu之间的cache同步和切换,提高了cpu cache的命中率,提高代码的效率.从cpu架构上,NUMA拥有独立的本地内存,节点之间可以通过互换模块做连接和 ...
- 【操作系统之十二】分支预测、CPU亲和性(affinity)
一.分支预测 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕 ...
- NGINX源代码剖析 之 CPU绑定(CPU亲和性)
作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...
随机推荐
- phpcms:一、安装及新建模板
1.复制D:\WWW\phpcms\phpcms\templates\目录下的default文件粘贴在当前目录下,并重命名为新模板名字(youpinzhiyuan2012) 2.打开D:\WWW\ph ...
- java之File
1.文件创建.重命名.删除 code: package com.test; import java.io.File; import java.io.IOException; public class ...
- ViewPager顶部标题控件PagerSlidingTabStrip
最近搞一个项目,要求做一个和网易新闻顶部菜单的滑动效果,如图: 顶部标题中下面有个红色的矩形小条,左右滑动时会跟随手势动态滑动,效果很绚丽,唉,特效啊! 自己搞了一上午无果,还是是github上找大神 ...
- [Regular Expressions] Find Plain Text Patterns
The simplest use of Regular Expressions is to find a plain text pattern. In this lesson we'll look a ...
- c语言10个经典小程序
[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. ...
- traceroute原理
traceroute原理 ICMP ICMP全称为Internet Control Message Protocol,即,网络控制报文协议. 当一个IP数据报发送失败时,最后一个路由器会向发送发传递一 ...
- SSH 服务启动时出现如下错误:fatal: Cannot bind any address
注意:本文相关配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 云服务器 ECS (Elast ...
- java.sql.SQLException: ORA-00911: 无效字符 解决方案
在使用java执行sql时,抛出的这样一个Oracle异常,最后发现是sql语句末尾有一个分号导致,例如:sql="select * from tl_demo;" .删除" ...
- tomcat免安装版注册为系统服务
环境: OS:windows7_64bit JDK:jdk1.6_64bit tomcat:apache-tomcat-7.0.61-windows-x64 1.修改tomcat/bin/servic ...
- ajax请求或者页面需要缓存,代码如下
缓存页面代码 1 private void setClientCache(HttpServletResponse response, int maxAgeSec) 2 { 3 long maxAgeM ...