Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Евгений Ильин
Познай себя и познай своего врага.
Тогда в сотне битв ты не будешь знать поражения.
Сан дзу. Искусство войны
Снять гипс с «клиента» без «шума и пыли», можно, как известно, несколькими способами. Если говорить о трассировке, DTrace предлагает свой, элегантный метод добраться до бриллиантов, где бы они ни были спрятаны в системе.
Недавно я делал презентацию об открытых технологиях Sun Microsystems. Технологий было много и получалось, что обзор каждой должен занимать не более пяти минут, в том числе и рассказ о таком мощном средстве наблюдения за системой, каким является DTrace. Чтобы дать аудитории краткое и понятное представление об этом инструменте, я придумал, как мне кажется, удачную аналогию: «DTrace – рентген для операционной системы». Ведь как рентген может «заглянуть» внутрь живого организма, так и DTrace позволяет увидеть процессы, происходящие внутри операционной системы и пользовательских приложений. С помощью этой технологии можно получить исчерпывающую информацию о внутреннем состоянии приложения, причём сам процесс исследования для «пациента» абсолютно безопасен, так как он не оказывает никакого влияния на «жизнедеятельность» объекта исследования.
Правда, это не совсем полная аналогия, поскольку принципы работы DTrace и рентгеновского аппарата отличаются. DTrace получает информацию от многочисленных датчиков, что находятся в ядре, библиотеках и приложениях, которые срабатывают только в том случае, когда кто-то включил их в явном виде. Выключенные датчики не оказывают никакого влияния на производительность, и система в целом работает так, как будто их вообще нет. Весь секрет в том, что DTrace умеет динамически модифицировать объект исследования.
Пожалуй, можно провести еще одну параллель между DTrace и рентгеном. Для успешного рентгеновского исследования необходимо знание физиологии, анатомии и устройства рентгеновского оборудования. Аналогично и для эффективного использования DTrace необходимо понимание принципов работы операционной системы и устройства инструмента, который позволяет заглянуть внутрь работающей системы.
В этой статье пойдёт рассказ об архитектуре DTrace, её составляющих элементах и методологиях модификации системы. Для того чтобы приведённые примеры были понятны, представлено краткое описание языка программирования D, который предоставляет универсальный доступ ко всем возможностям DTrace.
Обзор архитектуры DTrace
Основные архитектурные компоненты DTrace – это потребители, корневой модуль DTrace, датчики и провайдеры. Процессы становятся потребителями (consumers) DTrace, инициируя общение с корневым модулем DTrace. Корневой модуль находится в ядре операционной системы и обеспечивает доступ к средствам модификации кода, буферизацию и обработку событий от датчиков (probes). У потребителя две основные задачи: передать спецификации трассировки модулю DTrace (далее по тексту термины корневой модуль и модуль DTrace суть синонимы) и обрабатывать данные, полученные в процессе трассировки. Потребители обращаются к корневому модулю через интерфейс, предоставляемый библиотекой libdtrace(3LIB). Данные между потребителем и ядром передаются посредством вызовов ioctl(2) для псевдо-устройства dtrace, реализованного драйвером dtrace(7d).
Рисунок 1. Архитектура DTrace
Потребителем DTrace может быть любая программа. В состав Solaris 10 включены утилиты lockstat(1M), plockstat(1M) и intrstat(1M), являющиеся оными (это не полный список утилит Solaris 10, что являются потребителями DTrace). Однако каноническим потребителем является утилита dtrace(1M), которая предоставляет универсальный доступ ко всем средствам DTrace, так как является драйвером для компилятора языка программирования D (сам компилятор находится в библиотеке libdtrace(3LIB)). Также можно использовать dtrace(1M) в качестве самостоятельной утилиты трассировки.