首页 > 其他分享 >代码绑核后调用system占用CPU分析

代码绑核后调用system占用CPU分析

时间:2022-12-01 17:03:51浏览次数:59  
标签:exhaust 调用 核后 system CPU 进程 cpu


一 system函数分析

1.函数原型:

int system(const char *command)

参数command一般是一条可被/bin/sh -c执行的字符串,可以是"ls -l"这样的shell命令,也可以是"./Test"这样的二进制路径。

代码绑核后调用system占用CPU分析_子进程

如上图所示:

(1)某个进程调用system时,就是fork一个子进程,让子进程调用execl执行命令;

(2)父进程一直会等子进程执行结束,这个与popen不同;

(3)子进程会继续父进程一些属性,如果父进程使用绑核操作,那么system出来的子进程也会在相应核上运行。

二 实验绑核后调用system

1.实验描述:

(1)一个exhaust进程用于消耗CPU,做计算任务,比如可将CPU消耗到70%~100%;

(2)父进程绑核后调用system("./exhaust")执行计算任务;

(3)父进程不进行绑核调用system("./exhaust")执行计算任务

2.实验目的:

证明绑核后进程在调用system产生子进程一定会和父进程位于同样CPU上运行。

3.实验环境:

CPU:4核 Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz

代码绑核后调用system占用CPU分析_父进程_02

 

OS:centos7.6

代码绑核后调用system占用CPU分析_父进程_03

3.代码:

​https://github.com/wangzhicheng2013/system_call_cpu_bind​

4.实验数据对比

(1)绑核

#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <thread>
#include "cpu_utility.hpp"
void exhaust_cpu() {
std::cout << system("./exhaust_cpu") << std::endl;
}
int main() {
G_CPU_UTILITY.bind_cpu(1);
std::thread th0(exhaust_cpu);
std::thread th1(exhaust_cpu);
if (th0.joinable()) {
th0.join();
}
if (th1.joinable()) {
th1.join();
}

return 0;
}

代码绑核后调用system占用CPU分析_#include_04

 

经过绑核后,尽管单个exhaust_cpu进程可以消耗70%CPU,但通过Test调用system后两个exhaust_cpu进程都运行在1核,并且导致1核满负载,使用ps -eo pid,args,psr | grep exh查看:

代码绑核后调用system占用CPU分析_父进程_05

(2)不绑核

去除代码的绑核操作后,运行Test:

代码绑核后调用system占用CPU分析_父进程_06

每个exhaust_cpu占用的CPU比例都在近70%,使用ps -eo pid,args,psr | grep exh查看:

代码绑核后调用system占用CPU分析_子进程_07

可以看出exhaust_cpu分别运行在0号和1号CPU上,因此性能得到提升。

标签:exhaust,调用,核后,system,CPU,进程,cpu
From: https://blog.51cto.com/u_15899033/5902968

相关文章

  • nginx证书填写路径报错:SSL: error:0200107B:system library:fopen:Unknown error:fope
    nginx配置ssl证书时,启动报错,无法找到证书文件,报错日志如下:2021/11/2415:52:19[emerg]4124#3800:cannotloadcertificate"E:ginx-1.21.4\ssl\6667030_xxxx.pem":BIO_n......
  • CPU各寄存器的作用
    CPU各寄存器的作用-[Asm]寄存器作用:ebp和esp是32位的SP,BPesp是堆栈指针ebp是基址指针ESP与SP的关系就象AX与AL,AH的关系.32位CPU所含有的寄存器有:4个数据寄存器(EAX、EB......
  • 程序员学习 CPU 有什么用?
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。前言大家好,我是小彭。在上一篇文章里,我们聊到了计算机的冯·诺依曼架构,以及计算机的五大部件......
  • java获取电脑cpu,系统相关信息,jvm,文件盘符相关信息
    1.准备cpu,jvm,文件盘符实体类packagecom.joolun.framework.web.domain.server;importjava.lang.management.ManagementFactory;importcom.joolun.common.utils.Arit......
  • 硬件路灯第一期CPU篇
    CPU,centralprocessingunit,也就是中央处理器,如果计算机是一个人的话,CPU就是他的大脑我们近下来会科普CPU的几大参数1.主频假设CPU是建筑工地的话,主频相当于工人们搬砖的......
  • 遭遇流氓软件 CPUSH
    遭遇流氓软件CPUSHendurer原创2007-08-01第1版刚才一位网友说他的电脑中了病毒,瑞星清除后重启电脑又出现了,让偶通过QQ远程协助。检查瑞星的杀毒记录,原来是CPUSH这个流......
  • 解决Explorer.exe频繁占用大量的CPU
    前言不止从何时开始,本人电脑系统的Windows资源管理器(Explorer.exe)频繁占用大量cpu资源,导致系统卡顿。最开始觉得是系统文件损坏或者驱动文件的问题,但用sfc/scannow检测......
  • 获取windows内存、cpu及进程的信息
    如题,想获取进程信息用于资源显示,在这个过程中遇到很多问题,看来需要了解下windows里面的东西才行。记录目前遇到的问题,不断更新直到解决。头文件需要#include<TlHelp32.h......
  • OpenStack跨CPU热迁移失败处理
    1.注释libvirt的CPU检测代码所有计算节点vim/usr/lib/python3/dist-packages/nova/virt/libvirt/driver.py'''9342#try:9343#ifnotins......
  • Systemd 服务管理器
    项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,变成守护进程的第一步,就是把它改成"后台任务"(backgroundjob)。传统上我们是用以下的方法来做:&只要在命令的尾部加......