URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 72473
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Использование 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.me/tips/info/2475.shtml


Содержание

Сообщения в этом обсуждении
"Использование LTTng для прозрачной трассировки приложений в Ubuntu Linux"
Отправлено ананим , 13-Ноя-10 21:06 
спасибо, познавательно.
картинка в оригинале тоже ничего так.

"Использование LTTng для прозрачной трассировки приложений в Ubuntu Linux"
Отправлено Zenitur , 17-Ноя-10 15:30 
Извращение для тех, кто не умеет сам пересобрать себе ядро.

"Использование LTTng для прозрачной трассировки приложений в ..."
Отправлено ksS , 18-Ноя-10 00:10 
может сначала man strace?

"Использование LTTng для прозрачной трассировки приложений в ..."
Отправлено 0xCC , 10-Янв-11 22:23 
ох.. зенитур умер для меня......

"Использование LTTng для прозрачной трассировки приложений в Ubuntu Linux"
Отправлено fp , 29-Мрт-11 00:29 
usttrace -l - подгрузит библиотеку ust без перекомпиляции.

P.S. надо поправить trace-cmd.sh:
...
name="$cmd"
...