绑定进程的CPU核以及限制进程的CPU使用率

在测试程序的性能时,需要对进程运行的CPU进行绑定,甚至需要测试进程只使用部分CPU资源时能达到的性能。比如,你可能需要测试某程序在只用一个核的80%CPU资源时的延时。
本文主要总结采用taskset和cpulimit工具来实现目标。

1. 使用taskset绑定进程CPU

taskset使绑定进程CPU的工具,使用方式如下:

taskset -c 1 ./command. 执行command命令,并将command启动的进程绑定到第1个核上。
taskset -pc 3  pid    表示将进程pid绑定到第3个核上

网上很多人多用了上述命令绑定进程到一个核以后发现CPU占用率还是超了100%。这里原因是你当前的进程可能起了多个线程,是上述的方式就不能把线程也绑定进去。如果需要把该进程的所有线程都绑定到与线程相同的核上,需要添加参数a(a表示all)。使用姿势如下:

 taskset -a -pc 3 pid  表示将进程pid(包括所有线程)绑定到第3个核上

Tips: 如果想查看当前进程所属的CPU,可以用如下方式:

taskset -cp pid查看进程所属核

同理,如果还想更进一步查看线程的绑定关系,也需要添加a选项

taskset -acp pid查看进程及所有线程的所属核

通过以上方式完成进程在指定核上的绑定。

2. 使用cpulimit限制进程的CPU使用率

cpulimit源码下载地址:https://sourceforge.net/p/cpulimit/wiki/Home/
下载完成后编译

cd cpulimit-1.1
make
sudo cp cpulimit /usr/bin

cpulimit的使用非常简单:

cpulimit -p $pid -l 50  把进程pid的CPU资源使用率限制为不超过50%

Tips: 如果当前进程运行在多个核上,则cpulimit会限制一个核的使用率都为50%。

3. 测试

使用以上两个工具就能完成对程序限制CPU的性能测试,可编写一个简单的shell脚本实现,例子如下:

 ./benchmark_test  >result.txt 2>&1 &   #把测试程序放到后台运行
pid=$! #获取上一条指令的pid
#pid=$(pgrep -f "benchmark_test")
echo "benchmark pid: $pid"

taskset -acp 4 $pid
cpulimit -p $pid -l 10

最后,当CPU上同时运行很多任务时,也可以通过nice/renice改变进程的优先级来控制CPU资源的利用率,不过这样不能限制CPU的百分比。

Reference:
https://www.techforgeek.info/how_to_limit_cpu_usage.html
http://weyo.me/pages/techs/linux-get-pid/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值