DTrace: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
мНет описания правки |
РобоСтася (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 2: | Строка 2: | ||
'''DTrace''' — [[фреймворк]] динамической [[трассировка (программирование)|трассировки]], созданный компанией [[Sun Microsystems]], предназначенный для отладки [[Ядро операционной системы|ядра]] и приложений в реальном времени. Изначально DTrace был создан для [[Solaris]], затем был открыт под лицензией [[Common Development and Distribution Lisence|Common Development and Distribution Licence]] (CDDL) и портирован на ряд [[UNIX-подобная операционная система|Unix-подобных]] систем. |
'''DTrace''' — [[фреймворк]] динамической [[трассировка (программирование)|трассировки]], созданный компанией [[Sun Microsystems]], предназначенный для отладки [[Ядро операционной системы|ядра]] и приложений в реальном времени. Изначально DTrace был создан для [[Solaris]], затем был открыт под лицензией [[Common Development and Distribution Lisence|Common Development and Distribution Licence]] (CDDL) и портирован на ряд [[UNIX-подобная операционная система|Unix-подобных]] систем. |
||
DTrace может использоваться для наблюдения за количеством потребляемой памяти, [[Процессорное время|процессорным временем]], файловыми системами и сетевыми ресурсами, используемыми активными процессами, на работающей системе. Также можно получить более детальную информацию, например, список аргументов, с которыми вызывается каждая функция, или список процессов, использующих определённый файл. |
DTrace может использоваться для наблюдения за количеством потребляемой памяти, [[Процессорное время|процессорным временем]], [[Файловая система|файловыми системами]] и сетевыми ресурсами, используемыми активными процессами, на работающей системе. Также можно получить более детальную информацию, например, список аргументов, с которыми вызывается каждая функция, или список процессов, использующих определённый файл. |
||
Сценарии трассировки разрабатываются на специализированном языке{{Переход|#Язык сценариев}}. Инструмент поддерживает взаимодействие с кодом, сгенерированным для программ, написанным на следующих языках программирования: [[Си (язык программирования)|Си]], [[C++]], [[Java]], [[Erlang]], [[JavaScript]], [[Perl]], [[PHP]], [[Python]], [[Ruby]], [[Tcl]], распознавая вызовы функций и исходные контексты вызовов. Ряд Unix-программ поддерживают DTrace, обеспечивая отслеживание операций и системных вызовов, в частности, специальные DTrace-провайдеры разработаны для СУБД [[MySQL]], [[PostgreSQL]], [[Oracle Database]], грид-платформы [[Univa Grid Engine]], браузера [[Firefox]]. |
Сценарии трассировки разрабатываются на специализированном языке{{Переход|#Язык сценариев}}. Инструмент поддерживает взаимодействие с кодом, сгенерированным для программ, написанным на следующих [[Язык программирования|языках программирования]]: [[Си (язык программирования)|Си]], [[C++]], [[Java]], [[Erlang]], [[JavaScript]], [[Perl]], [[PHP]], [[Python]], [[Ruby]], [[Tcl]], распознавая вызовы функций и исходные контексты вызовов. Ряд Unix-программ поддерживают DTrace, обеспечивая отслеживание операций и системных вызовов, в частности, специальные DTrace-провайдеры разработаны для СУБД [[MySQL]], [[PostgreSQL]], [[Oracle Database]], грид-платформы [[Univa Grid Engine]], браузера [[Firefox]]. |
||
Инструмент безопасен для использования в работающей среде: во время тестирования почти не происходит снижения производительности. |
Инструмент безопасен для использования в работающей среде: во время тестирования почти не происходит снижения производительности. |
||
== Язык сценариев == |
== Язык сценариев == |
||
Сценарии трассировки записываются на специально разработанном для инструмента языке '''''D''''' с [[C-подобный синтаксис|си-подобным синтаксисом]] и оснащённый готовыми функциями и переменными, специфическими для трассировки<ref>Это специальный [[предметно-ориентированный язык]], созданный для DTrace, не имеющий ничего общего с [[D (язык программирования)|языком программирования D]] общего назначения</ref>. Программы на D по структуре напоминают программы [[awk]]; они включают список датчиков ({{lang-en|probe}}), которым соответствуют действия. При удовлетворении определённому условию датчик срабатывает и выполняется соответствующее действие. Условием может являться, например, открытие определённого файла, запуск процесса или исполнение определённой строки кода. Существует возможность передавать информацию от одного датчика другому. |
Сценарии трассировки записываются на специально разработанном для инструмента языке '''''D''''' с [[C-подобный синтаксис|си-подобным синтаксисом]] и оснащённый готовыми функциями и переменными, специфическими для трассировки<ref>Это специальный [[предметно-ориентированный язык]], созданный для DTrace, не имеющий ничего общего с [[D (язык программирования)|языком программирования D]] общего назначения</ref>. Программы на D по структуре напоминают программы [[awk]]; они включают список датчиков ({{lang-en|probe}}), которым соответствуют действия. При удовлетворении определённому условию [[датчик]] срабатывает и выполняется соответствующее действие. Условием может являться, например, открытие определённого файла, запуск процесса или исполнение определённой строки кода. Существует возможность передавать информацию от одного датчика другому. |
||
Поскольку инструмент обеспечивает отслеживание с минимальными накладными издержками, одновременно могут быть запущены десятки тысяч датчиков, новые датчики могут быть созданы динамически. |
Поскольку инструмент обеспечивает отслеживание с минимальными накладными издержками, одновременно могут быть запущены десятки тысяч датчиков, новые датчики могут быть созданы динамически. |
||
Строка 20: | Строка 20: | ||
# Files opened by process, |
# Files opened by process, |
||
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }' |
dtrace -n 'syscall::open*:entry { [[printf]]("%s %s",execname,copyinstr(arg0)); }' |
||
# Syscall count by program, |
# Syscall count by program, |
||
Строка 38: | Строка 38: | ||
== Поддерживаемые платформы == |
== Поддерживаемые платформы == |
||
DTrace был представлен в ноябре 2003 года и был официально выпущен как часть операционной системы [[Solaris 10]] в январе 2005 года. Стал первым компонентом проекта [[OpenSolaris]], исходный код которого выпущен под лицензией Common Development and Distribution License ([[CDDL]]). |
DTrace был представлен в ноябре 2003 года и был официально выпущен как часть операционной системы [[Solaris 10]] в январе 2005 года. Стал первым компонентом проекта [[OpenSolaris]], [[исходный код]] которого выпущен под лицензией Common Development and Distribution License ([[CDDL]]). |
||
В начале 2009 года DTrace был портирован во [[FreeBSD]] (версия 7.1). |
В начале 2009 года DTrace был портирован во [[FreeBSD]] (версия 7.1). |
||
Строка 46: | Строка 46: | ||
Сообщалось о портировании DTrace на [[QNX]] 7. |
Сообщалось о портировании DTrace на [[QNX]] 7. |
||
Из-за лицензии CDDL, несовместимой с GPL, [[Портирование программного обеспечения|портирование]] в Linux возможно, но не [[Легитимность|легитимно]]. Для Linux разрабатывается утилита с близкой функциональностью под названием [[SystemTap]] на основе механизма инструментирования [[kprobes]]. Тем не менее, [[Oracle]] добавил бета-версию DTrace в [[Oracle Linux]] в 2011 году<ref> |
Из-за лицензии CDDL, несовместимой с [[GNU General Public License|GPL]], [[Портирование программного обеспечения|портирование]] в Linux возможно, но не [[Легитимность|легитимно]]. Для Linux разрабатывается [[утилита]] с близкой функциональностью под названием [[SystemTap]] на основе механизма инструментирования [[kprobes]]. Тем не менее, [[Oracle]] добавил бета-версию DTrace в [[Oracle Linux]] в 2011 году<ref>{{Cite web |url=http://blogs.oracle.com/wim/entry/trying_out_dtrace |title=trying out dtrace |access-date=2012-12-10 |archive-date=2015-04-18 |archive-url=https://web.archive.org/web/20150418001718/https://blogs.oracle.com/wim/entry/trying_out_dtrace |deadlink=no }}</ref>, в декабре 2012 года выпущена стабильная версия, инструмент доступен в составе ядра [[Unbreakable Enterprise Kernel]] (начиная со второго выпуска), при этом [[модуль ядра]] DTrace сохранил лицензию CDDL<ref>{{Cite web |url=https://events.linuxfoundation.org/images/stories/pdf/lfcs2012_zannoni_hees.pdf |title=DTrace on Linux |accessdate=2012-12-10 |archiveurl=https://web.archive.org/web/20140707205640/https://events.linuxfoundation.org/images/stories/pdf/lfcs2012_zannoni_hees.pdf |archivedate=2014-07-07 |deadlink=yes }}</ref>. |
||
== Примерные аналоги == |
== Примерные аналоги == |
||
Microsoft WPP/ETW, поддерживается от Windows Vista. |
Microsoft WPP/ETW, поддерживается от [[Windows Vista]]. |
||
Технология разработана на основе [[WMI]], в первую очередь событий WMI, и не более чем упрощает написание кода, возбуждающего данные события. |
Технология разработана на основе [[WMI]], в первую очередь событий WMI, и не более чем упрощает написание кода, возбуждающего данные события. |
||
Строка 67: | Строка 67: | ||
=== На английском === |
=== На английском === |
||
* [http://docs.sun.com/source/821-2126/index.html DLight Tutorial]{{Недоступная ссылка|date= |
* [http://docs.sun.com/source/821-2126/index.html DLight Tutorial]{{Недоступная ссылка|date=2018-05|bot=InternetArchiveBot }} — DLight is an interactive graphical observability tool for C/C++ developers based on DTrace technology from the [[Oracle Solaris Studio]] |
||
* [https://web.archive.org/web/20170903114855/http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html Exploring Leopard with DTrace] — how to use DTrace for debugging and exploration |
* [https://web.archive.org/web/20170903114855/http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html Exploring Leopard with DTrace] — how to use DTrace for debugging and exploration |
||
* [https://web.archive.org/web/20090302032032/http://video.google.com/videoplay?docid=-8002801113289007228 Google Tech Talk on DTrace given by Bryan Cantrill] |
* [https://web.archive.org/web/20090302032032/http://video.google.com/videoplay?docid=-8002801113289007228 Google Tech Talk on DTrace given by Bryan Cantrill] |
Текущая версия от 02:04, 17 июля 2024
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 для разработчиков