Как узнать, сколько переключений контекста делает процесс?
25
Я хочу видеть, делает ли мой процесс много переключений контекста. Я также хочу посмотреть, как управление группами задач влияет на количество переключений контекста.
Я попробовал приведенную выше команду наблюдения, но вывод всего 1 (для произвольного и непроизвольного переключения контекста). Моя версия linux kernal - 2.6.39-400.214.4.el6uek.x86_64. Зависит ли вывод от версии linux?
Энди Дюфрен
Пожалуйста, вставьте свой вывод здесь.
Это так же, как упомянуто в ответе - "смотреть -n.5 grep ctxt / proc / 5647 / status"
Энди Дюфрен
Я должен использовать procfs, но в старых ядрах нет значений внутри /proc/.../status. любое предложение ?
Массимо
12
pidstat (1) - сообщает статистику по задачам Linux. По словам man pidstatэто так просто, как простоpidstat -w …
Я выполнил команду «watch -n0.5 pidstat -w -I -p 5876», но вывел 0 (для обоих cswch / s nvcswch / s). Эта команда работает для версии Linux - 2.6.39-400.214.4.el6uek.x86_64?
Энди Дюфрен
Эта команда должна работать просто отлично. Но берегитесь вы используете это неправильно , потому что , когда вы не задаете интервал отчета «задачи статистики должны представляться в течение времени с момента запуска системы (загрузки).» Похоже на vmstat, iostatи другие. Поэтому, если вам нужна текущая статистика, вместо того watch, чтобы просто запустить ее с интервалом в одну секунду.
Poige
Если я не смотрю, как я вижу, что числа постоянно обновляются? При выполнении команды "pidstat -w -I -p 5876 5" команда просто ждет 5 секунд, а затем печатает вывод (снова как 0). Он не работает непрерывно, как я ожидал (я знаю, что это противоречит тому, что написано на странице руководства pidstat - linux.die.net/man/1/pidstat ). Моя ОС - Oracle Linux Server 6.4.
Энди Дюфрен
Работает ли у вас `pidstat -w -l -p SELF 1`?
Пой
4
Чтобы получить запись всего процесса, вы можете использовать timeутилиту GNU (не путайте ее со bashвстроенной) с -vопцией. Вот пример с удаленными несвязанными строками вывода:
$ `which time`-v ls
a.out exception_finder.cpp log.txt
Command being timed:"ls"...Voluntary context switches:1Involuntary context switches:2...Exit status:0
Вы можете использовать sar -w. Например, sar -w 1 3сообщает общее количество переключений контекста в секунду за каждые 1 секунду в общей сложности 3 раза.
Это не работает "из коробки" на многих системах, даже если команда доступна. Можете ли вы включить в свой ответ, как включить сбор данных для sar?
Энтон
2
Запишите следующий скрипт в file ( ctx.sh). При этом ctx.sh <core>вы увидите все процессы, запущенные на данном ядре, и измененные переключатели nv-контекста будут выделены. Глядя на это, вы сможете определить, какие процессы конкурируют за ядро.
Посмотрите man getrusage, который позволит вам запросить количество добровольных и недобровольных переключений контекста.
struct rusage {
struct timeval ru_utime;/* user CPU time used */
struct timeval ru_stime;/* system CPU time used */
long ru_maxrss;/* maximum resident set size */
long ru_ixrss;/* integral shared memory size */
long ru_idrss;/* integral unshared data size */
long ru_isrss;/* integral unshared stack size */
long ru_minflt;/* page reclaims (soft page faults)*/
long ru_majflt;/* page faults (hard page faults)*/
long ru_nswap;/* swaps */
long ru_inblock;/* block input operations */
long ru_oublock;/* block output operations */
long ru_msgsnd;/* IPC messages sent */
long ru_msgrcv;/* IPC messages received */
long ru_nsignals;/* signals received */
long ru_nvcsw;/* voluntary context switches */
long ru_nivcsw;/* involuntary context switches */};
Вы можете сказать это, чтобы сообщить информацию для потока, как это:
/proc/[pid]/status
Ответы:
Вы можете просмотреть информацию о переключениях контекста вашего процесса в
/proc/<pid>/status
.Чтобы эти числа постоянно обновлялись, запустите
Чтобы получить только цифры, запустите
источник
pidstat (1) - сообщает статистику по задачам Linux. По словам
man pidstat
это так просто, как простоpidstat -w …
источник
vmstat
,iostat
и другие. Поэтому, если вам нужна текущая статистика, вместо тогоwatch
, чтобы просто запустить ее с интервалом в одну секунду.Чтобы получить запись всего процесса, вы можете использовать
time
утилиту GNU (не путайте ее соbash
встроенной) с-v
опцией. Вот пример с удаленными несвязанными строками вывода:источник
Вы можете использовать
sar -w
. Например,sar -w 1 3
сообщает общее количество переключений контекста в секунду за каждые 1 секунду в общей сложности 3 раза.источник
sar
?Запишите следующий скрипт в file (
ctx.sh
). При этомctx.sh <core>
вы увидите все процессы, запущенные на данном ядре, и измененные переключатели nv-контекста будут выделены. Глядя на это, вы сможете определить, какие процессы конкурируют за ядро.источник
Посмотрите man getrusage, который позволит вам запросить количество добровольных и недобровольных переключений контекста.
Вы можете сказать это, чтобы сообщить информацию для потока, как это:
Просто позвоните дважды, до и после критического раздела, и посмотрите, увеличилось или нет значение use.ru_nivcsw.
источник
источник