在Linux中,我们知道可以通过nice、renice命令改变进程的执行优先级,优先级高的进程优先执行,从而一定程度上保证重要任务的运行。

除了nice、renice外,可以通过CPU affinity指定进程在哪些处理器上运行。CPU affinity表示进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。

2.6 版本的Linux内核,实现了CPU affinity的接口,

需要说明的说:应用程序显示指定了CPU affinity的话,表示应用程序只会在指定的处理器上运行,就算其他处理器空闲,也不会切换到别的处理器上运行。

以下两种情况有可能需要使用自定义进程CPU affinity:

  1. 保证高优先级任务

    如有存在一些优先级高的任务,可以将其他任务都分配到指定的处理器执行,这个高优先级任务设定CPU affinity到其他处理器,避免非重要任务对高优先级任务的干扰。

    一个比较好的case是,在分布式计算系统中,在凌晨常常会进行一些数据/索引merge或者导数据的工作,为了避免对服务进程的影响,可以将这些任务都放到一个处理器上执行
  2. 测试复杂程序

    对于号称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

管理处理器的亲和性(affinity)

Linux CPU 亲和性的更多相关文章

  1. linux cpu亲和性设置

    1.设置进程的cpu亲和性程序如下, #Using:g++ setCpuAffinity.c -o setCpuAffinity #include<sys/types.h> #includ ...

  2. Linux中CPU亲和性(affinity)

    0.准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和 ...

  3. 【转】 管理CPU 亲和性

    简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性.Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affi ...

  4. Linux CPU亲缘性详解

    前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣.“自动根据CPU数目设置进程个数和绑定CPU亲缘性”.当时笔者对CPU亲缘性没有任何概念,当时作者只是 ...

  5. 关于CPU亲和性的测试

    今天看到运维的同事在配置nginx的CPU亲和性时候,运维同事说他在所有的机器上都是按照8核的方式来配置worker进程的CPU亲和性的. 但我觉得就是有点不太对劲,就查了一下nginx的处理work ...

  6. UIO,大页内存,CPU亲和性,NUMA机制等

    Linux环境下的UIO(Userspace I/O) UIO 用户空间下驱动程序的支持机制.DPDK使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能 ...

  7. cpu亲和性绑定

    将进程与cpu绑定,最直观的好处就是减少cpu之间的cache同步和切换,提高了cpu cache的命中率,提高代码的效率.从cpu架构上,NUMA拥有独立的本地内存,节点之间可以通过互换模块做连接和 ...

  8. 【操作系统之十二】分支预测、CPU亲和性(affinity)

    一.分支预测 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕 ...

  9. NGINX源代码剖析 之 CPU绑定(CPU亲和性)

    作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...

随机推荐

  1. LinearLayout 和 RelativeLayout

    共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" ...

  2. curl 学习

    <?php // $username =13800138000; // $password =123456; // $sendto =13912345678; // $message = &qu ...

  3. js基础例子

    创建变量 var obj=value; 其中obj是变量名; value表示可能是数字,数组,函数之类的 多变量进行计算 var a1=200,b1='hello',c1=400; var d1=c1 ...

  4. 如何在android上去控制开发进度

    这次android的壁纸软件1.0版本终于可以上线了,软件的功能基本上实现了,但是用户体验不太好.在整个开发阶段和测试阶段,出现了很多预料之外的事情,比如size是1M多的json文件解析.高清图片导 ...

  5. BNU10806:请在此处签到

    每年圣诞,ZUN都会邀请很多人到幻想乡举行联欢,今年也不例外.在联欢前,所有人需要在自己的昵称旁签到(签全名),以示出席.然后ZUN 会把大家的签到表保存下来作为纪念,以激励来年努力工作.   昵称: ...

  6. qwtplot3D安装及运行-----终结解决方案

    ..\qwtplot3d\include\qwt3d_openglhelper.h:67: 错误:'gluErrorString' was not declared in this scope..\q ...

  7. WebSphere之wasprofile.sh使用

    概要文件(profile) 6.0版本以后才有profile,目的是将用户数据和was本身的文件分开,这样可以定义多个profile,每个profile相当于一个用户,相当于提供了多用户的支持. pr ...

  8. HTTP 503 错误 – 服务不可用 (Service unavailable)

    介绍 因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求. 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解. 有些服务器在这种情况下也许干脆拒绝套接字(socke ...

  9. SQL Server -ISNULL()函数

    SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISN ...

  10. 一行代码设置UITableView分割线的长度

    使用UITableView时会发现分割线的长度是这样的: 而QQ里面分割线左端到昵称的下面就截止了: 只需行代码就可以搞定: self.tableView.separatorInset = UIEdg ...