付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-5"\h\zcpu数,物理核,逻辑核的关系: 1看看检查/proc/cpuinfo文件: 1查看CPU(各个逻辑核)占用情况: 2进程绑定逻辑核: 2linux下查看cpu物理个数和逻辑个数 5cpu数,物理核,逻辑核的关系:逻辑CPU个数>物理CPU个数*CPU内核数开启了超线程逻辑CPU个数=物理CPU个数*CPU内核数没有开启超线程查看检查/proc/cpuinfo 文件:(注意cpuinfo就是一个文本文件,记录了当前 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以上输出项的含义如下:processor:系统中逻辑处理核的编号 。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核vendor_id:CPU制造商cpufamily : CPU产品系列代号model : CPU属于其系列中的哪一代的代号modelname:CPU属于的名字及其编号、标称主频stepping : CPU属于制作更新版本cpuMHz:CPU的实际使用主频cachesize:CPU二级缓存大小physicalid:单个CPU的标号,物理CPU的idsiblings:单个CPU逻辑物理核数, 每个物理CPU上逻辑CPU个数coreid:当前物理核在其所处 CPU中的编号,这个编号不一定连续, 每个CPU上的物理核的idcpucores:该逻辑核所处CPU的物理核数,每个物理CPU的物理核个数apicid :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续fpu :是否具有浮点运算单元(FloatingPointUnit)fpu_exception:是否支持浮点计算异常cpuidlevel:执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容wp :表明当前CPU是否在内核态支持对用户空间的写保护(WriteProtection)flags :当前CPU支持的功能bogomips:在系统内核启动时粗略测算的 CPU速度(MillionInstructionsPerSecond)clflushsize:每次刷新缓存的大小单位cache_alignment:缓存地址对齐单位addresssizes:可访问地址空间位数powermanagement:对能源管理的支持,有以下几个可选支持功能:ts: temperaturesensorfid: frequencyidcontrolvid: voltageidcontrolttp: thermaltriptm:stc100mhzsteps:hwpstate:查看CPU各个逻辑核)占用情况:#topremark:在top命令下,点击"1"可以查看各个逻辑核的占用情况进程绑定逻辑核:#include<stdio.h>〃g++-otesttest.cpp/*启动两个实例,将进程都绑定到Cpu0:taskset-c0./testtaskset-c0./test通过top,输入"1”查看系统cpu状况:Cpu1空闲,Cpu0使用100%继续测试,将pid为18057的test迁移到CPU1上运行,执行:$taskset-pc118057pid18057'scurrentaffinitylist:0pid18057'snewaffinitylist:1Cpu0及Cpu1都进入忙碌状态了!继续测试!将pid为18210的test也迁移到Cpu1上运行,执行: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系统中能够将一个或多个进程绑定到一个或多个处理器上运行 ^一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个 CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码可能会获得更好的性能 ^一个CPU的亲合力掩码用一个cpu_set_t结构体来表示一个CPU集合,下面的几个宏分别对这个掩码集进行操作:CPU_ZERO()清空一个集合CPU_SET()与CPU_CLR()分别对将一个给定的 CPU号加到一个集合或者从一个集合中去掉 .CPU_ISSET()检查一个CPU号是否在这个集合中.下面两个函数就是用来设置获取线程 CPU亲和力状态:sched_setaffinity(pid_tpid,unsignedintcpusetsize,cpu_set_t*mask)该函数设查进程为pid的这个进程,让它运行在mask而设正的CPU上.如果pid的值为0,则表示指定的是当前进程,使当前进程运行在mask所设定的那些CPU上.第二个参数cpusetsize是mask所指定的数的长度.通常设定为sizeof(cpu_set_t).如果当前pid所指定的进程此时没有运行在 mask所指定的任意一个CPU上,则该指定的进程会从其它 CPU上迁移到mask的指定的一个CPU上运行.sched_getaffinity(pid_tpid,unsignedintcpusetsize,cpu_set_t*mask)该函数获得pid所指示的进程的CPU位掩码,并将该掩码返回到 mask所指向的结构中.即获得指定pid当前可以运行在哪些CPU上.同样,如果pid的值为0.也表示的是当前进程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内的最多进程数intnum=0;//cpu中核数void*threadFun(void*arg)//arg传递线程标号(自己定义){cpu_set_tmask;//CPU核的集合cpu_set_tget; //获取在集合中的CPUint*a=(int*)arg;printf("theais:%d\n",*a); //显示是第几个线程CPU_ZERO(&mask); 〃置空CPU_SET(*a,&mask); //设置亲和力值if(sched_setaffinity(0,sizeof(mask),&mask)==-1)//设置线程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);//获取核数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++){
结束pthread_join(thread[i],NULL);//等待所有的线程结束,线程为死循环所以结束pthread_join(thread[i],NULL);//等待所有的线程结束,线程为死循环所以CTRL+C))编译命令:return)编译命令:gccbind.c-obind-lpthread执行:./bind输出结果:略#define__USE_GNU不要写成#define_USE_GNU#include<pthread.h>必须写在#define__USE_GNU之后,否则编译会报错查看你的线程情况可以在执行时在另一布口向I top-H来查看线程的情况,查看各个核上的情况请使用top命令然后按数字“1”来查看。如果是批量查询可以这样做 :#cat/proc/cpuinfo|grep'Aphysical'|sort|uniqphysicalid:0#cat/proc/cpuinfo|grepprocessorprocessor : 0TOC\o"1-5"\h\zprocessor : 1processor : 2processor : 3linux下查看cpu物理个数和逻辑个数转载2015年05月04日14:59:54标签:cpu/linux389转自:/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有几个,上述结果显示只有0,所以只有一个物理cpu;查看processor有几个,上述结果显示有 0和1两个,所以有两个逻辑 cpu。(一)概念①物理CPU实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physicalid有几个②逻辑CPU/proc/cpuinfo用来存储cpu硬件信息的信息内容分别列出了processor0-processorn的规格。这里需要注意, n是逻辑cpu数一般情况,我们认为一颗 cpu可以有多核,加上intel的超线程技术(HT),可以在逻辑上再分一倍数量的cpucore出来逻辑CPU数量=物理cpu数量xcpucores这个规格值x2(如果支持并开启ht)备注一下:Linux下top查看的CPU也是逻辑CPU个数③CPU核数一块CPU上面能处理数据的芯片组的数量、 比如现在的i5760,是双核心四线程的CPU、而i52250是四核心四线程的CPU般来说,物理CPU个数X每颗核数就应该等于逻辑 CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术㈡查看CPU信息当我们cat/proc/cpuinfo时、具有相同coreid的CPU是同一个core的超线程具有相同physicalid的CPU是同一个CPU封装的线程或核心㈢下面举例说明①查看物理CPU的个数#cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l2②查看逻辑CPU的个数#cat/proc/cpuinfo|grep"processor"|wc-l24③查看CPU是几核#cat/proc/cpuinfo|grep"cores"|uniq6我这里应该是2个Cpu,每个Cpu有6个core,应该是Intel的U,支持超线程,所以显示24虚
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某麻纺厂质量事故处理条例
- 2026秋人教PEP五年级上册英语全册语法知识点讲义(含专项练习)
- 单片基础原理应用 2
- 疾控健康宣传资料-1
- 某纺织厂人力资源制度
- 安全生产条例宣传手册讲解
- 烘焙师职业发展规划指南
- 夯实安全基础指南讲解
- 2026金山办公租赁合作协议二篇
- 2026大专专业面试题库及答案
- 小儿推拿技术操作考核评分标准
- 小学语文部编版一年级下册全册《字、词、句》(直接打印每生一份熟读熟记)
- 2026福建泉州安溪县国有企业招聘第一批工作人员39人笔试参考试题及答案详解
- 2026年江苏高考化学真题试卷含答案
- 2026学年广东省梅州市六年级数学期末通关专项特训题(详细参考解析)详细答案和解析
- 台风过后复工前安全培训课件
- 人教版高中地理必修第二册期末复习重点知识背诵提纲
- GB/T 33629-2024风能发电系统雷电防护
- 浮头式换热器维修应用知识考题(附答案)
- 回弹法-混凝土强度自动计算表
- JJF 1373-2012动弹仪校准规范
评论
0/150
提交评论