я использую dtrace
профилировать программу C ++ (Это SRS в случае, если это имеет значение) на основе State Threads, подобная goroutine библиотека для написания параллельного кода C ++.
Команда, которую я использую:
dtrace -n 'profile-199 /pid == '$PID'/ { @[ustack(100)] = count(); } tick-15s { exit(0); }' -o $OUTPUT_FILE &>/dev/null
Результаты выборки и график пламени показывают, что большая часть процессорного времени расходуется на потоки состояний _st_kq_dispatch
функция и соответствующий стек вызовов
_st_kq_dispatch
_st_idle_thread_start
_st_thread_main
st_thread_create
st_usleep
...
который почти бесполезен, не раскрывая ничего о выполнении пользовательских функций. Однако, если профилируется с помощью встроенной в MacOS /usr/bin/sample
, результат, как и ожидалось. Так что не так с моим dtrace
использование здесь? Что особенного в «State Threads» делает его невозможным для профилирования dtrace
как и другие нормальные программы? (Кстати, защита целостности системы включена на моем macOS, это проблема?)
Задача ещё не решена.
Других решений пока нет …