Как проверить, вытесняется ли мой процесс ядром и как часто?

Как проверить, вытесняется ли мой процесс ядром и как часто?

Для профилирования программы я хотел бы запустить ее без прерываний на одном процессоре. Для этого я использую комбинацию 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% своего времени на выполнение кода ядра.

Обеспечение того, чтобы определенный процесс получал как можно больше внимания центрального процессора, может оказаться довольно сложной задачей.Документация по настройке бенчмарка Виктора Стиннерадает хороший обзор проблем и методов их решения; его работа сосредоточена на сравнительном анализе, но большая ее часть применима и в других обстоятельствах.

Связанный контент