Как получить показатели загрузки потокового процессора в Redhat Linux - PullRequest
6 голосов
/ 19 апреля 2009

Мне нужно получить показатели загрузки ЦП для всех потоков в процессе.

  • Операционная система = Redhat Linux
  • язык программирования = C ++ с использованием POSIX
  • требования = необходимо отбирать пробы каждые несколько секунд, а не только для одного снимка во времени.
  • ограничений = запрещено писать дополнительный код в потоке

    Я знаю, что вы можете использовать команду "top", но какие еще есть способы? Есть ли флаг для "ps"?

Заранее благодарю за помощь.

Ответы [ 4 ]

6 голосов
/ 19 апреля 2009

Вы можете прочитать содержимое /proc/[your PID]/stat, чтобы получить информацию для всего процесса, и если у вас ядро ​​2.6, есть также /proc/[your PID]/task/[thread ID]/stat с информацией для отдельных потоков. (см. здесь )

В частности, вы найдете эти два поля:

Количество случаев, когда этот процесс был запланирован в пользовательском режиме.

stime% lu

Количество jiffies, что этот процесс был запланирован в режиме ядра.

cutime% ld

Проблемная часть здесь - это единица измерения значений. Jiffy равен 1 / HZ секундам, где HZ - тактовая частота ядра, и определение этой тактовой частоты является сложной частью.

Если вам это нужно только для одной конкретной системы, вы можете просто провести несколько тестов или просмотреть заголовки ядра и жестко запрограммировать это значение в своей программе. Если вы хотите узнать, как определить его в более общем виде, вы можете посмотреть, как это делает инструмент типа top, посмотрев его исходный код (см. Функцию old_Hertz_hack() и соответствующие комментарии. )

1 голос
/ 17 октября 2011

Возможно, более простой способ сделать это - использовать getrusage с конкретным расширением linux RUSAGE_THREAD. Если у вас есть эти времена, вы можете просто вычесть время последней выборки и поделить на реальное время, прошедшее с момента последней выборки. То есть вы получаете загрузку процессора в процентах.

Специальную документацию по Linux см. На справочной странице rusage liunx .

0 голосов
/ 18 августа 2016

вы можете использовать команду "top", чтобы сначала найти идентификатор процесса.

После этого вы можете использовать следующую команду, чтобы отобразить только использование процессора / памяти для процесса

top -p {pid}

После этого вы можете нажать «Shift» + «h», чтобы показать темы

0 голосов
/ 19 апреля 2009

Вы можете сделать это с помощью gnu gprof , который доступен в Linux. Я считаю, что они утверждают, что поддерживают многопоточность, но это сложнее, чем профилирование на уровне процессов, поэтому вы можете не получить желаемых результатов.

Вот Howto для вашей ситуации.

...