Linux

Linux:如何知道哪些程序被固定到哪個核心?

  • October 27, 2020

有沒有辦法知道哪些核心目前有一個固定到它們的程序?

甚至其他使用者執行的程序也應該在輸出中列出。

或者,是否可以嘗試將程序固定到核心,但如果所需的核心已經固定了一個程序,則會失敗?

PS:感興趣的程序必須已固定到給定的核心,而不僅僅是目前在給定的核心上執行

PS:這不是重複,另一個問題是如何確保一個程序獨占一個CPU。在這裡,我們詢問如何檢測一個程序被固定到給定的核心(即使用了 cpuset,而不是如何使用它)。

在正常情況下,Linux 程序不會顯式地固定到給定的核心,通常沒有理由這樣做,但這是可能的。

taskset您可以使用帶有“psr”欄位的 ps來管理程序關聯或查看目前在哪個 CPU 上執行的程序。

檢查程序 27395 的目前 CPU 親和性:

$ ps -o psr 27395
PSR
 6

檢查程序 27395 的關聯列表:

$ taskset -pc 27395
pid 27395's current affinity list: 0-7

設置程序 27395 與 CPU 3 的親和性

$ taskset -pc 3 27395
pid 27395's current affinity list: 0-7
pid 27395's new affinity list: 3

檢查程序 27395 的目前 CPU 親和性:

$ ps -o psr 27395
PSR
 3

要檢查是否有任何程序被固定到任何 CPU,您可以遍歷程序標識符並taskset -p針對它們執行:

$ for pid in $(ps -a -o pid=); do taskset -pc $pid 2>/dev/null; done
pid 1803's current affinity list: 0-7
pid 1812's current affinity list: 0-7
pid 1986's current affinity list: 0-7
pid 2027's current affinity list: 0-7
pid 2075's current affinity list: 0-7
pid 2083's current affinity list: 0-7
pid 2122's current affinity list: 0-7
pid 2180's current affinity list: 0-7
pid 2269's current affinity list: 0-7
pid 2289's current affinity list: 0-7
pid 2291's current affinity list: 0-7
pid 2295's current affinity list: 0-7
pid 2300's current affinity list: 0-7
pid 2302's current affinity list: 0-7
pid 3872's current affinity list: 0-7
pid 4339's current affinity list: 0-7
pid 7301's current affinity list: 0-7
pid 7302's current affinity list: 0-7
pid 7309's current affinity list: 0-7
pid 13972's current affinity list: 0-7

首先打開終端並cat /proc/cpuinfo列出所有核心。核心 0 = 第一核心,核心 1 = 第二核心……

然後

CORENUM=0
ps -e -o pid,psr,cpu,cmd | grep -E  "^[[:space:]][[:digit:]]+[[:space:]]+${CORENUM}"

查看CORENUM=分配給它的核心 1(將 0 替換為所需的核心編號)。

引用自:https://unix.stackexchange.com/questions/425065