使用taskset來進(jìn)行多核系統(tǒng)調(diào)優(yōu)_第1頁
使用taskset來進(jìn)行多核系統(tǒng)調(diào)優(yōu)_第2頁
使用taskset來進(jìn)行多核系統(tǒng)調(diào)優(yōu)_第3頁
使用taskset來進(jìn)行多核系統(tǒng)調(diào)優(yōu)_第4頁
使用taskset來進(jìn)行多核系統(tǒng)調(diào)優(yōu)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

使用taskset來進(jìn)行多核系統(tǒng)調(diào)優(yōu)查看pid和那個cpu親和taskset-pc3687返回pid3687'scurrentaffinitylist:0,1,2,3表示3687和0,1兩個cpu內(nèi)核比較親和taskset-pc0-13687設(shè)置線程3678和0,1兩個cpu內(nèi)核親和top-p3687查看此線程具體執(zhí)行情況利用taskset可以充分利用多核cpu的好處,可以讓某個程序或腳本,運(yùn)行在某個具體的cpu上。這個工具系統(tǒng)可能沒有默認(rèn)安裝:,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:讓某個程序運(yùn)行在特定cpu上面taskset-c0shwade.sh2:切換某個進(jìn)程到特定的cpu上。taskset-pc012345比如你有一個cpu是4core你可以這樣寫你的腳本#!/bin/bashtaskset-c0sha.sh&taskset-c1shb.sh&taskset-c2shc.sh&taskset-c3shd.sh&應(yīng)該可以充分利用你的cpu了。我的Linode十分繁忙,在跑一些密集操作數(shù)據(jù)庫的Rake任務(wù)時尤其如此。但我觀察發(fā)現(xiàn),Linode服務(wù)器的4核CPU,只有第1個核心(CPU#0)非常忙,其他都處于idle狀態(tài)。不了解Linux是如何調(diào)度的,但目前顯然有優(yōu)化的余地。除了處理正常任務(wù),CPU#0還需要處理每秒網(wǎng)卡中斷。因此,若能將CPU#0分擔(dān)的任務(wù)攤派到其他CPU核心上,可以預(yù)見,系統(tǒng)的處理能力將有更大的提升。兩個名詞SMP(SymmetricalMulti-Processing):指在一個計(jì)算機(jī)上匯集了一組處理器(多CPU),各CPU之間共享內(nèi)存子系統(tǒng)以及總線結(jié)構(gòu)。[更多???]CPUaffini切中文喚作“CPU親和力”,是指在CMP架構(gòu)下,能夠?qū)⒁粋€或多個進(jìn)程綁定到一個或多個處理器上運(yùn)行。[更多???〕一、在Linux上修改進(jìn)程的“CPU親和力”在Linux上,可以通過taskset命令進(jìn)行修改。以Ubuntu為例,運(yùn)行如下命令可以安裝taskset工具。apt-getinstallschedutils對運(yùn)行中的進(jìn)程,文檔上說可以用下面的命令,把CPU#1#2#3分配給PID為2345的進(jìn)程:taskset-cp1,2,32345但我嘗試沒奏效,于是我關(guān)掉了MySQL,并用taskset將它啟動:taskset-c1,2,3/etc/init?d/mysqlstart對于其他進(jìn)程,也可如此處理(nginx除外,詳見下文)。之后用top查看CPU的使用情況,原來空閑的#1#2#3,已經(jīng)在辛勤工作了。二、配置nginx綁定CPU剛才說nginx除外,是因?yàn)閚ginx提供了更精確的控制。在conf/nginx.conf中,有如下一行:worker_processes1;這是用來配置nginx啟動幾個工作進(jìn)程的,默認(rèn)為1。而nginx還支持一個名為worker_cpu_affinity的配置項(xiàng),也就是說,nginx可以為每個工作進(jìn)程綁定CPU。我做了如下配置:worker_processes3;worker_cpu_affinity001001001000;這里001001001000是掩碼,分別代表第2、3、4顆cpu核心。重啟nginx后,3個工作進(jìn)程就可以各自用各自的CPU了。三、刨根問底如果自己寫代碼,要把進(jìn)程綁定到CPU,該怎么做?可以用sched_setaffinity函數(shù)。在Linux上,這會觸發(fā)一次系統(tǒng)調(diào)用。如果父進(jìn)程設(shè)置了affinity,之后其創(chuàng)建的子進(jìn)程是否會有同樣的屬性?我發(fā)現(xiàn)子進(jìn)程確實(shí)繼承了父進(jìn)程的affinity屬性。四、Windows?在Windows上修改“CPU親和力”,可以通過任務(wù)管理器搞定。2SJ址理器關(guān)系2SJ“坯理器關(guān)丟”設(shè)置揑制允許執(zhí)行謬JS程的cfubrGFU16rCPU24廠CFUIT廠CFU25廠CPU18廠CPU2BrcpuisrCPU2T廠CFU20廠CFU28廠CPU21廠CPU29廠CFU22廠CFU30廠CFU23廠CFU引|Z畫衛(wèi) 廠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系統(tǒng)中翻譯的“處理器關(guān)系”比“CPU親和力”容易理解點(diǎn)兒進(jìn)行了這樣的修改后,即使系統(tǒng)負(fù)載達(dá)到3以上,不帶緩存打開首頁(有40多次査詢)依然順暢;以前一旦負(fù)載超過了1?5,響應(yīng)就很慢了。效果很明顯。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現(xiàn)在多核的CPU已經(jīng)相當(dāng)普遍了,那么這種多核的服務(wù)器如何讓CPU得到充分利用,可以靠應(yīng)用自己來定義,或者依賴操作系統(tǒng)來調(diào)度。根據(jù)紅帽的說法RHEL5有一個很強(qiáng)壯的CPU調(diào)度機(jī)制,RHEL6就更強(qiáng)壯了,所以看起來跑在LINUX下面的應(yīng)用應(yīng)該都不用去管該用哪個CPU。首先我們來看看CPU中斷請求的統(tǒng)計(jì):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負(fù)載還是最大的。所有在某種情況下可能會需要手工來設(shè)置進(jìn)程使用CPU核的優(yōu)先級。下面是一個操作的例子:postgres645710May05?00:00:00/app/pgsql/bin/postgres-D/database/pgdata-p1921[root@develop1~]#taskset-pc6457pid6457'scurrentaffinitylist:0-3這個進(jìn)程目前是默認(rèn)與0-3這4個核心親和的。也就是說會在0-3這幾個核心調(diào)度。[root@develop1~]#taskset-pc0-16457pid6457'scurrentaffinitylist:0-3pid6457'snewaffinitylist:0,1修改之后我們看到,已經(jīng)修改為0,1的范圍了??梢酝ㄟ^top-p6457[f->j]查看P列可以看到當(dāng)前運(yùn)行的核心號。如果該成在單個CORE上跑的話,馬上就能看到CORE的變化。下面是taskset的MANPAGE:從描述上來看的話,只要taskset返回結(jié)果了,那LINUX肯定是確保得到了你想要的結(jié)果。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論