




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目錄TOC\o"1-5"\h\zcpu數(shù),物理核,邏輯核的關(guān)系: 1看看檢查/proc/cpuinfo文件: 1查看CPU(各個邏輯核)占用情況: 2進(jìn)程綁定邏輯核: 2linux下查看cpu物理個數(shù)和邏輯個數(shù) 5cpu數(shù),物理核,邏輯核的關(guān)系:邏輯CPU個數(shù)>物理CPU個數(shù)*CPU內(nèi)核數(shù)開啟了超線程邏輯CPU個數(shù)=物理CPU個數(shù)*CPU內(nèi)核數(shù)沒有開啟超線程查看檢查/proc/cpuinfo 文件:(注意cpuinfo就是一個文本文件,記錄了當(dāng)前 CPU信息)例如我的CPUprocessor0vendor_idprocessor0vendor_idGenuineIntelcpufamily6model26modelnameIntel(R)Xeon(R)CPUstepping5cpuMHz:1600.000cachesize:8192KBphysicalid0siblings8coreid0cpucores4apicid0fpuyesfpu_exceptionyescpuidlevel11#cat/proc/cpuinfoE5520@2.27GHzwp :yesflags fpuvmedepsetscmsrpaemcecx8apicsepmtrrpgemcacmovpatpse36clflushdtsacpimmxfxsrssesse2sshttmsyscallnxrdtscplmconstant_tscidanonstop_tscpnimonitords_cplvmxesttm2cx16xtprpopcntlahf_lmbogomips:4522.12clflushsize:64cache_alignment 64addresssizes 40bitsphysical,48bitsvirtualpowermanagement以上輸出項(xiàng)的含義如下:processor:系統(tǒng)中邏輯處理核的編號 。對于單核處理器,則課認(rèn)為是其CPU編號,對于多核處理器則可以是物理核、或者使用超線程技術(shù)虛擬的邏輯核vendor_id:CPU制造商cpufamily : CPU產(chǎn)品系列代號model : CPU屬于其系列中的哪一代的代號modelname:CPU屬于的名字及其編號、標(biāo)稱主頻stepping : CPU屬于制作更新版本cpuMHz:CPU的實(shí)際使用主頻cachesize:CPU二級緩存大小physicalid:單個CPU的標(biāo)號,物理CPU的idsiblings:單個CPU邏輯物理核數(shù), 每個物理CPU上邏輯CPU個數(shù)coreid:當(dāng)前物理核在其所處 CPU中的編號,這個編號不一定連續(xù), 每個CPU上的物理核的idcpucores:該邏輯核所處CPU的物理核數(shù),每個物理CPU的物理核個數(shù)apicid :用來區(qū)分不同邏輯核的編號,系統(tǒng)中每個邏輯核的此編號必然不同,此編號不一定連續(xù)fpu :是否具有浮點(diǎn)運(yùn)算單元(FloatingPointUnit)fpu_exception:是否支持浮點(diǎn)計(jì)算異常cpuidlevel:執(zhí)行cpuid指令前,eax寄存器中的值,根據(jù)不同的值cpuid指令會返回不同的內(nèi)容wp :表明當(dāng)前CPU是否在內(nèi)核態(tài)支持對用戶空間的寫保護(hù)(WriteProtection)flags :當(dāng)前CPU支持的功能bogomips:在系統(tǒng)內(nèi)核啟動時粗略測算的 CPU速度(MillionInstructionsPerSecond)clflushsize:每次刷新緩存的大小單位cache_alignment:緩存地址對齊單位addresssizes:可訪問地址空間位數(shù)powermanagement:對能源管理的支持,有以下幾個可選支持功能:ts: temperaturesensorfid: frequencyidcontrolvid: voltageidcontrolttp: thermaltriptm:stc100mhzsteps:hwpstate:查看CPU各個邏輯核)占用情況:#topremark:在top命令下,點(diǎn)擊"1"可以查看各個邏輯核的占用情況進(jìn)程綁定邏輯核:#include<stdio.h>〃g++-otesttest.cpp/*啟動兩個實(shí)例,將進(jìn)程都綁定到Cpu0:taskset-c0./testtaskset-c0./test通過top,輸入"1”查看系統(tǒng)cpu狀況:Cpu1空閑,Cpu0使用100%繼續(xù)測試,將pid為18057的test遷移到CPU1上運(yùn)行,執(zhí)行:$taskset-pc118057pid18057'scurrentaffinitylist:0pid18057'snewaffinitylist:1Cpu0及Cpu1都進(jìn)入忙碌狀態(tài)了!繼續(xù)測試!將pid為18210的test也遷移到Cpu1上運(yùn)行,執(zhí)行:Cpu0閑著,Cpu1忙碌起來了!*/voidmain(intargc,char**argv){for(inti=0;i<=10000000000000;i++){if(i==100000000){i=0;printf("programisrunning!\n");))線程綁定邏輯核:TOC\o"1-5"\h\zCPU親合力就是指在Linux系統(tǒng)中能夠?qū)⒁粋€或多個進(jìn)程綁定到一個或多個處理器上運(yùn)行 ^一個進(jìn)程的CPU親合力掩碼決定了該進(jìn)程將在哪個或哪幾個 CPU上運(yùn)行.在一個多處理器系統(tǒng)中,設(shè)置CPU親合力的掩碼可能會獲得更好的性能 ^一個CPU的親合力掩碼用一個cpu_set_t結(jié)構(gòu)體來表示一個CPU集合,下面的幾個宏分別對這個掩碼集進(jìn)行操作:CPU_ZERO()清空一個集合CPU_SET()與CPU_CLR()分別對將一個給定的 CPU號加到一個集合或者從一個集合中去掉 .CPU_ISSET()檢查一個CPU號是否在這個集合中.下面兩個函數(shù)就是用來設(shè)置獲取線程 CPU親和力狀態(tài):sched_setaffinity(pid_tpid,unsignedintcpusetsize,cpu_set_t*mask)該函數(shù)設(shè)查進(jìn)程為pid的這個進(jìn)程,讓它運(yùn)行在mask而設(shè)正的CPU上.如果pid的值為0,則表示指定的是當(dāng)前進(jìn)程,使當(dāng)前進(jìn)程運(yùn)行在mask所設(shè)定的那些CPU上.第二個參數(shù)cpusetsize是mask所指定的數(shù)的長度.通常設(shè)定為sizeof(cpu_set_t).如果當(dāng)前pid所指定的進(jìn)程此時沒有運(yùn)行在 mask所指定的任意一個CPU上,則該指定的進(jìn)程會從其它 CPU上遷移到mask的指定的一個CPU上運(yùn)行.sched_getaffinity(pid_tpid,unsignedintcpusetsize,cpu_set_t*mask)該函數(shù)獲得pid所指示的進(jìn)程的CPU位掩碼,并將該掩碼返回到 mask所指向的結(jié)構(gòu)中.即獲得指定pid當(dāng)前可以運(yùn)行在哪些CPU上.同樣,如果pid的值為0.也表示的是當(dāng)前進(jìn)程cpu_set_t的定義define__CPU_SETSIZE1024define__NCPUBITS(8*sizeof(__cpu_mask))typedefunsignedlongint__cpu_mask;define__CPUELT(cpu)((cpu)/__NCPUBITS)define__CPUMASK(cpu)((__cpu_mask)1<<((cpu)%__NCPUBITS))typedefstruct(__cpu_mask__bits[__CPU_SETSIZE/__NCPUBITS];}cpu_set_t;define__CPU_ZERO(cpusetp)\do{\unsignedint__i;\cpu_set_t*__arr=(cpusetp);\for(__i=0;__i<sizeof(cpu_set_t)/sizeof(__cpu_mask);++__i)\__arr->__bits[__i]=0;\}while(0)一define__CPU_SET(cpu,cpusetp)\((cpusetp)->__bits[__CPUELT(cpu)]|=__CPUMASK(cpu))define__CPU_CLR(cpu,cpusetp)\((cpusetp)—>__bits[__CPUELT(cpu)]&=~__CPUMASK(cpu))define__CPU_ISSET(cpu,cpusetp)\(((cpusetp)->__bits[__CPUELT(cpu)]&__CPUMASK(cpu))!=0)測試代碼:#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<sys/sysinfo.h>#include<unistd.h>#define__USE_GNU#include<sched.h>#include<ctype.h>#include<string.h>#include<pthread.h>#defineTHREAD_MAX_NUM100 //1個CPU內(nèi)的最多進(jìn)程數(shù)intnum=0;//cpu中核數(shù)void*threadFun(void*arg)//arg傳遞線程標(biāo)號(自己定義){cpu_set_tmask;//CPU核的集合cpu_set_tget; //獲取在集合中的CPUint*a=(int*)arg;printf("theais:%d\n",*a); //顯示是第幾個線程CPU_ZERO(&mask); 〃置空CPU_SET(*a,&mask); //設(shè)置親和力值if(sched_setaffinity(0,sizeof(mask),&mask)==-1)//設(shè)置線程CPU親和力{printf("warning:couldnotsetCPUaffinity,continuing...\n");}while(1){CPU_ZERO(&get);if(sched_getaffinity(0,sizeof(get),&get)==-1)//獲取線程CPU親和力{printf("warning:coundnotgetthreadaffinity,continuing...\n");}inti;for(i=0;i<num;i++){if(CPU_ISSET(i,&get))//判斷線程與哪個CPU有親和力{printf("thisthread%disrunningprocessor:%d\n",i,i);}}}returnNULL;}intmain(intargc,char*argv[]){num=sysconf(_SC_NPROCESSORS_CONF);//獲取核數(shù)pthread_tthread[THREAD_MAX_NUM];printf("systemhas%iprocessor(s).\n",num);inttid[THREAD_MAX_NUM];inti;for(i=0;i<num;i++){tid[i]=i; //每個線程必須有個tid[i]pthread_create(&thread[0],NULL,threadFun,(void*)&tid[i]);}for(i=0;i<num;i++){
結(jié)束pthread_join(thread[i],NULL);//等待所有的線程結(jié)束,線程為死循環(huán)所以結(jié)束pthread_join(thread[i],NULL);//等待所有的線程結(jié)束,線程為死循環(huán)所以CTRL+C))編譯命令:return)編譯命令:gccbind.c-obind-lpthread執(zhí)行:./bind輸出結(jié)果:略#define__USE_GNU不要寫成#define_USE_GNU#include<pthread.h>必須寫在#define__USE_GNU之后,否則編譯會報錯查看你的線程情況可以在執(zhí)行時在另一布口向I top-H來查看線程的情況,查看各個核上的情況請使用top命令然后按數(shù)字“1”來查看。如果是批量查詢可以這樣做 :#cat/proc/cpuinfo|grep'Aphysical'|sort|uniqphysicalid:0#cat/proc/cpuinfo|grepprocessorprocessor : 0TOC\o"1-5"\h\zprocessor : 1processor : 2processor : 3linux下查看cpu物理個數(shù)和邏輯個數(shù)轉(zhuǎn)載2015年05月04日14:59:54標(biāo)簽:cpu/linux389轉(zhuǎn)自:/chw1989/article/details/9150767[plain]viewplaincopyhadoop@chw-desktop3:~$cat/proc/cpuinfoprocessor :0vendor_id :GenuineIntelTOC\o"1-5"\h\zcpufamily :15model :2modelname :Intel(R)Pentium(R)4CPU3.00GHzstepping :9microcode :0x17cpuMHz:2992.615cachesize:512KBphysicalid:0siblings:2coreid :0TOC\o"1-5"\h\zcpucores :1apicid : 0initialapicid:0fdiv_bug : nohlt_bug : nof00f_bug : nocoma_bug:nofpu:yesfpu_exception:yescpuidlevel:2wp:yesflags:fpuvmedepsetscmsrpaemcecx8apicmtrrpgemcacmovpatpse36clflushdtsacpimmxfxsrssesse2sshttmpbepebsbtscidxtprbogomips:5985.23clflushsize:64cache_alignment:128addresssizes:36bitsphysical,32bitsvirtualpowermanagement:TOC\o"1-5"\h\zprocessor :1vendor_id :GenuineIntelcpufamily:15model :2modelname :Intel(R)Pentium(R)4CPU3.00GHzstepping :9microcode :0x17cpuMHz:2992.615cachesize:512KBphysicalid:0siblings:2coreid:0cpucores:1apicid:1initialapicid:1fdiv_bug:nohlt_bug:nof00f_bug:nocoma_bug:nofpu:yesfpu_exception:yescpuidlevel:2wp:yesflags:fpuvmedepsetscmsrpaemcecx8apicmtrrpgemcacmovpatpse36clflushdtsacpimmxfxsrssesse2sshttmpbepebsbtscidxtprbogomips:5990.44clflushsize:64cache_alignment:128addresssizes:36bitsphysical,32bitsvirtualpowermanagement:輸入命令cat/proc/cpuinfo查看physicalid有幾個,上述結(jié)果顯示只有0,所以只有一個物理cpu;查看processor有幾個,上述結(jié)果顯示有 0和1兩個,所以有兩個邏輯 cpu。(一)概念①物理CPU實(shí)際Server中插槽上的CPU個數(shù)物理cpu數(shù)量,可以數(shù)不重復(fù)的 physicalid有幾個②邏輯CPU/proc/cpuinfo用來存儲cpu硬件信息的信息內(nèi)容分別列出了processor0-processorn的規(guī)格。這里需要注意, n是邏輯cpu數(shù)一般情況,我們認(rèn)為一顆 cpu可以有多核,加上intel的超線程技術(shù)(HT),可以在邏輯上再分一倍數(shù)量的cpucore出來邏輯CPU數(shù)量=物理cpu數(shù)量xcpucores這個規(guī)格值x2(如果支持并開啟ht)備注一下:Linux下top查看的CPU也是邏輯CPU個數(shù)③CPU核數(shù)一塊CPU上面能處理數(shù)據(jù)的芯片組的數(shù)量、 比如現(xiàn)在的i5760,是雙核心四線程的CPU、而i52250是四核心四線程的CPU般來說,物理CPU個數(shù)X每顆核數(shù)就應(yīng)該等于邏輯 CPU的個數(shù),如果不相等的話,則表示服務(wù)器的CPU支持超線程技術(shù)㈡查看CPU信息當(dāng)我們cat/proc/cpuinfo時、具有相同coreid的CPU是同一個core的超線程具有相同physicalid的CPU是同一個CPU封裝的線程或核心㈢下面舉例說明①查看物理CPU的個數(shù)#cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l2②查看邏輯CPU的個數(shù)#cat/proc/cpuinfo|grep"processor"|wc-l24③查看CPU是幾核#cat/proc/cpuinfo|grep"cores"|uniq6我這里應(yīng)該是2個Cpu,每個Cpu有6個core,應(yīng)該是Intel的U,支持超線程,所以顯示24虛
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 度校企合作合同書(三):人才培養(yǎng)與交流
- 兒童健康食品供應(yīng)合同
- 醫(yī)療中心服務(wù)合同樣本
- 環(huán)保工程項(xiàng)目內(nèi)部承包合同范本
- 北京市全日制用工勞動合同模板
- 標(biāo)準(zhǔn)版租賃與購銷合同范本
- 雙方合作經(jīng)營合同示范文本
- 城市住宅房屋買賣合同范本
- 文化機(jī)械產(chǎn)品用戶體驗(yàn)評估方法考核試卷
- 工業(yè)機(jī)器人協(xié)作機(jī)器人技術(shù)考核試卷
- 接地電阻測試記錄表范本
- 有限空間作業(yè)安全教育培訓(xùn)記錄參考模板范本
- 公司領(lǐng)導(dǎo)人員問責(zé)決定書(模板)
- 聲像檔案的整理103張課件
- 幼兒園課件《神奇的帽子》
- (小升初真題)六年級數(shù)學(xué)簡便計(jì)算(易錯題、難題)一【含答案】
- 三菱變頻器d700使用手冊應(yīng)用篇
- 學(xué)校安全隱患網(wǎng)格化管理平臺系統(tǒng)操作手冊
- 表面粗糙度等級對照表模板.doc
- GMP講課教案簡述
- 東莞虎門架空線路拆除施工方案
評論
0/150
提交評論