linux系統設置cpu孤立


介紹

針對cpu密集型的任務,消耗cpu較高,最好設置cpu親和度,以提高任務執行效率,避免cpu進行上下文切換,浪費不必要的性能。
特定任務(進程/線程)需要獨占一個cpu核心並且不想讓其他任務(進程/線程)使用該核心。

默認情況下,linux系統任務(進程/線程)可以使用任意一顆核心,要想把指定的cpu孤立出來,不讓普通進程使用,需要修改grub參數

修改grub配置文件

以debian為例,默認grub參數配置文件為/etc/default/grub

找到GRUB_CMDLINE_LINUX行,

我這里這一行默認為

GRUB_CMDLINE_LINUX="text console=tty0 console=ttyS0,115200n8"

想要孤立11-23號cpu,可以這么寫

GRUB_CMDLINE_LINUX="text isolcpus=11,12,13,14,15,16,17,18,19,20,21,22,23 nohz_full=11,12,13,14,15,16,17,18,19,20,21,22,23 rcu_nocbs=11,12,13,14,15,16,17,18,19,20,21,22,23 console=tty0 console=ttyS0,115200n8"

所有的核心必須用逗號分隔開來寫11,12,13,14,15,16,17,18,19,20,21,22,23,不能寫為11-23

生成新的grub引導文件

修改/etc/default/grub文件后,需要重新生成grub引導文件

使用命令

update-grub

或者

update-grub2

或者

grub-mkconfig -o /boot/grub/grub.cfg

上面3個命令都可以,其實就是重新生成了/boot/grub/grub.cfg文件,
重啟系統生效,系統默認就不會再使用11-23號cpu了

使用孤立cpu

我們要想使用這些cpu,可以在命令行中使用taskset命令

比如:

正常的命令運行為

python xx.py

這樣運行,一定不會使用11-23號cpu,

如果想使用11-15號cpu運行該進程,可以寫為

taskset -c 11,12,13,14,15 python xx.py

或者

taskset -c 11-15 python xx.py

除了在命令行中用taskset命令,也可以使用庫函數在代碼中設置cpu親和度來使用這些cpu

注意

在docker容器中,這些已經被孤立的cpu仍然可以被使用,
比如上面我們孤立了11-23號cpu,在docker容器中運行命令默認也是可以使用這些cpu的

當然,我們肯定不希望docker也可以使用這些cpu,因為這些cpu是供特定服務(進程)使用的,
在創建docker容器時,通過參數--cpuset-cpus指定容器只能使用哪些cpu,可以達到將11-23號cpu孤立的目的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM