网站大量收购独家精品文档,联系QQ:2885784924

linux下进程绑定多cpu运行.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

wujianz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档