
Для профилирования программы я хотел бы запустить ее без прерываний на одном процессоре. Для этого я использую комбинацию taskset
и chrt
:
# taskset -c 1 chrt -f 99 ./my_program
Теперь мой вопрос заключается в том, существует ли инструмент, позволяющий мне проверить, прерывается ли процесс переключениями контекста в ядре и как часто это происходит.
решение1
Вы можете использоватьperf
; например,
perf stat -e context-switches,cpl_cycles.ring0,cpl_cycles.ring123 your_command
создаст резюме, похожее на
Performance counter stats for 'your_command':
1 context-switches
11,890,096 cpl_cycles.ring0
9,980,265 cpl_cycles.ring123
0.011218937 seconds time elapsed
0.007533000 seconds user
0.003766000 seconds sys
что показывает, что во время выполнения произошло одно переключение контекста (на другой процесс, не ядро) your_command
, и процессор потратил 54% своего времени на выполнение кода ядра.
Обеспечение того, чтобы определенный процесс получал как можно больше внимания центрального процессора, может оказаться довольно сложной задачей.Документация по настройке бенчмарка Виктора Стиннерадает хороший обзор проблем и методов их решения; его работа сосредоточена на сравнительном анализе, но большая ее часть применима и в других обстоятельствах.