The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Использование LTTng для прозрачной ..."
Отправлено auto_tips, 13-Ноя-10 21:06 
Система трассировки LTTng (http://lttng.org/) работает на уровне Linux-ядра и отличается минимальным влиянием на работу профилируемого приложения, что позволяет приблизить условия работы данного приложения к его выполнению без использования трассировки (например, позволяет выявлять проблемы с производительностью в программах, работающих в реальном режиме времени).

Поддержка LTTng пока не включена в состав Linux-ядра, но недавно для Ubuntu Linux  был подготовлен специальный [[https://launchpad.net/~lttng/+archive/ppa/+index PPA-репозиторий]], позволяющий значительно упростить установку LTTng.

Приведем пример использования LTTng для отладки системы и тюнинга производительности.

Подключаем репозиторий:

   sudo add-apt-repository ppa:lttng/ppa
   sudo aptitude update

Устанавливаем компоненты для трассировки ядра (LTTng работает только с ядром 2.6.35, поэтому в Ubuntu 10.04 может потребоваться установка экспериментального пакета с более новым ядром):

   sudo apt-get install lttng

Установка утилит для трассировки пользовательских приложений:

   sudo apt-get install ust-bin libust-dev liburcu-dev

++ Пример поддержи трассировки на уровне ядра

Загружаем ядро lttng:

   sudo ltt-armall

Начинаем трассировку:

   sudo lttctl -C -w /tmp/trace1 программа

Прекращаем трассировку:

   sudo lttctl -D программа

Результаты трассировки /tmp/trace1 теперь можно открыть в утилите lttv или использовать режим текстового дампа:

   lttv -m textDump -t /tmp/trace1 | grep ...


++ Трассировка пользовательских приложений со связыванием специальной библиотеки

Собираем приложения добавив в опции сборки флаг '-lust'.

Запускаем приложение с трассировкой:

   usttrace исследуемая_программа

++ Контроль трассировки с удаленной машины

На локальной машине устанавливаем и запускаем программу-агент:

   sudo apt-get install tcf-lttng-agent
   sudo tcf-agent

На удаленной машине устанавливаем и запускаем клиента:

   sudo apt-get install tcf-lttng-client
   tcf-client

далее, в появившейся консоли вводим:
   connect ip_локальной_машины

и после соединения передаем управляющие команды:
   tcf ltt_control getProviders
   tcf ltt_control setupTrace "kernel" "0" "traceTest"


++ Пример трассировки

Рассмотрим для примера простую программу, открывающую файл и записывающую в него циклично числа.

    #include <stdio.h>
    #define INT_MAX 2147483647
    int main(volatile int argc, char **argv) {
      int i = 3;
      FILE *fd = fopen("test.out", "w");
      fwrite(&i, sizeof(int), 1, fd);
      fclose(fd);
      volatile long a;
      int x;
      for (x = 0; x<INT_MAX; x++) {
        a++;
      }
      return 0;
   }

Собираем данную программу:

   gcc -o usecase usecase.c

  
Теперь попробуем выполнить трассировку при помощи LTTng.

Активируем точки трассировки в ядре:

   sudo ltt-armall

Для автоматизации выполнения активации трассировки, запуска программы и остановки трассировки напишем небольшой скрипт trace-cmd.sh:

   #!/bin/sh
   if [ -z "$@" ]; then
     echo "missing command argument"
     exit 1
   fi
   cmd="$@"

   name="cmd"
   dir="$(pwd)/trace-$name"
   sudo rm -rf $dir
   sudo lttctl -o channel.all.bufnum=8 -C -w $dir $name
   echo "executing $cmd..."
   $cmd
   echo "return code: $?"
   sudo lttctl -D $name

Запускаем:

   ./trace-cmd.sh ./usecase

После выполнения трассировки для наглядного анализа результатов запускаем GUI-утилиту lttv-gui, заходим в меню File->Add и выбираем  директорию трассировки  "trace-имя", сохраненную в каталоге, в котором был запущен скрипт trace-cmd.sh. Каждое из событий трассировки представлено в виде графика. Для нашего тестового приложения будет присутствовать три фазы: создание/доступ к файлу, вычислительная фаза и завершение процесса.

++ Оценка различий от strace

Если сравнить результаты работы стандартной утилиты strace:

   strace -o usecase.strace ./usecase

В дополнение к системным вызовам, LTTng учитывает задействование подсистем ядра, события планировщика задач, обработку прерываний и прочие детали, недоступные в выводе strace. Но самым интересным отличием от strace является то, что программа никаким образом не может определить, что подвергается трассировке. Время наступления событий отображается в наносекундах. Влияние на производительность трассировки минимально, тестирование показало, что работа замедляется не более чем на 3%.


URL: http://multivax.blogspot.com/2010/11/introduction-to-linux-t...
Обсуждается: http://www.opennet.ru/tips/info/2475.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру