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 ...
随机推荐
- LinearLayout 和 RelativeLayout
共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" ...
- curl 学习
<?php // $username =13800138000; // $password =123456; // $sendto =13912345678; // $message = &qu ...
- js基础例子
创建变量 var obj=value; 其中obj是变量名; value表示可能是数字,数组,函数之类的 多变量进行计算 var a1=200,b1='hello',c1=400; var d1=c1 ...
- 如何在android上去控制开发进度
这次android的壁纸软件1.0版本终于可以上线了,软件的功能基本上实现了,但是用户体验不太好.在整个开发阶段和测试阶段,出现了很多预料之外的事情,比如size是1M多的json文件解析.高清图片导 ...
- BNU10806:请在此处签到
每年圣诞,ZUN都会邀请很多人到幻想乡举行联欢,今年也不例外.在联欢前,所有人需要在自己的昵称旁签到(签全名),以示出席.然后ZUN 会把大家的签到表保存下来作为纪念,以激励来年努力工作. 昵称: ...
- qwtplot3D安装及运行-----终结解决方案
..\qwtplot3d\include\qwt3d_openglhelper.h:67: 错误:'gluErrorString' was not declared in this scope..\q ...
- WebSphere之wasprofile.sh使用
概要文件(profile) 6.0版本以后才有profile,目的是将用户数据和was本身的文件分开,这样可以定义多个profile,每个profile相当于一个用户,相当于提供了多用户的支持. pr ...
- HTTP 503 错误 – 服务不可用 (Service unavailable)
介绍 因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求. 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解. 有些服务器在这种情况下也许干脆拒绝套接字(socke ...
- SQL Server -ISNULL()函数
SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...
- 一行代码设置UITableView分割线的长度
使用UITableView时会发现分割线的长度是这样的: 而QQ里面分割线左端到昵称的下面就截止了: 只需行代码就可以搞定: self.tableView.separatorInset = UIEdg ...