Евгений Ильин, Филипп Торчинский
Из листа простой бумаги,
Взявши ножницы и клей,
Если хватит вам отваги
Можно сделать пять рублей.
Из народного фольклора
Появившись всего несколько лет назад в Solaris, ныне DTrace «перебрался»
и на другие UNIX-системы. Более года назад был сделан порт для FreeBSD, чуть
позже для MacOS X и совсем недавно для QNX.
Таким образом, DTrace претендует на то, чтобы стать стандартным средством
трассировки для UNIX.
Почему же DTrace оказался настолько привлекательным? Во-первых, подавляющее
большинство аналогичных инструментов используют статический код, который,
будучи «вживлен» в ключевые места кода системы, позволяет отслеживать
ограниченное число событий при минимальном действии на систему. Такой подход
(реализованный, к примеру, в KLogger для Linux) позволяет даже довольно точно
оценивать накладные расходы, возникающие при использовании данного инструмента,
но ограничивает множество системных объектов, доступных для наблюдения. DTrace
позволяет существенно расширить «область видимости», используя как статические,
так и динамические методы инструментовки кода.
Во-вторых, DTrace позволяет получить информацию,
пожалуй, о всех составляющих системы. Скажем, утилита truss(1), как и DTrace,
тоже позволяет трассировать системные вызовы и сигналы, но ничего более. Для
того чтобы посмотреть статистику использования виртуальной памяти или ядра,
потребуются утилиты vmstat(1M) или kstat(1M) соответственно. DTrace же собирает
все эти утилиты «под одну крышу», попутно решая ещё одну проблему. Если ранее
при анализе необходимо было коррелировать вывод статистических утилит чуть ли
не «вручную», то теперь это можно запрограммировать в скрипте на D.
Конечно, этими двумя пунктами список не
ограничивается. Но раз уж речь зашла о truss(1), стоит упомянуть и о том, что
для сбора информации эта утилита пользуется файловой системой proc(4), которая
разрабатывалась для традиционных средств отладки. Поэтому зачастую для сбора
информации исследуемый процесс останавливается, далее снимается требуемая
информация о состоянии, и процесс запускается заново. Если ваш сервер
обслуживает биржевые операции, то я бы не советовал использовать такой метод
трассировки во время торгов. Что же предлагает DTrace, чтобы разобраться,
давайте поговорим...