DTrace
DTrace — фреймворк динамической трассировки, созданный компанией Sun Microsystems, предназначенный для отладки ядра и приложений в реальном времени. Изначально DTrace был создан для Solaris, затем был открыт под лицензией Common Development and Distribution Licence (CDDL) и портирован на ряд Unix-подобных систем.
DTrace может использоваться для наблюдения за количеством потребляемой памяти, процессорным временем, файловыми системами и сетевыми ресурсами, используемыми активными процессами, на работающей системе. Также можно получить более детальную информацию, например, список аргументов, с которыми вызывается каждая функция, или список процессов, использующих определённый файл.
Сценарии трассировки разрабатываются на специализированном языкеязыках программирования: Си, C++, Java, Erlang, JavaScript, Perl, PHP, Python, Ruby, Tcl, распознавая вызовы функций и исходные контексты вызовов. Ряд Unix-программ поддерживают DTrace, обеспечивая отслеживание операций и системных вызовов, в частности, специальные DTrace-провайдеры разработаны для СУБД MySQL, PostgreSQL, Oracle Database, грид-платформы Univa Grid Engine, браузера Firefox.
. Инструмент поддерживает взаимодействие с кодом, сгенерированным для программ, написанным на следующихИнструмент безопасен для использования в работающей среде: во время тестирования почти не происходит снижения производительности.
Язык сценариев
[править | править код]Сценарии трассировки записываются на специально разработанном для инструмента языке D с си-подобным синтаксисом и оснащённый готовыми функциями и переменными, специфическими для трассировки[1]. Программы на D по структуре напоминают программы awk; они включают список датчиков (англ. probe), которым соответствуют действия. При удовлетворении определённому условию датчик срабатывает и выполняется соответствующее действие. Условием может являться, например, открытие определённого файла, запуск процесса или исполнение определённой строки кода. Существует возможность передавать информацию от одного датчика другому.
Поскольку инструмент обеспечивает отслеживание с минимальными накладными издержками, одновременно могут быть запущены десятки тысяч датчиков, новые датчики могут быть созданы динамически.
Примеры использования
[править | править код]Сценарии DTrace могут быть запущены из командной строки, используя один или более датчиков в качестве аргументов. Примеры:
# New processes with arguments, dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }' # Files opened by process, dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }' # Syscall count by program, dtrace -n 'syscall:::entry { @num[execname] = count(); }' # Syscall count by syscall, dtrace -n 'syscall:::entry { @num[probefunc] = count(); }' # Syscall count by process, dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }' # Disk size by process, dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }' # Pages paged in by process, dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'
Поддерживаемые платформы
[править | править код]DTrace был представлен в ноябре 2003 года и был официально выпущен как часть операционной системы Solaris 10 в январе 2005 года. Стал первым компонентом проекта OpenSolaris, исходный код которого выпущен под лицензией Common Development and Distribution License (CDDL).
В начале 2009 года DTrace был портирован во FreeBSD (версия 7.1).
Apple добавила поддержку DTrace в Mac OS X 10.5 «Leopard», включая графическую программу Instruments. В отличие от других платформ, в Mac OS X существует флаг (P_LNOATTACH), установка которого делает невозможным трассировку процессов такими средствами как DTrace или gdb. Изначально это создавало проблемы, так как в результате применения этого флага не могла тестироваться другая системная информация. Эта проблема была решена через несколько месяцев в обновлении Mac OS X 10.5.3.
Сообщалось о портировании DTrace на QNX 7.
Из-за лицензии CDDL, несовместимой с GPL, портирование в Linux возможно, но не легитимно. Для Linux разрабатывается утилита с близкой функциональностью под названием SystemTap на основе механизма инструментирования kprobes. Тем не менее, Oracle добавил бета-версию DTrace в Oracle Linux в 2011 году[2], в декабре 2012 года выпущена стабильная версия, инструмент доступен в составе ядра Unbreakable Enterprise Kernel (начиная со второго выпуска), при этом модуль ядра DTrace сохранил лицензию CDDL[3].
Примерные аналоги
[править | править код]Microsoft WPP/ETW, поддерживается от Windows Vista.
Технология разработана на основе WMI, в первую очередь событий WMI, и не более чем упрощает написание кода, возбуждающего данные события.
Исходные файлы с вызовами, возбуждающими события, должны обрабатываться неким препроцессором, который вынесет все строки формата (вызов возбуждения события похож на printf()) в отдельный бинарный файл (.TMF), оставив в переработанном исходном коде только параметры вызовов.
Без наличия TMF-файла для компоненты приложение-потребитель видит только номера событий и их параметры, но не текстовые описания.
Это сильно улучшает производительность системы. Также технология не приводит к снижению производительности в случае, если нет приложения-потребителя.
По состоянию на середину 2010-х годов Microsoft не опубликовал TMF-файлы ни к одному стандартному компоненту Windows, за исключением NDIS (опубликовано около конца 2010).
Примечания
[править | править код]- ↑ Это специальный предметно-ориентированный язык, созданный для DTrace, не имеющий ничего общего с языком программирования D общего назначения
- ↑ trying out dtrace . Дата обращения: 10 декабря 2012. Архивировано 18 апреля 2015 года.
- ↑ DTrace on Linux . Дата обращения: 10 декабря 2012. Архивирован�� из оригинала 7 июля 2014 года.
Ссылки
[править | править код]На английском
[править | править код]- DLight Tutorial (недоступная ссылка) — DLight is an interactive graphical observability tool for C/C++ developers based on DTrace technology from the Oracle Solaris Studio
- Exploring Leopard with DTrace — how to use DTrace for debugging and exploration
- Google Tech Talk on DTrace given by Bryan Cantrill
На русском
[править | править код]- Статьи про DTrace на sunhelp.ru
- Инновационные технологии OpenSolaris — Глава 12: DTrace
- Инновационные технологии OpenSolaris — Глава 13: DTrace для разработчиков