SystemTap

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
SystemTap
Тип

Трассировка

Разработчик

сообщество

Написана на

C++, пользовательские скрипты

Операционная система

Linux

Первый выпуск

2005

Последняя версия

2.3 (25 июля 2013)

Лицензия

GNU General Public License

Сайт

http://sourceware.org/systemtap/

SystemTap — средство, которое позволяет собирать и анализировать информацию о работающей Linux-системе.

В отличие от встроенных средств, таких как netstat, ps, top, SystemTap был разработан с целью предоставить больше возможностей для сбора и представления информации.

SystemTap представляет собой интерфейс командной строки и скриптовый язык.

Системные администраторы могут использовать SystemTap для мониторинга и анализа производительности системы, а разработчики программного обеспечения могут использовать SystemTap для анализа поведения приложения в работающей системе.

В разработке проекта SystemTap участвуют такие компании как Red Hat, IBM, Oracle Corporation, Hitachi.[1]

Принцип работы[править | править вики-текст]

Основная идея SystemTap состоит в том, чтобы обозначить события и назначить для них обработчики.

Во время выполнения скрипта, SystemTap занимается мониторингом событий и, как только произойдет событие, ядро системы выполнит обработчик.

Событиями могут быть начало или конец сессии SystemTap, срабатывание таймера и другие.

Обработчиком является последовательность скриптовых операторов, которые будут выполнены после срабатывания события. Обычно обработчики извлекают информацию из контекста события или выводят информацию на экран.

Сессия SystemTap начинается тогда, когда мы выполняем скрипт. В это время происходит следующая последовательность действий:

  1. Сначала SystemTap проверяет библиотеку «тапсетов» на наличие использованных в скрипте;
  2. Потом SystemTap транслирует скрипт в C и запускает системный компилятор, чтобы создать модуль ядра из скрипта;
  3. SystemTap загружает модуль и активирует все события в скрипте;
  4. Как только происходит событие выполняется обработчик данного события;
  5. Когда все события выполнены, модуль выгружается и сессия завершается.

Скрипты[править | править вики-текст]

События[править | править вики-текст]

Синхронные события[править | править вики-текст]

Синхронные события привязаны к инструкции в определенном месте в коде ядра.

Примеры синхронных событий:

  • syscall.system_call
  • vfs.file_operation
  • kernel.function("function")
  • module("module").function("function")

Асинхронные события[править | править вики-текст]

Асинхронные события не привязаны к определенной инструкции или определенному месту в коде ядра.

Примеры асинхронных событий:

  • begin — начало сессии SystemTap
  • end — конец сессии SystemTap
  • timer.event() — отсчет таймера (timer.s(4) — событие будет срабатывать каждые 4 секунды)

Обработчики[править | править вики-текст]

Обработчик события заключается в фигурные скобки ({}).

Для вывода на экран используется функция форматного вывода printf («format string\n», arguments), которая схожа с аналогичной функцией в C.

Некоторые функций SystemTap для использования совместно с printf():

  • pid() — ID процесса
  • uid() — ID пользователя
  • execname() — название процесса
  • cpu() — номер процессора

Пример скрипта[править | править вики-текст]

Скрипт:

 probe syscall.open
 {
     printf ("%s(%d) open\n", execname(), pid())
 }

Результат:

 vmware-guestd(2206) open
 hald(2360) open
 hald(2360) open
 hald(2360) open
 df(3433) open
 df(3433) open
 df(3433) open
 hald(2360) open


См. также[править | править вики-текст]

Примечания[править | править вики-текст]

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

Главная страница SystemTap