[英]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.