Я пытаюсь понять, как измерить производительность, и решил написать очень простую программу:
section .text
global _start
_start:
mov rax, 60
syscall
И я запускал программу с помощью perf stat ./bin
. Я был удивлен тем, что stalled-cycles-frontend
был слишком высоким.
0.038132 task-clock (msec) # 0.148 CPUs utilized
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
2 page-faults # 0.052 M/sec
107,386 cycles # 2.816 GHz
81,229 stalled-cycles-frontend # 75.64% frontend cycles idle
47,654 instructions # 0.44 insn per cycle
# 1.70 stalled cycles per insn
8,601 branches # 225.559 M/sec
929 branch-misses # 10.80% of all branches
0.000256994 seconds time elapsed
Как я понимаю stalled-cycles-frontend
, это означает, что передняя панель процессора должна ждать завершения некоторой операции (например, bus-transaction).
Итак, что привело к тому, что фронт процессора ожидал большую часть времени в этом простейшем случае?
И ошибки 2 страницы? Зачем? Я не читаю страницы памяти.