- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux下进程绑定多cpu运行
进程绑定多核运行
CPU affinity:中文作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。
一、在Linux上修改进程的“CPU亲和力”
在Linux上,可以通过 taskset 命令进行修改。运行如下命令可以安装taskset工具。
在 CentOS/Fedora 下安装 schedutils:
# yum install schedutils
在 Debian/Ubuntu 下安装 schedutils:
# apt-get install schedutils
如果正在使用 CentOS/Fedora/Debian/Ubuntu 的必威体育精装版版本的话,schedutils/util-linux 这个软件包可能已经装上了。
计算 CPU Affinity 和计算 SMP IRQ Affinity 差不多:
0(CPU0)
0(CPU1)
0(CPU0+CPU1)
0(CPU2)
...如果想设置进程号(PID)为 12212 的进程到 CPU0 上的话:
# taskset 0 -p 12212
关掉MySQL),并用taskset将它启动:
# taskset -c 1,2,3 /etc/init.d/mysql start
对于其他进程,也可如此处理(nginx除外,详见下文)。之后用top查看CPU的使用情况。
二、配置nginx绑定CPU
刚才说nginx除外,是因为nginx提供了更精确的控制。
在conf/nginx.conf中,有如下一行:
worker_processes 1;
这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。我做了如下配置:
worker_processes 3;
worker_cpu_affinity 0010 0100 1000;
这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。
重启nginx后,3个工作进程就可以各自用各自的CPU了。
三、如果自己写代码,要把进程绑定到CPU,该怎么做?可以用sched_setaffinity函数。在Linux上,这会触发一次系统调用。int sched_setaffinity(pid_t pid, unsigned int len, unsigned long *mask);
sched_setaffinity 的第一个参数是pid (进程ID)设置进程为pid的这个进程让它运行在mask所设定的CPU上如果pid的值为0则表示指定的是当前进程使当前进程运行在mask所设定的那些CPU上第二个参数cpusetsize是mask所指定的数的长度通常设定为sizeof(cpu_set_t)如果当前pid所指定的CPU此时没有运行在mask所指定的任意一个CPU上,则该指定的进程会从其它CPU上迁移到mask的指定的一个CPU上运行int sched_getaffinity(pid_t pid, unsigned int len, unsigned long *mask);
该函数获得pid所指示的进程的CPU位掩码并将该掩码返回到mask所指向的结构中即获得指定pid当前可以运行在哪些CPU上同样如果pid的值为0.也表示的是当前进程Example:
/* Short test program to test sched_setaffinity
* (which sets the affinity of processes to processors).
* Compile: gcc sched_setaffinity_test.c
* -o sched_setaffinity_test -lm
* Usage: ./sched_setaffinity_test
*
* Open a top-window at the same time and see all the work
* being done on CPU 0 first and after a short wait on CPU 1.
* Repeat with different numbers to make sure, it is not a
* coincidence.
*/
#include stdio.h
#include math.h
#include sched.h
double waste_time(long n)
{
d
您可能关注的文档
最近下载
- 办公楼空调系统的高效维护方案.docx
- 贵州省遵义市红花岗区第十二中学2023-2024学年七年级下学期期中数学试题(原卷版).docx VIP
- 贵州省遵义市红花岗区第十二中学2023-2024学年七年级下学期期中数学试题(解析版).docx VIP
- 《利用本地农村乡土资源助推美术教学的研究》研究报告.doc
- 市委党校物业管理服务总体方案.doc VIP
- 国有企业合规管理办法.pdf VIP
- 2024《盒马鲜生冷供应链物流成本现状、问题及完善对策研究》11000字.docx
- 机器视觉软件:Basler二次开发_(3).Basler相机驱动与SDK安装.docx
- 高中语文(统编版)必修上册+下册单元任务与人文主题 复习梳理.docx
- 2019年重庆市高职分类招生考试(中职类)药剂类真题.pdf VIP
文档评论(0)