使用taskset来进行多核系统调优

上传人:zou****hua 文档编号:199371721 上传时间:2023-04-10 格式:DOCX 页数:9 大小:135.40KB
返回 下载 相关 举报
使用taskset来进行多核系统调优_第1页
第1页 / 共9页
使用taskset来进行多核系统调优_第2页
第2页 / 共9页
使用taskset来进行多核系统调优_第3页
第3页 / 共9页
点击查看更多>>
资源描述
使用taskset来进行多核系统调 优查看pid和那个cpu亲和taskset -pc 3687返回 pid 3687s current affinity list: 0,1,2,3表示3687和0,1两个cpu内核比较亲和taskset -pc 0-1 3687设置线程3678和0,1两个cpu内核亲和top -p 3687查看此线程具体执行情况利用taskset可以充分利用多核cpu的好处,可以让某个程序或脚本,运行在 某个具体的cpu上。这个工具系统可能没有默认安装:,rpm包名util-linux#taskset -helptaskset (util-linux 2.13-pre7)usage: taskset options mask | cpu-list pid | cmd args. set or get the affinity of a process-p,- pid operate on existing given pid-c, - cpu-list display and specify cpus in list format-h,- help display this help-v,- version output version information1 :让某个程序运行在特定cpu上面t askse t -c 0 sh wade.sh2:切换某个进程到特定的cpu上。taskset -pc 0 12345比如你有一个cpu是4 core你可以这样写你的脚本#! /bin/basht askse t -c 0 sh a.sh &t askse t -c 1 sh b.sh &t askse t -c 2 sh c.sh &t askse t -c 3 sh d.sh &应该可以充分利用你的cpu 了。我的Linode十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但 我观察发现,Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其 他都处于idle状态。不了解Linux是如何调度的,但目前显然有优化的余地。除了处理正常任务, CPU#0还需要处理每秒网卡中断。因此,若能将CPU#0分担的任务摊派到其他 CPU核心上,可以预见,系统的处理能力将有更大的提升。两个名词SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器 (多CPU),各CPU之间共享内存子系统以及总线结构。更多CPU affini切 中文唤作“CPU亲和力”,是指在CMP架构下,能够将一个或多 个进程绑定到一个或多个处理器上运行。更多一、在Linux上修改进程的“CPU亲和力”在Linux上,可以通过taskset命令进行修改。以Ubuntu为例,运行如下 命令可以安装taskset工具。# apt-get install schedutils对运行中的进程,文档上说可以用下面的命令,把CPU#1 #2 #3分配给PID为 2345的进程:# t askset -cp 1,2,3 2345但我尝试没奏效,于是我关掉了 MySQL,并用taskset将它启动:# taskset -c 1,2,3 /etc/initd/mysql start对于其他进程,也可如此处理(nginx除外,详见下文)。之后用top查看CPU 的使用情况,原来空闲的#1 #2 #3,已经在辛勤工作了。二、配置nginx绑定CPU刚才说nginx除外,是因为nginx提供了更精确的控制。在conf/nginx.conf中,有如下一行:worker_processes 1;这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为 worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。 我做了如下配置:worker_processes 3;worker_cpu_affini ty 0010 0100 1000;这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。重启nginx后,3个工作进程就可以各自用各自的CPU 了。三、刨根问底1. 如果自己写代码,要把进程绑定到CPU,该怎么做?可以用 sched_se taffini ty函数。在Linux 上,这会触发一次系统调用。2. 如果父进程设置了 affinity,之后其创建的子进程是否会有同样的属 性?我发现子进程确实继承了父进程的affinity属性。四、Windows ? 在Windows上修改“CPU亲和力”,可以通过任务管理器搞定。2SJ址理器关系“坯理器关丟”设置揑制允许执行谬JS程的cfubr GFU 16r CPU 24厂 CFU IT厂 CFU 25厂 CPU 18厂 CPU 2Br cpu isr CPU 2T厂 CFU 20厂 CFU 28厂 CPU 21厂 CPU 29厂 CFU 22厂 CFU 30厂 CFU 23厂CFU引|Z画卫厂CFU817 CPU1厂CFU9P CPU2厂CPU10F CPU3厂CPU11厂 CPU4厂CFU12F CPU5厂CPU13F CPU6厂CFU14F CPUT厂CFU15确定 | 取消 I*个人感觉,Windows系统中翻译的“处理器关系”比“CPU亲和力”容易理解 点儿进行了这样的修改后,即使系统负载达到3以上,不带缓存打开 首页(有40多次査询)依然顺畅;以前一旦负载超过了 15,响应就很慢了。 效果很明显。linux taskset命令详解SYNOPSIStaskset options mask | list pid | command arg. OPTIONS-p, -pidoperate on an existing PID and not launch a new task-c, -cpu-listspecifiy a numerical list of processors instead of a bitmask.The list may contain multipleitems,separated bycomma,andranges.For example, 0,5,7,9-11.-h, helpdisplayusage information and exit-V, versionoutput version information and exit现 在多核的CPU已经相当普遍了,那么这种多核的服务器如何让CPU得到 充分利用,可以靠应用自己来定义,或者依赖操作系统来调度。根据红帽的说 法RHEL5有一个很强壮的CPU调度机制,RHEL6就更强壮了,所以看起来跑在 LINUX下面的应用应该都不用去管该用哪个CPU。首先我们来看看CPU中断请求的统计:CentOS release 5.2 (Final)rofftPdevelopi # cat /proc/interrupt3CPU3CS*U0CPU1CTU20:1116?S71S0eeIO-ftPCedgetimev1:扌0eIO-fiPIC-edge13342B:10eeIO-ftPIC-edgertc9tQ0a010fiFS C-leuelaci12t4&p10-ftPIC-edg&1304282:&0oeIO-fiPIC-leueluJ-ici_J)c j查看P列可以看到当前运行的核心号。如果该成在单个CORE上跑的话,马上就能看到CORE的变化。下面是 taskset 的 MAN PAGE:从描述上来看的话,只要taskset返回结果了,那LINUX肯定是确保得到 了你想要的结果。DESCRIPTIONtasksetis used to set or retrieve the CPU affinity of a runningprocess given its PID or to launch a new COMMAND with a given CPU affinity.CPU affinity is a schedulerproperty that “bonds” a process to a given set ofCPUs on the system. The Linux scheduler will honor the given CPU affinity and the process will not run on anyother CPUs. Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keepprocesses on the same CPU as long as practical for performance reasons. Therefore, forcing a specific CPUaffinity is useful only in certain applications.The CPU affinity is represented as a bitmask, with the lowest order bit corresponding to the first logical CPUand the highest order bit corresponding to the last logicalCPU. Not all CPUs may exist on a given system buta mask may specify more CPUs than are presentA retrieved maskwill reflect only the bits that correspond toCPUs physically on the sys tem.If an invalid mask is given (ie,one that corresponds to no valid CPUs on thecurrent system) an error is returnedThe masks are typically givenin hexadecimal. For example,0X00000001is processor #00X00000003is processors #0 and #10xFFFFFFFFis all processors (#0 through #31)When taskset returns, it is guaranteed that the given program has been scheduled to a legal CPU.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!