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 ...
随机推荐
- PHP常用魔术方法(__set、__get魔术方法:)
__set.__get魔术方法: //文件名:Object.php <?phpnamespace IMooc;class Object{ protected $array = array(); ...
- 源码分析之spring-JdbcTemplate日志打印sql语句
对于开源的项目来说的好处就是我们遇到什么问题可以通过看源码来解决. 比如近期有个同事问我说,为啥JdbcTemplate中只有在Error的时候才打印出sql语句呢.我一想,这和log的配置有关系吧. ...
- Log4j使用说明
Log4J实例应用开发 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是对Logger.Appender及Layout的分别使用.Log4j支持两种配置文件格式,一 ...
- swing入门例子
// a simple exmple that can show the basis of swing------------------------------------------------- ...
- Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...
- Java中日期时间API小结
Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...
- VMware SphereESXi上安装虚拟机
VMware SphereESXi上安装虚拟机 创建新虚拟机 此处以CentOS为例 注意:配置上传的系统文件位置及启动项
- 【转载】CocoaPods安装和使用教程
转自:http://code4app.com/article/cocoapods-install-usage 目录 CocoaPods是什么? 如何下载和安装CocoaPods? 如何使用CocoaP ...
- HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
异常信息: 解决方案: 检查一下ASP.NET有没有安装: 控制面板>程序和功能>打开或关闭Windows功能 > Internet信息服务 > 万维网服务 &g ...
- hive函数总结-日期函数
获取当前UNIX时间戳函数: unix_timestamp语法: unix_timestamp() 返回值: bigint说明: 获得当前时区的UNIX时间戳举例: hive> select u ...