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>[http://blogs.oracle.com/wim/entry/trying_out_dtrace trying out dtrace]</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>.
Из-за лицензии 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=Май 2018 |bot=InternetArchiveBot }} — DLight is an interactive graphical observability tool for C/C++ developers based on DTrace technology from the [[Oracle Solaris Studio]]
* [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

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).

Примечания

[править | править код]
  1. Это специальный предметно-ориентированный язык, созданный для DTrace, не имеющий ничего общего с языком программирования D общего назначения
  2. trying out dtrace. Дата обращения: 10 декабря 2012. Архивировано 18 апреля 2015 года.
  3. DTrace on Linux. Дата обращения: 10 декабря 2012. Архивировано из оригинала 7 июля 2014 года.

На английском

[править | править код]

На русском

[править | править код]