Как определить, где код проводит много времени в пространстве ядра (системные вызовы)

Я заметил, что 10% моего запуска кода занимает системное пространство. Однако я НЕ знаю, какие системные вызовы. Однако я подозреваю, что это либо файлы, либо временные метки.

Есть ли инструмент, чтобы выяснить, какие системные вызовы являются виновниками? Кроме того, я хочу знать частоту (и местонахождение) звонков (и вызываемого абонента).

I am on AS3

спасибо


person vehomzzz    schedule 19.10.2009    source источник
comment
ОПЕРАЦИОННЫЕ СИСТЕМЫ? Виды доступных вам инструментов профилирования сильно различаются в зависимости от ОС.   -  person JSBձոգչ    schedule 19.10.2009


Ответы (6)


И strace, и truss помогут вам увидеть, какие системные вызовы занимают время. Две полезные опции для strace:

  1. -T, чтобы показать время, потраченное на каждый системный вызов,
  2. -c для суммирования количества системных вызовов, вызовов и ошибок в виде таблицы.

Хотя эти два варианта взаимоисключающие.

Вам может понадобиться инструмент для полного профилирования системы, позволяющий более подробно профилировать ядро. DTrace, вероятно, лучше всего подходит для вашей платформы.

По платформе, вот несколько вариантов:

DTrace может даже помочь вам профилировать ваш код C/C++ с помощью поставщика pid, например. см. здесь.

person Emil Sit    schedule 19.10.2009

Если вы работаете в Linux, посмотрите на strace.

Если вы используете один из других Unix-серверов, посмотрите, доступен ли truss.

person Rob Wells    schedule 19.10.2009

Если она есть в вашей системе, то команда truss должна делать то, что вы хотите.

person Jackson    schedule 19.10.2009

Если это 10%, то попробуйте это метод для 30 образцов. Вы увидите точные вызовы примерно на 3 образцах, может быть, на 2, может быть, на 4.

person Mike Dunlavey    schedule 19.10.2009

Опять же, в Linux вы можете попробовать профайлер oprofile. Убедитесь, что у вас есть символы отладки, доступные для libc и ядра (многие дистрибутивы имеют их в отдельных пакетах). Он профилирует целые системы, а не (только) отдельные процессы. Я получил от него ценную информацию.

person ariels    schedule 19.10.2009

В Solaris вы можете использовать dtrace.

person Howard Hong    schedule 29.11.2009