linux绑核命令 linux进程绑定cpu命令

linux 查看线程绑定在哪个核心 proc

使用top命令,具体用法是 top -H,加上这个选项,top的每一行就不是显示一个进程,而是一个线程。

创新互联2013年开创至今,先为蓝山等服务建站,蓝山等地企业,进行企业商务咨询服务。为蓝山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

使用ps命令,具体用法是 ps -xH,这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。

使用ps命令,具体用法是 ps -mq PID,这样可以看到指定的进程产生的线程数目。

更进一步,其实一些系统监控工具,在本质上也是读取的系统产生的文件罢了。

如何将一个进程(线程)绑定到一个固定的CPU

第一种:linux的shell命令行方式,命令名字为taskset。第二种就是代码实现级别的了,pthread_setaffinity_np和sched_setaffinity函数接口。

第一种方式我已经验证过了,确实可行。同时验证了我心中的疑问:如果将某个线程绑定到某个物理核上之后,在此线程运行结束前,会不会有别的线程被调度到此物理核上执行? 写了一个死循环验证了下,发现绑定之后是不会调度别的线程在此核上运行的!(肉眼观察的,时不时观察下,没发现别的线程在此核上执行;对比了下没有绑定的情况,会发现过段时间此线程就会被调度到别的核心上执行)

此种方式有个问题,就是只有线程运行起来后才会被绑定到某个核上,不够及时。

具体的方式为:

1.首先根据系统的差别运行如下安装命令:

sudo apt-get install util-linux (Debian,Ubuntu or Linux Mint)

sudo yum install util-linux (Fedora,CentOS or RHEL)

2.相关命令的使用:

2.1 使用命令 taskset -p PID 来获得此Process的 CPU affinity。

eg: taskset -p 2915 ------ pid 2915's current affinity mask:ff; ff=="1111 1111",没一个1代表一个核,共8个核,能用的核数也为8个核。

2.2 使用命令 taskset -cp PID 可获得数字形式的CPU affinity。

eg: taskset -cp 2915 ------ pid 2915's current affinity list: 0--7。

接下来为将进程pin到某个核上的命令;

2.3 taskset -p COREMASK PID

eg:taskset -p 0x11 9030 ------pid 9030's current affinity mask: ff , pid 9030's new affinity mask: 11 。意思就是将此进程绑定到了CPU core 0 and 4。

2.4 taskset -cp CORE-LIST PID

eg:taskset -cp 0,4 9030 ------the same as below.

With "-c" option, you can specify a list of numeric CPU core IDs separated by commas, or even include ranges (e.g., 0,2,5,6-10).

2.5 taskset COREMASK EXECUTABLE

eg: taskset 0x1 xxxx -----"xxxx" represented the name of one program.

另外:参考文章最后的位置说到,绑定到此物理核之后,别的进程(线程)还可以调度到此核上执行,但是没说绑定的这个线程没执行完之前是否会被别的线程挤掉。根据我的观察是不会被挤掉,这我在文章的开头也有提到。

Linux如何将进程绑定运行在指定CPU上

绑定cpu方式:

c语言:

sched_setaffinity(0, sizeof(mask), mask)

shell命令:

在grup启动时传给内核参数: isolcpus=2-15, 这里表示隔离第3到16个CPU, Linux程序只跑在第一和第二个CPU上, 空闲的CPU我们可以指定跑进程了.

这是内核文档里对内核参数的解释:

isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler.

Format:

cpu number,...,cpu number

or

cpu number-cpu number

(must be a positive range in ascending order)

or a mixture

cpu number,...,cpu number-cpu number

This option can be used to specify one or more CPUs

to isolate from the general SMP balancing and scheduling

algorithms. You can move a process onto or off an

"isolated" CPU via the CPU affinity syscalls or cpuset.

cpu number begins at 0 and the maximum value is

"number of CPUs in system - 1".

This option is the preferred way to isolate CPUs. The

alternative -- manually setting the CPU mask of all

tasks in the system -- can cause problems and

suboptimal load balancer performance.

linux nice 命令详解

功能说明:设置优先权。

语法:nice [-n 优先等级][--help][--version][执行指令]

补充说明:nice指令可以改变程序执行的优先权等级。

参数:-n优先等级或-优先等级或--adjustment=优先等级  设置欲执行的指令的优先权等级。等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。

--help  在线帮助。

   --version  显示版本信息。

linux renice 命令详解

功能说明:调整优先权。

语法:renice [优先等级][-g 程序群组名称...][-p 程序识别码...][-u 用户名称...]

补充说明:renice指令可重新调整程序执行的优先权等级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20--19,只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。

参数:

-g 程序群组名称  使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。

-p 程序识别码  改变该程序的优先权等级,此参数为预设值。

-u 用户名称  指定用户名称,修改所有隶属于该用户的程序的优先权。

taskset设定cpu亲和力,cpu亲和力是指

CPU调度程序属性关联性是“锁定”一个进程,使他只能在一个或几个cpu线程上运行。对于一个给定的系统上设置的cpu。给定CPU亲和力和进程不会运行在任何其他CPU。注意,Linux调度器还支持自然CPU关联:(不能让这个cpu只为这一个进程服务)

这里要注意的是我们可以把某个程序限定在某一些CPU上运行,但这并不意味着该程序可以独占这些CPU,其实其他程序还是可以利用这些CPU运行。如果要精确控制CPU,taskset就略嫌不足,cpuset才是可以

-a, --all-tasks 操作所有的任务线程-p, --pid 操作已存在的pid-c, --cpu-list 通过列表显示方式设置CPU

(1)指定1和2号cpu运行25718线程的程序

taskset -cp 1,2 25718

(2),让某程序运行在指定的cpu上 taskset -c 1,2,4-7 tar jcf test.tar.gz test

(3)指定在1号CPU上后台执行指定的perl程序

taskset –c 1 nohup perl pi.pl


网页题目:linux绑核命令 linux进程绑定cpu命令
浏览地址:http://azwzsj.com/article/dooceos.html