現在どのコアに固定されたプロセスがあるかを知る方法はありますか?
他のユーザーが実行するプロセスも出力にリストする必要があります。
または、プロセスをコアに固定しようとしましたが、目的のコアにすでにプロセスが固定されている場合は失敗する可能性がありますか?
PS:関心のあるプロセスは、特定のコアで現在実行されているだけでなく、指定されたコアにビンを固定する必要があります。
PS:これは重複ではありません。もう一つの質問は、プロセスがCPUを独占しているかどうかを確認する方法です。ここでは、プロセスが特定のコアに固定されているかどうかを検出する方法を尋ねます(つまり、使用方法ではなくcpusetを使用します)。
答え1
一般的な状況では、Linuxプロセスは指定されたコアに明示的に固定されず、通常はそうする理由はありませんが、可能です。
taskset
psフィールドとpsrフィールドを使用してプロセスの優先順位を管理したり、現在どのプロセスがどの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
答え2
まず、端末を開き、すべてのcat /proc/cpuinfo
コアを一覧表示します。コア0 = 最初のコア、コア1 = 2番目のコア...
それから
CORENUM=0
ps -e -o pid,psr,cpu,cmd | grep -E "^[[:space:]][[:digit:]]+[[:space:]]+${CORENUM}"
どのコア1が割り当てられているかを確認しますCORENUM=
(0を必要なコア番号に置き換えます).
答え3
現在割り当てられているvCPU
この-F
スイッチを使用すると、ps
プロセスが現在実行されているコア(vCPU)を確認できます。 PSR 列は次を示します。
$ man ps
...
psr PSR processor that process is currently assigned to.
...
たとえば、
$ ps -Fae | head
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 211946 655576 13 Oct17 ? 00:51:28 /usr/lib/systemd/systemd --system --deserialize 14
root 2 0 0 0 0 16 Oct17 ? 00:00:02 [kthreadd]
root 6 2 0 0 0 0 Oct17 ? 00:50:36 [ksoftirqd/0]
root 7 2 0 0 0 0 Oct17 ? 00:02:04 [migration/0]
root 8 2 0 0 0 0 Oct17 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 0 Oct17 ? 02:02:22 [rcu_sched]
root 10 2 0 0 0 5 Oct17 ? 00:00:00 [lru-add-drain]
root 11 2 0 0 0 0 Oct17 ? 00:00:10 [watchdog/0]
root 12 2 0 0 0 1 Oct17 ? 00:00:09 [watchdog/1]
top
フィールドを追加して、フィールドを使用して選択するのとP
同様の操作を実行できますf。
- P——最後に使用したCPU(SMP)
最後に使用されたプロセッサを表す数値。実際のSMP環境では、カーネルは意図的に弱い親和性を使用するため、これは頻繁に変更される可能性があります。さらに、トップ実行自体がこれらの弱い親和性を破り、より多くのプロセスがCPUをより頻繁に交換できるようにすることができます(CPU時間に対する追加の要求のため)。
たとえば、
Tasks: 623 total, 3 running, 620 sleeping, 0 stopped, 0 zombie
%Cpu(s): 8.7 us, 11.0 sy, 0.0 ni, 79.2 id, 0.1 wa, 0.0 hi, 1.0 si, 0.0 st
KiB Mem : 26397158+total, 18521476+free, 35842280 used, 42914536 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 22101484+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND P
2061 root 20 0 414648 15104 9068 S 38.6 0.0 2:06.82 sssd_be 2
58915 root 20 0 2366608 130232 12288 S 29.5 0.0 478:46.62 filebeat 15
4851 root 20 0 3740952 125192 18412 S 15.9 0.0 2944:25 metricbeat 4
104253 1007430+ 20 0 16.0t 2.0g 1.6g S 13.6 0.8 138:59.97 java 3
7617 root 20 0 5160288 399292 49324 S 11.4 0.2 12066:35 hyperkube 5
100062 1002840+ 20 0 52440 17892 3800 R 11.4 0.0 0:00.34 cub 8
100202 smingol+ 20 0 172872 2984 1712 R 11.4 0.0 0:00.09 top 8
112115 1007680+ 20 0 5747228 1.2g 23428 S 11.4 0.5 1457:10 java 11
2645 root 20 0 5425332 253544 18132 S 9.1 0.1 4549:50 dockerd-current 12
CPUの好み
プロセスが特定のvCPUと持つことができる相関関係に興味がある場合は、それを使用できますtaskset
。以下では、最初の例ではプロセス(sleep
)が特定のvCPUに接続されており、2番目の例ではすべてのvCPUで実行できることがわかります。
$ taskset -c 0,2,4,6 sleep 10000 &
[1] 119472
$ taskset -cp 119472
pid 119472's current affinity list: 0,2,4,6
$ sleep 10001 &
[2] 85436
$ taskset -cp 85436
pid 85436's current affinity list: 0-71
ボックス内のすべてのプロセスを表示するには:
$ ps -ae -o pid= | xargs -n 1 taskset -cp
pid 116921's current affinity list: 47
pid 117171's current affinity list: 0-71
pid 117189's current affinity list: 0-71
pid 117248's current affinity list: 36
pid 117665's current affinity list: 0-71
pid 117681's current affinity list: 10
pid 118635's current affinity list: 0-71
pid 118665's current affinity list: 0-71
pid 118873's current affinity list: 44
pid 119472's current affinity list: 0,2,4,6
...
引用する
答え4
私の答えは、Linux(およびMac用のhomebrew)パッケージhwlocのhwloc-bindです。参照。https://www.open-mpi.org/projects/hwloc/tutorials/20130115-ComPAS-hwloc-tutorial.pdf一部の文書の場合。