使用taskset来进行多核系统调优_第1页
使用taskset来进行多核系统调优_第2页
使用taskset来进行多核系统调优_第3页
使用taskset来进行多核系统调优_第4页
使用taskset来进行多核系统调优_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用taskset来进行多核系统调优查看pid和那个cpu亲和taskset-pc3687返回pid3687'scurrentaffinitylist:0,1,2,3表示3687和0,1两个cpu内核比较亲和taskset-pc0-13687设置线程3678和0,1两个cpu内核亲和top-p3687查看此线程具体执行情况利用taskset可以充分利用多核cpu的好处,可以让某个程序或脚本,运行在某个具体的cpu上。这个工具系统可能没有默认安装:,rpm包名util-linux#taskset--helptaskset(util-linux2.13-pre7)usage:taskset[options][mask|cpu-list][pid|cmd[args・.・]]setorgettheaffinityofaprocess-p, -pidoperateonexistinggivenpid-c,-cpu-listdisplayandspecifycpusinlistformat-h, -helpdisplaythishelp-v, -versionoutputversioninformation1:让某个程序运行在特定cpu上面taskset-c0shwade.sh2:切换某个进程到特定的cpu上。taskset-pc012345比如你有一个cpu是4core你可以这样写你的脚本#!/bin/bashtaskset-c0sha.sh&taskset-c1shb.sh&taskset-c2shc.sh&taskset-c3shd.sh&应该可以充分利用你的cpu了。我的Linode十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但我观察发现,Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。不了解Linux是如何调度的,但目前显然有优化的余地。除了处理正常任务,CPU#0还需要处理每秒网卡中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。两个名词SMP(SymmetricalMulti-Processing):指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。[更多・・・]CPUaffini切中文唤作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。[更多・・・〕一、在Linux上修改进程的“CPU亲和力”在Linux上,可以通过taskset命令进行修改。以Ubuntu为例,运行如下命令可以安装taskset工具。apt-getinstallschedutils对运行中的进程,文档上说可以用下面的命令,把CPU#1#2#3分配给PID为2345的进程:taskset-cp1,2,32345但我尝试没奏效,于是我关掉了MySQL,并用taskset将它启动:taskset-c1,2,3/etc/init・d/mysqlstart对于其他进程,也可如此处理(nginx除外,详见下文)。之后用top查看CPU的使用情况,原来空闲的#1#2#3,已经在辛勤工作了。二、配置nginx绑定CPU刚才说nginx除外,是因为nginx提供了更精确的控制。在conf/nginx.conf中,有如下一行:worker_processes1;这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。我做了如下配置:worker_processes3;worker_cpu_affinity001001001000;这里001001001000是掩码,分别代表第2、3、4颗cpu核心。重启nginx后,3个工作进程就可以各自用各自的CPU了。三、刨根问底如果自己写代码,要把进程绑定到CPU,该怎么做?可以用sched_setaffinity函数。在Linux上,这会触发一次系统调用。如果父进程设置了affinity,之后其创建的子进程是否会有同样的属性?我发现子进程确实继承了父进程的affinity属性。四、Windows?在Windows上修改“CPU亲和力”,可以通过任务管理器搞定。2SJ址理器关系2SJ“坯理器关丟”设置揑制允许执行谬JS程的cfubrGFU16rCPU24厂CFUIT厂CFU25厂CPU18厂CPU2BrcpuisrCPU2T厂CFU20厂CFU28厂CPU21厂CPU29厂CFU22厂CFU30厂CFU23厂CFU引|Z画卫 厂CFU 817CPU 1 厂 CFU 9PCPU 2 厂 CPU 10FCPU 3 厂 CPU 11厂CPU 4 厂 CFU 12FCPU 5 厂 CPU 13FCPU 6 厂 CFU 14FCPU T 厂 CFU 15确定|取消I*个人感觉,Windows系统中翻译的“处理器关系”比“CPU亲和力”容易理解点儿进行了这样的修改后,即使系统负载达到3以上,不带缓存打开首页(有40多次査询)依然顺畅;以前一旦负载超过了1・5,响应就很慢了。效果很明显。linuxtaskset命令详解SYNOPSIStaskset[options][mask|list][pid|command[arg]...]OPTIONS-p,--pidoperateonanexistingPIDandnotlaunchanewtask

-c,--cpu-listspecifiyanumericallistofprocessorsinsteadofabitmask.Thelistmaycontainmultipleitems, separatedbycomma,andranges.Forexample,0,5,7,9-11.-h,―helpdisplayusageinformationandexit-V,―versionoutputversioninformationandexit现在多核的CPU已经相当普遍了,那么这种多核的服务器如何让CPU得到充分利用,可以靠应用自己来定义,或者依赖操作系统来调度。根据红帽的说法RHEL5有一个很强壮的CPU调度机制,RHEL6就更强壮了,所以看起来跑在LINUX下面的应用应该都不用去管该用哪个CPU。首先我们来看看CPU中断请求的统计:CentOSrelease5.2(Final)[rofftPdevelopi~]#cat/proc/interrupt3CPU3CS*U0CPU1CTU20:1116?S71S0eeIO-ftP[C—edgetimev1:扌0e«IO-fiPIC-edge13342B:10eeIO-ftPIC-edgertc9tQ0a010'"fiFSC-leuelac^i12t4»&p10-ftPIC-edg&1304282:&0oeIO-fiPIC-leueluJ-ici_J)c<l:i*sh590±H00e10-fiFSC-leueiuhci_J)cil:usbG?Bt$776f38S91卑?PCI-HS1«qIBS;204&&1736aPCI-HS1ethK:114r33522600cPCI-MSIethllfr?sae0eIO-APSC-levalehci_JTcd:wsbl.1??;&B0剧KO-AMOlaueluhci_hcdsa«;b31&5;&0oe10-APIC-leueluhci_Jicrf:usb4Nm-157896277®?5YLOC:L11&J57341116958571116,578?111695716ERKtfl斗亠直曲.从图上看,CPU的使用基本上还是均匀的。不过CPU0负载还是最大的。所有在某种情况下可能会需要手工来设置进程使用CPU核的优先级。下面是一个操作的例子:postgres645710May05?00:00:00/app/pgsql/bin/postgres-D/database/pgdata-p1921[root@develop1~]#taskset-pc6457pid6457'scurrentaffinitylist:0-3这个进程目前是默认与0-3这4个核心亲和的。也就是说会在0-3这几个核心调度。[root@develop1~]#taskset-pc0-16457pid6457'scurrentaffinitylist:0-3pid6457'snewaffinitylist:0,1修改之后我们看到,已经修改为0,1的范围了。可以通过top-p6457[f->j]查看P列可以看到当前运行的核心号。如果该成在单个CORE上跑的话,马上就能看到CORE的变化。下面是taskset的MANPAGE:从描述上来看的话,只要taskset返回结果了,那LINUX肯定是确保得到了你想要的结果。DESCRIPTIONtaskset isusedtosetorretrievetheCPUaffinityofarunningprocessgivenitsPIDortolaunchanewCOMMANDwithagivenCPUaffinity. CPUaffinityisaschedulerpropertythat“bonds”aprocesstoagivensetofCPUsonthesystem.TheLinuxschedulerwillhonorthegivenCPUaffinityandtheprocesswillnotrunonanyotherCPUs.NotethattheLinuxscheduleralsosupportsnaturalCPUaffinity:theschedulerattemptstokeepprocessesonthesameCPUaslongaspracticalforperformancereasons.Therefore,forcingaspecificCPUaffinityisusefulonlyincertainapplications.TheCPUaffinityisrepresentedasabitmask,withthelowestorderbitcorrespondingtothefirstlogicalCPUandthehighestorderbitcorrespondingtothelastlogicalCPU.NotallCPUsmayexistonagivensystembutamaskmayspecifymoreCPUsthanarepresent・ AretrievedmaskwillreflectonlythebitsthatcorrespondtoCPUsphysicallyonthesystem. Ifaninvalidmaskisgiven(i・e・,onethatcorrespondstonovalidCPUsonthecurrentsystem)anerroris

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论