SystemTap

SystemTap
Логотип программы SystemTap
Тип Трассировка
Разработчик сообщество
Написана на C, C++, пользовательские скрипты
Операционная система Linux
Дата выпуска 2005 (2005)
Аппаратная платформа Linux
Последняя версия 5.5 (1 мая 2026; 3 месяца назад (2026-05-01))
Репозиторий sourceware.org/git/syste…
Лицензия GNU General Public License
Сайт 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

См. также

Примечания

  1. A SystemTap update. Дата обращения: 18 июня 2012. Архивировано 6 мая 2012 года.

Ссылки

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.