Введение

DTrace — это комплексная система динамического трассирования, первоначально разработанная Sun Microsystems для диагностики проблем ядра и приложений в производственных системах в реальном времени. Изначально созданная для Solaris, она была выпущена под свободной лицензией общего развития и распространения (CDDL) в OpenSolaris и её производной illumos, а также портирована на несколько других Unix-подобных систем. DTrace позволяет получать общую картину работы системы, такую как объём используемой памяти, время работы процессора, ресурсы файловой системы и сети, потребляемые активными процессами. Она также может предоставлять гораздо более детальную информацию, например, журнал аргументов, с которыми вызывается конкретная функция, или список процессов, обращающихся к определённому файлу. В 2010 году корпорация Oracle приобрела Sun Microsystems и объявила о прекращении разработки OpenSolaris. В качестве инициативы сообщества ключевых разработчиков Solaris по созданию полностью открытого исходного кода Solaris, операционная система illumos была анонсирована 3 августа 2010 года на вебинаре как ответвление от консолидации OpenSolaris OS/Net, включающее технологию DTrace. В октябре 2011 года Oracle объявила о портировании DTrace на Linux, а в 2019 году официальный DTrace для Fedora стал доступен на GitHub. На протяжении нескольких лет существовал неофициальный порт DTrace для Linux без изменений в условиях лицензирования. В августе 2017 года Oracle опубликовала код ядра DTrace под лицензией GPLv2+, а код пользовательского пространства — под лицензиями GPLv2 и UPL. В сентябре 2018 года Microsoft объявила о портировании DTrace из FreeBSD в Windows, созданное Бренданом Греггом (автором книги о DTrace), которое также содержит документацию и демонстрации.

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

DTrace впервые стал доступен для использования в ноябре 2003 года, а официально был выпущен в составе Sun's Solaris 10 в январе 2005 года. DTrace был первым компонентом проекта OpenSolaris, исходный код которого был опубликован под лицензией Common Development and Distribution License (CDDL). DTrace является неотъемлемой частью illumos и связанных дистрибутивов. DTrace входит в стандартную поставку FreeBSD и NetBSD. Apple добавила поддержку DTrace в Mac OS X 10.5 "Leopard", включая графический интерфейс Instruments. В /usr/bin включено более 40 скриптов DTrace из DTraceToolkit, в том числе инструменты для анализа ввода-вывода диска (iosnoop) и выполнения процессов (execsnoop). В отличие от других платформ, поддерживающих DTrace, в Mac OS X существует флаг (P LNOATTACH), который программа может установить, запретив отслеживание этого процесса отладочными утилитами, такими как DTrace и gdb. В первоначальной реализации DTrace для Mac OS X это могло повлиять на отслеживание другой системной информации, поскольку несвязанные зонды, которые должны были срабатывать при работе программы с установленным этим флагом, не срабатывали. Обновление OS X 10.5.3 устранило эту проблему спустя несколько месяцев. Однако, начиная с El Capitan, System Integrity Protection по умолчанию запрещает пользователю отслеживать защищенные двоичные файлы с помощью DTrace. Порт DTrace для Linux доступен с 2008 года, и работа по его улучшению и исправлению ошибок активно продолжается. Также существует активная реализация на GitHub. Доступны стандартные основные провайдеры (fbt, syscall, profile), а также специальный провайдер "instr" (некоторые провайдеры Solaris пока недоступны). Реализация DTrace для Linux представляет собой загружаемый модуль ядра, что означает, что само ядро не требует изменений, и таким образом позволяет DTrace избежать конфликтов лицензий CDDL и GPL (по крайней мере, в исходном коде). Однако, после загрузки DTrace экземпляр ядра будет помечен как скомпрометированный. В 2007 году разработчик QNX Software Systems сообщил в своем блоге, что он и его коллега работают над интеграцией DTrace в операционную систему QNX. Oracle Corporation добавила бета-поддержку DTrace для Oracle Linux в 2011 году, а общая доступность была объявлена в декабре 2012 года. 11 марта 2019 года Microsoft выпустила свою сборку DTrace для инсайдерских сборок Windows 10.

Поставщики языковых услуг и приложений

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

Авторы и награды

DTrace был разработан и реализован Брайаном Кантриллом, Майком Шапиро и Адамом Левенталем. Авторы получили признание в 2005 году за инновации, представленные в DTrace, от InfoWorld и Technology Review. DTrace завоевал главный приз в конкурсе технологических инноваций The Wall Street Journal в 2006 году. В 2008 году авторы были удостоены награды Software Tools User Group (STUG) от USENIX.