
Я исследую производительность многопоточного сервера базы данных. Есть определенная рабочая нагрузка, которая выполняется примерно за 61 секунду на определенной машине. PID процесса базы данных был 79894, когда я запустил perf против рабочей нагрузки.
В дополнение к потокам программного обеспечения на сервере базы данных, есть ряд потоков, связанных с Linux, которые обычно бездействуют в бездействующей системе, и которые становятся активными во время выполнения моей рабочей нагрузки. Таким образом, я хочу использовать опцию -a perf, а также опцию -p.
Я запускаю perf двумя способами и получаю несколько разные результаты каждым способом.
Первые способы, которыми я запускаю следующую команду perf в одном окне
perf stat -p 2413 -a
и немедленно запустить рабочую нагрузку базы данных в другом окне. Когда рабочая нагрузка базы данных заканчивается, я контролирую C из perf и получаю следующие результаты
Performance counter stats for process id '79894':
1,842,359.55 msec cpu-clock # 30.061 CPUs utilized
3,798,673 context-switches # 0.002 M/sec
153,995 cpu-migrations # 0.084 K/sec
16,038,992 page-faults # 0.009 M/sec
4,939,131,149,436 cycles # 2.681 GHz
3,924,220,386,428 stalled-cycles-frontend # 79.45% frontend cycles idle
3,418,137,943,654 instructions # 0.69 insn per cycle
# 1.15 stalled cycles per insn
402,389,588,237 branches # 218.410 M/sec
5,137,510,170 branch-misses # 1.28% of all branches
61.28834199 seconds time elapsed
Второй способ — запустить
perf stat -a sleep 61
в одном окне и немедленно запустить рабочую нагрузку базы данных в другом окне. Через 61 секунду и perf, и рабочая нагрузка завершаются, и perf выдает следующие результаты
Performance counter stats for 'system wide':
4,880,317.67 msec cpu-clock # 79.964 CPUs utilized
8,274,996 context-switches # 0.002 M/sec
202,832 cpu-migrations # 0.042 K/sec
14,605,246 page-faults # 0.003 M/sec
5,022,298,186,711 cycles # 1.029 GHz
7,599,517,323,727 stalled-cycles-frontend # 151.32% frontend cycles idle
3,421,512,233,294 instructions # 0.68 insn per cycle
# 2.22 stalled cycles per insn
402,726,487,019 branches # 82.521 M/sec
5,124,543,680 branch-misses # 1.27% of all branches
61.031494851 seconds time elapsed
Поскольку я использовал -a в обеих версиях, я ожидал получить примерно одинаковые результаты.
Но со сном,
cpu-clock is 2.5 times what you get with the -p version,
context-switches are double what you get with the -p version
and the other values are more or less the same
Итак, 2 вопроса:
(1) which set of results do I believe?
and
(2) how can there be more stalled-cycles-frontend than cycles in the sleep version?