В Linux последнее значение счетчика программных средств (основного потока) представлено в /proc/$PID/stat
. Это, по-видимому, простой и простой способ сделать некоторые выборочные профилирования без необходимости каким-либо образом использовать программу.Использование/proc/*/stat для профилирования
Мне интересно, если это имеет какие-либо оговорки, когда дело доходит до качества выборки. Я предполагаю, что это значение обновляется всякий раз, когда процесс истекает из его таймлиса, который должен происходить с полными случайными интервалами в программном коде и что образцы, взятые с длиной, превышающей длину времени, должны быть равномерно распределены в случайном порядке в зависимости от того, где программа фактически тратит свое время. Но это всего лишь предположение, и я понимаю, что это может быть неправильно в любом количестве способов.
Кто-нибудь знает?
О, я очень согласен с тем, что ручная выборка с отладчиком часто самая приятная, но моя проблема в том, что я пытаюсь профилировать программу с программным обеспечением реального времени с кодом LLVM-JIT, что заставляет gdb принимать ~ 1 секунду (для чтения таблиц символов, созданных JIT), что нарушает ограничения в реальном времени. Поэтому я пытаюсь найти различные способы его отбора. :) – Dolda2000
@ Dolda2000: Мысли: 1) Можете ли вы запустить все это под отладчиком, так что заплатите стоимость таблицы символов раньше? 2) Можете ли вы запустить его, не дожидаясь внешних событий?- если там есть какая-то потеря, это должно разоблачить его. 3) По моему опыту, это неважно, сколько времени требуется * после того, как я прервал его. Я могу весь день изучить его. Важно то, что само прерывание происходит в то время, когда программа непредсказуема, поэтому будет видно, что потеря будет в той степени, в которой требуется время. –
Все остальное в стороне, я просто хотел бы сказать, что меня будет интересовать фактический ответ на вопрос, поскольку это поможет мне решить, когда и какие ситуации значение EIP из '/ proc/*/stat' может быть полезным. Но да, как и для 1) и 3), тогда проблема в том, что время для меня прерывать программу, печатать стеклу и возобновлять ее также занимает около секунды (преимущество вызова 'gdb' заново - это то, что я могу дать это опции '-batch -ex'). Если есть способ исправить это, это тоже будет очень интересно. Что касается 2), мне нужно запустить программу «в производстве», чтобы результаты были значимыми. – Dolda2000