分享

CPU

 昵称7324690 2016-07-29
getconf LONG_BIT
ps -o pid,psr,comm -p xxxx
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo | grep "physical id"
cat /proc/cpuinfo | grep "cpu cores"
CPU 数量; 但不一定是真实的CPU个数
以E5-2680v2为例,physical id 是2. 实际是1个CPU 10核,20个超线程
taskset -cp 2,3 16029
mpstat -P ALL
mpstat [-P {|ALL}] [internal [count]]
参数 解释
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间、
count 采样的次数,count只能和delay一起使用
当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。

Linux下的绑核命令——taskset


什么是绑核? 所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity)。设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行。 但并不是说该进程/线程就独占这个CPU的核,其他的进程/线程还是可以在这个核上面运行的。如果想要实现某个进程/线程独占某个核,就要使用cpuset命令去实现。 其实,很多情况下,为了提高性能,Linux调度器会自动的实现尽量让某个进程/线程在同样的CPU上去运行。所以,除非必须,我们没有必要显式的去进程绑核操作。

如何绑核? taskset用于将某个进程/线程绑定到CPU的某个或某几个核上面,其用法如下:

taskset -p pid
可以查出进程pid现在的绑核情况。 设置绑核有两种方法,一种是掩码形式,一种是直接绑定。下面分别介绍:

掩码形式绑核 按照二进制形式,从最低位到最高位代表物理CPU的#1、#2、……、#n号核。 比如:0x00000001代表CPU的0号核,0x00000003代表CPU的0号和3号核。 需要注意的是,并非掩码中给出的CPU核就一定会存在,比如0x00000400理论上代表CPU的第10号核,但是该核在真正的计算机上面并不一定是存在的。而且,如果我们试图将物理上并不存的核绑定给某个进程时,会返回错误。掩码形式的绑核命令为:

taskset -p mask pid

按CPU数直接绑核

taskset -cp cpu-list pid
其中cpu-list是数字化的cpu列表,从1开始。多个不连续的cpu可用逗号连接,连续的可用短现连接,比如1,2,5-11等。 比如“taskset -cp 1,2,5-11 9865”命令表示将进程9864绑定到#1、#2、#5~#11号核上面



一个进程, 可能只有一个线程,此时叫 单线程进程,对于这样的进程,不管你用什么 CPU,什么工具,什么调用,在任何时刻,最多只能有 一个 cpu(内核)执行这个进程。

一个(linux)进程,可以通过 pthread 线程库提供的接口 (但是这是需要在这个程序的源码里使用的接口,对于已有的程序,必须修改其源码,重新编译生成新的程序才行),实现进程内拥有多条线程,此时叫多线程进程,只有多线程进程才能利用到多核处理器,即不同的cpu核心执行不同的线程。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多