Linux CPU affinity指定程序运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
在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忙起来即可):
[cpp]  view plain  copy
 
    #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
 
启动两个实例,将进程都绑定到Cpu0:
taskset -c 0 ./test
taskset -c 0 ./test
 
通过top, 输入“1”查看系统cpu状况:
 
 
 
如图所示:
Cpu1空闲,Cpu0使用100%
 
继续测试,将pid为18057的test迁移到CPU1上运行,执行:
$ taskset -pc  1 18057
pid 18057's current affinity list: 0
pid 18057's new affinity list: 1
 
观察CPU状况:
 
如图所示:
Cpu0及Cpu1都进入忙碌状态了!
 
 
继续测试!将pid为18210的test也迁移到Cpu1上运行,执行:
 
如图所示:
Cpu0闲着,Cpu1忙碌起来了!

 

posted @   专注it  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2020-07-02 TCP粘包,拆包及解决方法
2017-07-02 Linux内核中等待队列的几种用法
2017-07-02 Linux进程的睡眠和唤醒
2017-07-02 传输层:UDP 协议
2017-07-02 IP网际协议
2017-07-02 应用层协议
2017-07-02 传输层:TCP 协议
点击右上角即可分享
微信分享提示