我有这个系统服务:
[Unit]
Description=Toasty
After=multi-user.target
[Service]
WorkingDirectory=/mnt/data/Toasty
User=root
Group=root
ExecStart=/usr/local/bin/python3.5 /mnt/data/Toasty/run.py
Type=idle
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
我想要的是能够为我的python代码指定一个核心来运行。
答案 0 :(得分:1)
(TL;最后的DR)
您可以使用taskset
命令实现此目的,该命令是util-linux
包的一部分。
大多数发行版已经附带它,如果它在您的系统上不可用,请安装它:
apt-get install util-linux
使用以下命令查看进程'十六进制的CPU亲和性:
taskset -p [pid]
将返回ff
的内容,等于11111111
二进制或all cores
。
指定“c”选项(例如:taskset -cp [pid]
)以获取类似0-7
的人类可读格式。
要将已经运行的流程固定到特定核心,请使用
taskset -p [hexmask] [pid]
ex: taskset -p 0x1 4242
或
taskset -cp [list] [pid]
ex: taskset -cp 0 4242
使用'c'选项,您可以使用以逗号分隔的列表或核心范围(例如:0,2,5-7)。
<强> TL; DR:强>
现在我们已经掌握了基础知识,让我们来看看你的用例。可以使用taskset
启动固定到核心的进程,如下所示:
taskset 0x1 vlc
将启动并将vlc固定为核心0。
如果您希望仅将整个核心专用于该一个(或多个)进程,您应该查看isolcpus
内核参数并将其集成到您的grub配置中。它将在启动期间保留这些核心,以供其他进程使用,除了您使用taskset
分配的核心。
答案 1 :(得分:1)
尝试将ExecStartPost=/path/to/taskset -cp 1 $MAINPID
添加到Install
部分。
[Unit]
Description=Toasty
After=multi-user.target
[Service]
WorkingDirectory=/mnt/data/Toasty
User=root
Group=root
ExecStart=/usr/local/bin/python3.5 /mnt/data/Toasty/run.py
ExecStartPost=/path/to/taskset -cp 1 $MAINPID
Type=idle
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target