Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

DTrace - это комплексная платформа динамической трассировки, изначально созданная Sun Microsystems для устранения проблем ядра и приложений в производственных системах в реальном времени. Первоначально разработанный для Solaris , с тех пор он был выпущен под бесплатной Общей лицензией на разработку и распространение (CDDL) в OpenSolaris и его потомках illumos , а также был перенесен на несколько других Unix-подобных систем.

DTrace можно использовать для получения общего обзора работающей системы, такого как объем памяти, время ЦП, файловая система и сетевые ресурсы, используемые активными процессами. Он также может предоставить гораздо более подробную информацию, такую ​​как журнал аргументов, с которыми вызывается конкретная функция, или список процессов, обращающихся к определенному файлу.

В 2010 году корпорация Oracle приобрела Sun Microsystems и объявила о прекращении поддержки OpenSolaris. Операционная система illumos была объявлена ​​на вебинаре в четверг, 3 августа 2010 г. [3], как ответвление на консолидацию OpenSolaris OS / Net, включая технологию DTrace, благодаря усилиям сообщества некоторых основных инженеров Solaris по созданию Solaris с действительно открытым исходным кодом .

В октябре 2011 года Oracle объявила о переносе из DTrace в Linux , [4] и в 2019 году официальный DTrace для Fedora доступен на GitHub. Несколько лет был доступен неофициальный перенос DTrace на Linux без каких-либо изменений в условиях лицензирования. [5]

В августе 2017 года Oracle выпустила код ядра DTrace под лицензией GPLv2 + , а код пользовательского пространства - под лицензией GPLv2 и UPL . [6] В сентябре 2018 года Microsoft объявила о переносе DTrace с FreeBSD на Windows. [2]

В сентябре 2016 года работа над OpenDTrace началась на github с кода и исчерпывающей документации по внутреннему устройству системы. Работа OpenDTrace поддерживает исходную лицензию CDDL для кода из OpenSolaris с дополнительными кодами, входящими в лицензию BSD 2 Clause . Цель OpenDTrace - предоставить независимую от ОС переносимую реализацию DTrace, приемлемую для всех потребителей, включая macOS, FreeBSD, OpenBSD, NetBSD и Linux, а также встроенные системы.

Описание [ править ]

Sun Microsystems разработала DTrace, чтобы дать пользователям представление о работе, которое позволяет пользователям настраивать и устранять неполадки приложений и самой ОС.

Тестировщики пишут программы трассировки (также называемые сценариями), используя язык программирования D (не путать с другими языками программирования, называемыми «D» ). Язык, вдохновленный C , включает добавленные функции и переменные, специфичные для трассировки. Программы на D похожи по структуре на программы awk ; они состоят из списка из одного или нескольких датчиков (точек измерения), и каждый датчик связан с действием. Эти пробники можно сравнить с pointcut в аспектно-ориентированном программировании.. Каждый раз, когда выполняется условие для датчика, выполняется соответствующее действие (датчик «срабатывает»). Типичный зонд может срабатывать при открытии определенного файла, запуске процесса или выполнении определенной строки кода. Срабатывающий зонд может анализировать ситуацию времени выполнения, обращаясь к стеку вызовов и переменным контекста и оценивая выражения; затем он может распечатать или зарегистрировать некоторую информацию, записать ее в базу данных или изменить переменные контекста. Чтение и запись переменных контекста позволяет зондам передавать информацию друг другу, позволяя им совместно анализировать корреляцию различных событий.

Особое внимание было уделено тому, чтобы сделать DTrace безопасным для использования в производственной среде. Например, существует минимальный эффект зондирования во время трассировки и никакое влияние на производительность, связанное с отключенным зондом; это важно, поскольку могут быть задействованы десятки тысяч зондов DTrace. Новые зонды также можно создавать динамически.

Примеры командной строки [ править ]

Сценарии DTrace можно вызывать непосредственно из командной строки, предоставляя в качестве аргументов один или несколько зондов и действий. Некоторые примеры:

# Новые процессы с аргументами
dtrace -n 'proc ::: exec-success {trace (curpsinfo-> pr_psargs); } '# Файлы, открытые процессом
dtrace -n 'syscall :: open *: entry {printf ("% s% s", execname, copyinstr (arg0)); } '# Счетчик системных вызовов программой
dtrace -n 'syscall ::: entry {@num [execname] = count (); } '# Счетчик системных
вызовов по системному вызову dtrace -n 'syscall ::: entry {@num [probefunc] = count (); } '# Счетчик системных вызовов по процессу
dtrace -n 'syscall ::: entry {@num [pid, execname] = count (); } '# Размер диска по процессу
dtrace -n 'io ::: start {printf ("% d% s% d", pid, execname, args [0] -> b_bcount); } '# Страницы
загружаются процессом dtrace -n 'vminfo ::: pgpgin {@pg [execname] = sum (arg0); } '

Также можно писать сценарии, длина которых может достигать сотен строк, хотя обычно для расширенного поиска неисправностей и анализа требуются только десятки строк. Более 200 примеров сценариев DTrace с открытым исходным кодом можно найти в DTraceToolkit [7], созданном Бренданом Греггом (автором книги DTrace [8] ), который также предоставляет документацию и демонстрации каждого из них.

Поддерживаемые платформы [ править ]

DTrace впервые стал доступен для использования в ноябре 2003 года и был официально выпущен как часть Sun Solaris 10 в январе 2005 года. DTrace был первым компонентом проекта OpenSolaris , исходный код которого был выпущен под Общей лицензией на разработку и распространение (CDDL).

DTrace является неотъемлемой частью дистрибутивов illumos и illumos , являясь продолжением OpenSolaris.

DTrace является стандартной частью FreeBSD [9] и NetBSD . [10]

Apple добавила поддержку DTrace в Mac OS X 10.5 «Leopard», включая графический интерфейс под названием Instruments . [11] Более 40 сценариев DTrace из DTraceToolkit включены в / usr / bin, [12] включая инструменты для проверки дискового ввода-вывода (iosnoop) и выполнения процессов (execsnoop). В отличие от других платформ, на которых поддерживается DTrace, в Mac OS X есть флаг (P_LNOATTACH), который программа может установить, запрещая отслеживание этого процесса с помощью таких утилит отладки, как DTrace и gdb . В исходной реализации Mac OS X DTrace это могло повлиять на отслеживание другой системной информации, поскольку несвязанные зонды, которые должны запускаться во время работы программы с этим установленным флагом, не смогут этого сделать. [13]Обновление OS X 10.5.3 решило эту проблему несколько месяцев спустя. [14] Однако, начиная с El Capitan, защита целостности системы по умолчанию не позволяет пользователю использовать защищенные двоичные файлы с помощью DTracing.

Linux порт DTrace был доступен с 2008 года; [15] продолжается активная работа по улучшению и исправлению проблем. Также есть активная реализация на github . Доступны стандартные основные поставщики (fbt, syscall, profile), а также специальный провайдер instr (некоторые поставщики Solaris еще не доступны по состоянию на 2013 год ). Реализация Linux DTrace представляет собой загружаемый модуль ядра , что означает, что само ядро ​​не требует модификации и, таким образом, позволяет DTrace избегать конфликтов лицензирования CDDL и GPL (по крайней мере, в исходной форме). Однако после загрузки DTrace экземпляр ядра будет помечен как испорченный .

В 2007 году разработчик из QNX Software Systems объявил в своем блоге, что он и его коллега работают над включением DTrace в операционную систему QNX . [16]

Корпорация Oracle добавила поддержку бета-версии DTrace для Oracle Linux в 2011 году [1] в качестве предварительного просмотра технологии в Unbreakable Enterprise Kernel Release 2, который находится под GPLv2 (модуль ядра DTrace Linux изначально был выпущен под CDDL). [17] Общая доступность была объявлена ​​в декабре 2012 года. [18] [19]

11 марта 2019 года Microsoft выпустила свою сборку DTrace для инсайдерских сборок Windows 10. [20]

Поставщики языков и приложений [ править ]

С помощью поддерживаемого поставщика языка DTrace может получить контекст кода, включая функцию, исходный файл и расположение номера строки. Кроме того, можно сделать доступными динамическое выделение памяти и сборку мусора, если они поддерживаются языком. [21] Поддерживаемые поставщики языков включают ассемблер [ требуется пояснение ] , C , C ++ , Java , Erlang , JavaScript , Perl , PHP , Python , Ruby , сценарий оболочки и Tcl .

Поставщики приложений позволяют DTrace отслеживать работу приложений через системные вызовы и в ядро. Приложения, которые предлагают поставщиков приложений DTrace, включают MySQL , PostgreSQL , Oracle Database , Oracle Grid Engine и Firefox . [21] [22] [23]

Авторы и награды [ править ]

DTrace был разработан и реализован Брайаном Кантрилом , Майком Шапиро и Адамом Левенталем .

Авторы получили признание в 2005 году за инновации в DTrace от InfoWorld и Technology Review . [24] [25] DTrace выиграл главный приз в The Wall Street Journal " 2006 конкурса Technology Innovation Awards s. [26] Авторы были отмечены USENIX наградой Software Tools User Group (STUG) в 2008 году. [27]

См. Также [ править ]

  • eBPF  - серверная часть трассировки ядра Linux, обеспечивающая набор функций, аналогичных DTrace [28], начиная с версии ядра 4.9.
  • ftrace  - среда трассировки для ядра Linux, способная отслеживать события планирования, прерывания, ввод-вывод с отображением памяти, переходы между состояниями питания процессора и т. д.
  • ktrace  - утилита BSD для Unix и macOS, отслеживающая взаимодействия ядра и программы
  • ltrace  - утилита отладки Linux, отображает вызовы пользовательского приложения к разделяемым библиотекам.
  • strace  - утилита отладки для Linux, отслеживает системные вызовы, используемые программой, и все полученные сигналы
  • SystemTap  - язык сценариев и утилита, используемые для инструментовки установок Linux.
  • LTTng
  • IBM ProbeVue

Ссылки [ править ]

  • Кантрилл, Брайан (февраль 2006 г.). «Скрытый на виду» . Очередь ACM . 4 (1): 26–36. DOI : 10.1145 / 1117389.1117401 . Проверено 19 декабря 2017 .
  • Брайан М. Кантрилл, Майкл В. Шапиро и Адам Х. Левенталь (июнь 2004 г.). Динамическое приборостроение производственных систем . Труды 2004 USENIX ежегодной технической конференции . Проверено 8 сентября 2006 .

Заметки [ править ]

  1. ^ a b Wim Coekaerts (09.10.2011). "Пробуем dtrace" . blogs.oracle.com . Проверено 15 февраля 2018 .
  2. ^ a b «Внутреннее устройство ОС: Технический анализ инноваций в операционной системе - BRK3365» . Microsoft Ignite Channel . 2018-10-08.
  3. ^ D'Amore, Garrett (3 августа 2010). "Illumos - надежда и источники света заново - представлены Гарретом Д'Амором" (PDF) . illumos.org . Проверено 3 августа 2010 года .
  4. ^ «Oracle перенесет Dtrace в Linux» . Slashdot . 2011-10-04 . Проверено 11 ноября 2020 .
  5. ^ [1] «Исходный DTrace находится под лицензией Sun (теперь Oracle) CDDL. Оригинальные авторские права сохранены. Во избежание юридических конфликтов в выпуск не включен код GPL».
  6. ^ Wielaard, Mark J. (2018-02-14). «dtrace для Linux; Oracle поступает правильно» . Блог Марка Дж. Вилаарда . Проверено 14 февраля 2018 .
  7. ^ "DTraceToolkit" . Брендан Грегг . Проверено 8 июня 2014 .
  8. ^ DTrace: динамическая трассировка в Oracle Solaris, Mac OS X и FreeBSD . Книги о сафари . 2011. ISBN. 0132091518. Проверено 3 января 2011 .
  9. ^ "Объявление о выпуске FreeBSD 7.1" . 2009-01-06 . Проверено 6 января 2009 .
  10. ^ «Изменения исходного кода NetBSD, 21 февраля 2010 г.» .
  11. ^ «Mac OS X Leopard - Инструменты разработчика - Инструменты» . Корпорация Apple Архивировано из оригинала на 2007-10-24 . Проверено 19 октября 2007 .
  12. ^ «Mac OS X DTrace» . Apple Inc., дата обращения 31 мая 2010 .
  13. ^ «Mac OS X и недостающие датчики» . Левенталь, Адам H. 18 января 2008 . Проверено 20 января 2008 .
  14. ^ «Apple обновляет DTrace» . Левенталь, Адам H. 7 июня 2008 . Проверено 16 июня 2008 .
  15. ^ "Страница загрузки инструментов CRiSP" . Проверено 2 марта 2011 .
  16. ^ "DTrace на QNX!" . Блог Oracle The Observation Deck . 8 ноября 2007 г.
  17. ^ Zannoni, Елена; Ван Хис, Крис (2012). DTrace для Linux (PDF) . Саммит сотрудничества Linux Foundation. Архивировано из оригинального (PDF) 07.07.2014 . Проверено 5 апреля 2012 .
  18. Кох, Зейнеп (12 декабря 2012 г.). «Объявление: общедоступность DTrace для Oracle Linux» . Блог Oracle Linux .
  19. ^ Исходный код модуля DTrace для Linux
  20. ^ Pulapaka, Хари (11 марта 2019). «DTrace в Windows» . Техническое сообщество Microsoft .
  21. ^ a b DTrace: динамическая трассировка в Oracle Solaris, Mac OS X и FreeBSD . Прентис Холл . 2011. с. 1152. ISBN 9780132091510.
  22. ^ «Open Grid Scheduler / Grid Engine Documentation» . Откройте планировщик сетки . Проверено 30 декабря 2012 года .
  23. ^ "DTrace - MDN" . Mozilla . Проверено 30 декабря 2012 года .
  24. ^ «Программное обеспечение для отслеживания в реальном времени» . Обзор технологий . Массачусетский технологический институт. 2005 . Проверено 31 марта 2007 .
  25. Перейти ↑ McAllister, Neil (август 2005 г.). «Инновации живы и процветают в 2005 году» . InfoWorld . IDG. Архивировано из оригинала на 2005-11-23 . Проверено 31 марта 2007 .
  26. ^ Тотти, Майкл (сентябрь 2006 г.). «Победители ...» The Wall Street Journal . Dow Jones & Company, Inc . Проверено 31 марта 2007 .
  27. ^ «Ежегодная техническая конференция USENIX 2008 (USENIX '08)» . 2008 . Проверено 26 ноября 2008 .
  28. ^ "Инструменты DTrace" . Проверено 27 ноября 2017 .

Внешние ссылки [ править ]

  • Инструменты DTrace  - примеры DTrace Брендана Грегга (2004)
  • Страница  FreeBSD DTrace - домашняя страница FreeBSD DTrace, включает руководство и однострочники
  • Книга DTrace  - включает сотни примеров скриптов
  • Динамическая трассировка с DTrace и SystemTap  - бесплатная книга с примерами и упражнениями
  • Скрипты книги DTrace  - скрипты книги DTrace на GitHub
  • DTraceToolkit  - сборник скриптов DTrace
  • DTrace Hands On Lab  - пошаговый курс по изучению DTrace
  • DLight Tutorial  - интерактивная утилита с графическим интерфейсом для разработчиков на C / C ++, основанная на технологии DTrace; часть Oracle Solaris Studio до версии 12.4
  • Изучение Leopard с помощью DTrace  - DTrace для отладки и исследования
  • Технический разговор о DTrace, сделанный Брайаном Кантриллом
  • Скрытые на виду , Sun Microsystems, Брайан Кантрилл
  • dtrace.org содержит блоги разработчиков программного обеспечения, связанных с DTrace.
  • Официальный перенос Oracle DTrace на Linux:
    • Патчи DTrace объединены с последними выпусками ядра Linux
    • Пользовательская часть порта DTrace для Linux
    • Библиотека Compact Type Format, используемая DTrace в Linux
  • DTrace в Fedora