Linux: как узнать, какие процессы привязаны к какому ядру?

Чтение страницы руководства bash дает следующую информацию:

for ((expr1; expr2; expr3)) ; сделать список; done

Сначала арифметическое выражение expr1 вычисляется в соответствии с правилами, описанными ниже в разделе «АРИФМЕТИЧЕСКАЯ ОЦЕНКА». [...]

и затем мы получаем этот раздел

АРИФМЕТИЧЕСКАЯ ОЦЕНКА

Оболочка позволяет вычислять арифметические выражения при определенных обстоятельствах (см. let и объявить встроенные команды и арифметическое расширение). Оценка выполняется в целых числах фиксированной ширины без проверки переполнения [...]

Таким образом, ясно видно, что вы не можете использовать цикл for с нецелочисленными значениями. .

Одним из решений может быть простое умножение всех компонентов цикла на 100, что позволяет использовать их в дальнейшем, например:

for ((k=400;k<542;k+=2))
do
    i=$(bc <<<"scale=2; $k / 100" )    # when k=402 you get i=4.02, etc.
    ...
done

3
06.11.2019, 04:02
3 ответа

Primero abra la terminal y haga cat /proc/cpuinfopara listar todos los núcleos. Núcleo 0 = 1.er núcleo, Núcleo 1 = 2.º núcleo...

Entonces

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

para ver qué tiene el núcleo 1 (, reemplace 0 en CORENUM=con el número de núcleo deseado )asignado.

1
27.01.2020, 21:11

En circunstancias normales, los procesos de Linux no se anclan explícitamente a un núcleo determinado; por lo general, no hay razón para hacerlo, pero es posible.

Puede administrar la afinidad de los procesos usando taskseto ver qué proceso se ejecuta en qué CPU en el instante presente usando ps con el campo 'psr'.

Comprobar la afinidad de CPU actual del proceso 27395:

$ ps -o psr 27395
PSR
  6

Verifique la lista de afinidad del proceso 27395:

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

Establecer afinidad del proceso 27395 a la CPU 3

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

Comprobar la afinidad de CPU actual del proceso 27395:

$ ps -o psr 27395
PSR
  3

Para verificar si algún proceso está anclado a cualquier CPU, puede recorrer los identificadores de su proceso y ejecutar taskset -pcontra ellos:

$ 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
17
27.01.2020, 21:11

Текущий назначенный виртуальный ЦП

Вы можете использовать переключатель -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 -- Last used CPU (SMP)

A number representing the last used processor. In a true SMP environment this will likely change frequently since the kernel intentionally uses weak affinity. Also, the very act of running top may break this weak affinity and cause more processes to change CPUs more often (because of the extra demand for cpu time).

Например,.:

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

Привязка ЦП

Если вас больше интересует привязка процесса к конкретному виртуальному ЦП, вы можете использовать для этого taskset. Ниже мы видим процесс (sleep), который был привязан к конкретным vCPU в 1-м примере и разрешен для запуска на любом во 2-м:

$ 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
...

Ссылки

1
27.01.2020, 21:11

Теги

Похожие вопросы