最近因为程序需要高效和实时性,所以我把程序迁移到了Linux下,并对程序进行分核处理。遇到了一些问题,记录下来。
首先需要在Linux下进行内核隔离。在终端中输入一下指令,可查看电脑CPU有几个核。以我的电脑为例有8个核(CPU从0开始计)。
ls /sys/devices/system/cpu/

在终端中输入以下指令
sudo vi /etc/default/grub
接下来需要将你想要隔离的核心写入到文件中,比如我想要隔离0-3,将isolcpus=0,1,2,3写入到文件中,然后保存。
文件修改完毕,输入以下指令更新grub
sudo update-grub
重启电脑检查是否生效
cat /proce/cmdline
如果你的程序指向分配一个核心的话,直接使用teskset命令即可(这里我使用的是核心0)。
sudo taskset -c 0 ./yourProgram
但是我的程序需要用到多个核心,这时候如果我直接使用下面的指令发现我的程序分配的还是只有一个核心。
sudo taskset -c 0,1,2,3 ./yourProgram
然后我去网上查找了一些资料,找到了解决办法。来源kernel - Taskset not working over a range of cores in isolcpus - Server Fault
sudo chrt -r 1 taskset -c 0,1,2,3 ./yourProgram
这里的解决方法也存在着一定的问题,因为使用chrt -r将0,1,2,3这几个核心的调度策略改为了轮转调度策略,这将增加这几个核心中内核的CPU使用。

7495

被折叠的 条评论
为什么被折叠?



