Введение
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 is a comprehensive dynamic tracing framework originally created by Sun Microsystems for troubleshooting kernel and application problems on production systems in real time. Originally developed for Solaris, it has since been released under the free Common Development and Distribution License (CDDL) in OpenSolaris and its descendant illumos, and has been ported to several other Unix like systems. DTrace can be used to get a global overview of a running system, such as the amount of memory, CPU time, filesystem and network resources used by the active processes. It can also provide much more fine grained information, such as a log of the arguments with which a specific function is being called, or a list of the processes accessing a specific file. In 2010, Oracle Corporation acquired Sun Microsystems and announced discontinuing OpenSolaris. As a community effort of some core Solaris engineers to create a truly open source Solaris, illumos operating system was announced via webinar on Thursday, 3 August 2010, as a fork on OpenSolaris OS/Net consolidation, including DTrace technology. In October 2011, Oracle announced the porting of DTrace to Linux, and in 2019 official DTrace for Fedora is available on GitHub. For several years an unofficial DTrace port to Linux was available, with no changes in licensing terms. In August 2017, Oracle released DTrace kernel code under the GPLv2+ license, and user space code under GPLv2 and UPL licensing. In September 2018 Microsoft announced that they had ported DTrace from FreeBSD to Windows. created by Brendan Gregg (author of the DTrace book), which also provides documentation and demonstrations of each.
Поддерживаемые платформы
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.