Linux: 어떤 프로세스가 어떤 코어에 고정되어 있는지 어떻게 알 수 있나요?

Linux: 어떤 프로세스가 어떤 코어에 고정되어 있는지 어떻게 알 수 있나요?

현재 어떤 코어에 고정된 프로세스가 있는지 알 수 있는 방법이 있나요?

다른 사용자가 실행하는 프로세스도 출력에 나열되어야 합니다.

또는 프로세스를 코어에 고정하려고 시도했지만 원하는 코어에 이미 프로세스가 고정되어 있으면 실패할 수 있습니까?

추신: 관심 있는 프로세스는 주어진 코어에서 현재 실행 중일 뿐만 아니라 지정된 코어에 bin을 고정해야 합니다.

추신: 이것은 중복이 아닙니다. 또 다른 질문은 프로세스가 CPU를 독점하는지 확인하는 방법입니다. 여기서 우리는 프로세스가 주어진 코어에 고정되어 있는지 여부를 감지하는 방법을 묻습니다(즉, 사용 방법이 아니라 cpuset을 사용함).

답변1

일반적인 상황에서 Linux 프로세스는 지정된 코어에 명시적으로 고정되지 않으며 일반적으로 그렇게 할 이유가 없지만 가능합니다.

tasksetps 및 "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 = 두 번째 코어...

그 다음에

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.

  1. P——마지막으로 사용한 CPU(SMP)

마지막으로 사용된 프로세서를 나타내는 숫자입니다. 실제 SMP 환경에서는 커널이 의도적으로 약한 친화력을 사용하기 때문에 이는 자주 변경될 수 있습니다. 또한, top 실행 자체가 이러한 약한 친화력을 깨고 더 많은 프로세스가 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에 연결되었고 두 번째 예에서는 모든 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일부 문서의 경우.

관련 정보