19 февраля 2013 в 01:57

SystemTap в Linux

Привет.

Несколько лет назад я написал эту статью для песочницы, мечтая стать частью сообщества хабра. Сегодня, копаясь в черновиках, обнаружил ее не опубликованной (по материалам этой статьи я написал страницу в wiki) и решил опубликовать с целью собрать фидбеки и юзкейсы от людей использующих SystemTap в работе.



1. Что такое SystemTap, для кого и зачем он нужен?



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

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

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

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

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

2. Как работает SystemTap?



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

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

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

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

3. Как писать скрипты SystemTap?



О событиях и SystemTap


В SystemTap есть 2 типа событий: синхронные и асинхронные.

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

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

— syscall.system_call
— vfs.file_operation
— kernel.function(«function»)
— module(«module»).function(«function»)

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

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

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

Об обработчиках в SystemTap


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

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

Некоторые функций 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.

Чтобы больше узнать про Systemtap рекомендую вам посетить Официальный сайт.
Андрей Рягузов @aeryaguzov
карма
34,0
рейтинг 0,0
Похожие публикации

Комментарии (8)

  • +2
    Плюс за старание =)
    Но рекомендую ещё раз вычитать статью.
    • 0
      Оставлю так как есть, все-таки история:-)
      Обязательно добавлю в статью примеры использования, если такие будут…
  • +2
    А можно побольше примеров?
    • 0
      Цель публикации статьи — собрать рабочие примеры.
      Когда я ее писал, информации о systemtap на русском не было. Я думаю, что в настоящее время должны найтись люди использующие systemtap…
      • +2
        Я не использовал systemtap, но примеры нашёл:

        sourceware.org/systemtap//SystemTap_Beginners_Guide.pdf

        5. Useful SystemTap Scripts
        5.1. Network
        5.1.1. Network Profiling
        5.1.2. Tracing Functions Called in Network Socket Code
        5.1.3. Monitoring Incoming TCP Connections
        5.1.4. Monitoring TCP Packets
        5.1.5. Monitoring Network Packets Drops in Kernel
        5.2. Disk
        5.2.1. Summarizing Disk Read/Write Traffic
        5.2.2. Tracking I/O Time For Each File Read or Write
        5.2.3. Track Cumulative IO
        5.2.4. I/O Monitoring (By Device)
        5.2.5. Monitoring Reads and Writes to a File
        5.2.6. Monitoring Changes to File Attributes
        5.2.7. Periodically Print I/O Block Time
        5.3. Profiling
        5.3.1. Counting Function Calls Made
        5.3.2. Call Graph Tracing
        5.3.3. Determining Time Spent in Kernel and User Space
        5.3.4. Monitoring Polling Applications
        5.3.5. Tracking Most Frequently Used System Calls
        5.3.6. Tracking System Call Volume Per Process
        5.4. Identifying Contended User-Space Locks
  • 0
    А оно поможет определить в какой лимит упирается софт? Скажем, почему при нагрузочном тестировании кластера couchbase из нескольких серверов, количество запросов упирается в 5 тыс/сек, когда эта цифра должна отличаться на порядок?
  • –1
    тут поможет только do_zapupato.sh
  • 0
    а разработчики программного обеспечения могут использовать SystemTap для анализа поведения приложения в работающей системе.

    Не понимаю.

    Из ответа тов. antage можно предположить что разрабам будет интересен пункт 5.3 о профилировке. Но из описания приклада, видно, что оно ориентировано на ядро и ОС, и как среди всего этого выделить часть своего приклада?

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.