【Linux下进程的CPU配置和线程绑定】

Linux下进程的CPU配置和线程绑定2 基于线程的CPU配置 3 参考链接
1 基于进程的CPU配置
基于进程的CPU配置技术是指在Linux操作系统中,通过调整进程的CPU使用率来实现对系统资源的合理分配和管理 。这种技术可以用于限制特定进程的CPU使用,防止其占用过多的CPU资源,从而保证系统的稳定性和性能 。
基于进程的CPU配置是指将一个进程绑定到特定的CPU核心或者CPU集合上运行 。这样可以控制进程在特定的CPU资源上执行,以提高性能或实现特定的调度策略 。
1.1 对CPU亲和力的配置
对于 8下的Linux系统,首先可以使用top命令来查看当前的CPU占用率,如下图所示:
键盘上按数字1,可以以数据化的形式看到具体的使用情况,如下图:
键盘上按字母t,可以以图形化的形式看到具体的使用情况,如下图:
可以看到,当前的CPU基本是空闲的状态 。
这时候,我们写一个测试代码,让其挂在后台运行,例如下面的一个死循环函数:
#include int main(){while (true) {// 在这里编写你的代码// 例如,输出一条信息std::cout << "Hello, I am running in an infinite loop!" << std::endl;}return 0;}
让其挂在后台运行着,暂时不管 。如下图:
此时,我们再次使用top命令,来查看当前的CPU 状态,如下图:
可以看到,此时循环代码这个进程正在后台不停运行,此时的CPU占用率相比开始,非常的高 。
记住当前的进程PID,然后使用 -c -p 13265 命令查看当前进程的CPU亲和力 。13265是当前进程的PID 。
可以从输出的信息看出,pid 为13265的进程(即当前的测试进程)的亲和力CPU为0-3,即它同时运行在了0,1,2,3这四个CPU上面 。
现在我们更改pid 为13265的进程(即当前的测试进程)的亲和力,将其改成只在0,1这两个CPU上面运行 。如下图:
这里由于我使用了ctrl + c暂停了刚才的进程,然后重新启动该进程时,进程的PID变成了13495,不过这没有任何影响 。可以看到,当前的进程新的亲和力列表为0,1,说明设置新的CPU亲和力成功 。而pid 13495 的当前亲和力掩码为3,同样能说明亲和力设置成功 。使用命令来查看进程运行在哪个CPU上 。使用以下命令:
-p < PID >
【请将< PID >替换为你要查看的进程的实际PID 。】
该命令将显示进程的当前亲和力掩码,其中每个位表示一个CPU核心 。例如,如果输出为pid 'smask: 3,表示进程当前在CPU核心0和1上运行,因为二进制表示为11 。
再次实验一下,这次我们将CPU亲和力设置在CPU 1,CPU2上,如下图:
由当前亲和力掩码可以看到,为6,说明此时运行在CPU1和CPU2上 。(2^1 + 2^2 = 6)
1.2 绑定进程到指定CPU核上运行
查看CPU有几个核
使用 cat /proc/ 查看CPU信息,如下两个信息:
·:指明第几个cpu处理器
·cpu cores:指明每个处理器的核心数
以本机中虚拟机为例,有4个CPU(分别为:CPU0, CPU1, CPU2, CPU3),每个CPU有1个核 。
也可以使用系统调用获取CPU核心数:
#include int sysconf(_SC_NPROCESSORS_CONF);/* 返回系统可以使用的核数,但是其值会包括系统中禁用的核的数目,因 此该值并不代表当前系统中可用的核数 */int sysconf(_SC_NPROCESSORS_ONLN);/* 返回值真正的代表了系统当前可用的核数 *//* 以下两个函数与上述类似 */#include int get_nprocs_conf (void);/* 可用核数 */int get_nprocs (void);/* 真正的反映了当前可用核数 */
使用指令
·获取进程pid:
·查看进程当前运行在哪个CPU上: