[英]Specify a core to run a python script on. systemd
我有这个 systemd 服务:
[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 代码指定一个核心来运行。
(TL; DR结尾)
您可以使用taskset
util-linux
软件包中的taskset
命令来实现。 大多数发行版已经附带了它,如果在您的系统上不可用,请安装:
apt-get install util-linux
使用以下命令以十六进制查看进程的CPU关联性:
taskset -p [pid]
它将沿ff
返回值,等于二进制或all cores
11111111
。
指定'c'选项(例如: taskset -cp [pid]
)以获取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
分配了这些taskset
。
尝试将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
CPUAffinity怎么样:
[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
CPUAffinity=0-20,288-308
Type=idle
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.