Я запускаю многопоточную программу на своем 8-ядерном процессоре. top
команда показывает 8 запущенных процессов, каждый из которых использует ядро на 100%. Проблема в том, что только 21% отмечены как пользовательские ЦП и мое приложение работает так медленно:
Cpu(s): 20.6%us, 79.4%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Как я могу найти дополнительную информацию о системных процессах, которые занимают 79% процессорного времени? В частности, я хочу знать, что это за системные вызовы.
Заранее спасибо!
РЕДАКТИРОВАТЬ: Это то, что возвращает top:
top - 11:23:04 up 83 days, 1:20, 10 users, load average: 8.00, 8.00, 8.00
Tasks: 267 total, 10 running, 257 sleeping, 0 stopped, 0 zombie
Cpu(s): 40.6%us, 17.4%sy, 0.0%ni, 41.9%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 16324640k total, 5645008k used, 10679632k free, 285368k buffers
Swap: 2047992k total, 32064k used, 2015928k free, 4584140k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27262 ahmad 20 0 308m 32m 18m R 102.2 0.2 5022:32 Espresso
26872 ahmad 20 0 176m 12m 4540 R 100.0 0.1 5087:05 Espresso
27263 ahmad 20 0 175m 13m 4824 R 100.0 0.1 5022:35 Espresso
27265 ahmad 20 0 175m 12m 4508 R 100.0 0.1 5022:35 Espresso
26869 ahmad 20 0 308m 31m 18m R 98.3 0.2 5086:20 Espresso
26870 ahmad 20 0 175m 13m 4864 R 98.3 0.1 5087:05 Espresso
26871 ahmad 20 0 176m 12m 4592 R 98.3 0.1 5086:58 Espresso
27264 ahmad 20 0 176m 12m 4552 R 98.3 0.1 5022:06 Espresso
1 root 20 0 19404 1164 940 S 0.0 0.0 0:02.12 init
2 root 20 0 0 0 0 S 0.0 0.0 0:02.81 kthreadd
Это время, потраченное на выполнение кода ядра, но это не означает, что он был запущен системными вызовами. Например, это может быть время, потраченное на чтение больших каталогов, но также может быть время, потраченное на обработку iptables
правила, или что-то еще.
Вы можете установить соответствующий пакет (его можно назвать linux-tools-2.6
, но это зависит от вашего дистрибутива) и используйте perf top
чтобы посмотреть, какой код работает в ядре. Читать далее Вот около perf
.
Прежде всего. man top
вот несколько примеров
Использование ЦП от максимального к минимальному или наоборот SHIFT+r
Использование MEM SHIFT+m
k = kill a process by it's pid