2016-11-15 121 views
0

我有這樣的systemd服務:指定在其上運行python腳本的核心。 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代碼上運行的能力。

回答

1

嘗試將ExecStartPost=/path/to/tasksel -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/tasksel -cp 1 $MAINPID 
Type=idle 
Restart=always 
RestartSec=2 

[Install] 
WantedBy=multi-user.target 
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分配的內核。

+0

是啊我看過taskset,但是我不能將它實現到systemd中,據我所知。我需要這個過程在死亡時自動重啓。因此,我需要一些能夠保持運行的東西,但我也需要一些東西來強制它在特定的核心上運行 – DNA