在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. JAVA并发实现五(生产者和消费者模式Condition方式实现)

    package com.subject01; import java.util.PriorityQueue; import java.util.concurrent.locks.Condition; ...

  2. JAVA并发实现五(生产者和消费者模式wait和notify方式实现)

    package com.subject01; import java.util.PriorityQueue; /** * 通过wait和notify 实现 * 生产者-消费者模型:当队列满时,生产者需 ...

  3. Laravel-路由-控制器

    (慕课网_轻松学会Laravel-基础篇_天秤vs永恒老师) 一.基础路由 二.多请求路由 三.参数路由 四.路由别名 生成url可以使用别名 五.路由群组 六.路由输出视图 七.控制器参数绑定

  4. 写一个段落python代码推理list深浅

    主要是针对嵌套列表问题. 列表套列表,究竟子列表那个更深... 这个问题想着就烦.假设嵌套10000万个列表是不是要统计10000个数再排序呢? 最后想了想用 list的extend功能 加上递归函数 ...

  5. javaweb中去除某个get方式的参数,并且返回路径

    String requestURL = request.getRequestURL() + ""; // String queryString = request.getQuery ...

  6. C# XML,XmlDocument简单操作实例

    private static string _Store = LocalPathHelper.CurrentSolutionPath + "/data/bookstore.xml" ...

  7. FileShare文件读写锁解决“文件XXX正由另一进程使用,因此该进程无法访问此文件”(转)

    开发过程中,我们往往需要大量与文件交互,读文件,写文件已成家常便饭,本地运行完美,但一上到投产环境,往往会出现很多令人措手不及的意外,或开发中的烦恼,因此,我对普通的C#文件操作做了一次总结,问题大部 ...

  8. (转)@@trancount解析

    在处理事务的时候,一般都用RollBack Transaction来回滚,但是如果在嵌套事务中这样使用的话,就会出现错误. 在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映 ...

  9. Mac_配置adb环境变量

    1.打开终端Terminal. 2.进入HOME目录:命令行输入 echo(这之间有一个空格) $HOME 3.创建.bash_profile文件:命令行输入 touch(这之间有一个空格).bash ...

  10. Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息

    我引起此原因的功能如下: 在aspx页面添加按钮 JS方法: function downPPT() { $("#Btn_DownPPT").click();    } <bo ...