Другим полезным подходом к мониторингу является использование ps
, отфильтрованного по процессам, которые используют ваши графические процессоры. Я часто этим пользуюсь:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Здесь будут показаны все процессы, использующие графические процессоры NVIDIA, и некоторые статистические данные о них. lsof ...
возвращает список всех процессов, используя графический процессор nvidia, принадлежащий текущему пользователю, и ps -p ...
показывает ps
результаты для этих процессов. ps f
показывает хорошее форматирование для отношений / иерархий дочерних / родительских процессов, а -o
указывает пользовательское форматирование. Это похоже на выполнение ps u
, но добавляет идентификатор группы процессов и удаляет некоторые другие поля.
Одним из преимуществ этого по сравнению с nvidia-smi
является то, что он будет отображать вилки процессов, а также основные процессы, использующие графический процессор.
Однако одним недостатком является то, что он ограничен процессами, принадлежащими пользователю, который выполняет команду. Чтобы открыть его для всех процессов, принадлежащих любому пользователю, я добавляю sudo
перед lsof
.
Наконец, я комбинирую его с watch
, чтобы получить непрерывное обновление. Итак, в итоге это выглядит так:
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
Который имеет вывод как:
Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvi... Mon Jun 6 14:03:20 2016
USER PGRP PID %CPU %MEM STARTED TIME COMMAND
grisait+ 27294 50934 0.0 0.1 Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941 0.0 0.0 Jun 02 00:00:00 \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6 1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428 6.9 0.5 14:02:09 00:00:04 \_ python -u process_examples.py
grisait+ 53596 33773 7.5 0.5 14:02:19 00:00:04 \_ python -u process_examples.py
grisait+ 53596 34174 5.0 0.5 14:02:30 00:00:02 \_ python -u process_examples.py
grisait+ 28205 28205 905 1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387 5.8 0.4 13:30:49 00:01:53 \_ python -u train.py
grisait+ 28205 28388 5.3 0.4 13:30:49 00:01:45 \_ python -u train.py
grisait+ 28205 28389 4.5 0.4 13:30:49 00:01:29 \_ python -u train.py
grisait+ 28205 28390 4.5 0.4 13:30:49 00:01:28 \_ python -u train.py
grisait+ 28205 28391 4.8 0.4 13:30:49 00:01:34 \_ python -u train.py