Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Основные принципы системной разработки > Программные интерфейсы микроядра > Системная трассировка и анализ > Общие сведения



Общие сведения

Начальное знакомство с возможностями и принципами работы с инструментами системного анализа и трассировки

В этой главе:

Что такое инструменты системного анализа?
Возможности инструментов системного анализа
Состав инструментов системного анализа
Диагностическая версия микроядра
Управление буфером ядра
Сервис сбора данных (tracelogger)
Интерпретация данных (traceprinter)

Что такое инструменты системного анализа?

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

В состав ЗОСРВ «Нейтрино» входят развитые механизмы трассировки и профилирования, с помощью которых можно анализировать работу системы как в реальном времени, так и автономно. В отличие от отладчиков, инструменты системного анализа работают на уровне операционной системы и позволяют анализировать поведение приложений, не изменяя их.

Инструменты системного анализа обладают следующими основными характеристиками:

Возможности инструментов системного анализа

В процессе работы системы выполняется большое количество неявных действий, таких как:

Перечисленные действия изменяют состояние системы, но, как правило, скрыты от внимания разработчиков. Инструменты системного анализа позволяют обнаруживать и регистрировать эти изменения. При регистрации каждого события указывается время и идентификатор процессора, который обработал его.


Note: Принципы работы ядра подробно описаны в главе Микроядро: реализация и сервисы.

Инструменты системного анализа предоставляет ценную информацию о продукте на всех этапах его жизненного цикла — от создания прототипа до оптимизации, эксплуатационного контроля и диагностики.

satvsdebugger.png
Рисунок 1. Области применения инструментов системного анализа и отладчика

Информация стандартных отладчиков не всегда достаточно подробна для устранения неполадок в сложных системах, а некорректное поведение процесса не обязательно обусловлено ошибками в его коде. В отличие от инструментов системного анализа, отладчики не собирают информацию о ходе выполнения приложений, которая необходима для решения разнообразных и сложных задач их «точной настройки». Традиционные средства отладки не позволяют с легкостью обнаруживать проблемы, обусловленные некорректным взаимодействием модулей масштабной системы, которая состоит из многочисленных взаимосвязанных компонентов или процессов. Отладчик наблюдает за одним процессом, а инструменты системного анализа — за всеми процессами одновременно. Кроме того, инструменты системного анализа позволяют следить за работой внешнего скомпилированного кода без его модификации.

Инструменты системного анализа представляют события в ядре на системном уровне, что позволяет анализировать и оптимизировать функционирование крупных взаимосвязанных систем и отдельных процессов, а также обнаруживать причины взаимных блокировок и конфликтов посредством отладки в реальном времени. Инструменты системного анализа дают возможность изучать поведение системы не по «стоп-кадрам», а как «фильм».

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

Инструменты системного анализа позволяют «бесконтактно» вводить диагностические средства в код — программы могут самостоятельно следить за собой. В дополнение к пассивной/бесконтактной трассировке событий разработчик может добавлять в программы собственные события-индикаторы.

Состав инструментов системного анализа

Инструменты системного анализа ЗОСРВ «Нейтрино» состоят из следующих основных компонентов:

sat_overall.png
Рисунок 2. Общее логика функционирования инструментов системного анализа

Диагностическая версия микроядра

Диагностическая версия ядра ЗОСРВ «Нейтрино» включает в себя компактный высокоэффективный модуль сбора событий. В остальном она не отличается от обычного микроядра и уступает ему в производительности всего на 2%.

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

Чтобы определить, какая версия ядра используется в системе, введите команду:

ls /proc/boot

и найдите файл, в имени которого присутствует слово procnto. Если файл называется procnto-*instr, используется именно диагностическая версия ядра.

Чтобы переключить в систему диагностическое ядро, выполните следующие действия:

  1. В файле построения загрузочного образа замените модуль procnto на подходящий модуль procnto-*instr.

  2. Добавьте утилиты tracelogger и traceprinter в файл построения загрузочного образа или прямиком на целевую систему.

  3. Выполните повторную сборку образа с помощью утилиты mkifs.

  4. Замените прежний загрузочный образ новым.

Управление буфером ядра

Буфер ядра состоит из множества небольших буферов. Несмотря на то, что их количество ограничивается только объемом памяти системы, важно следить за его расходованием. При трассировке всех событий работающей системы количество регистрируемых событий весьма велико.

Чтобы диагностическое ядро могло выполнять запись в одну часть буфера и при этом хранить данные в другой его части, буфер ядра организован в виде кольцевого связанного списка. Когда количество данных в буфере достигает высокой отметки (около 70%), диагностический модуль ядра отправляет программе сбора данных сигнал с адресом буфера. Затем программа сбора данных получает доступ к буферу и помещает его в хранилище для автономной обработки или передает интерпретатору данных для динамической обработки. В любом случае освобожденный буфер может снова использоваться ядром.

Сервис сбора данных (tracelogger)

В состав ЗОСРВ «Нейтрино» входит утилита tracelogger для сбора данных. Она принимает события от диагностического ядра и сохраняет их в файле или отправляет на устройство для дальнейшего анализа.


Note: Для выделения памяти под буферы и использования таких функций, как InterruptHookTrace(), утилиты сбора данных должны выполняться с привилегиями пользователя root; в противном случае они не будут работать корректно.

Поскольку утилита tracelogger может записывать данные со скоростью значительно выше 20 Мбайт/мин, ее длительное или частое использование приводит к расходованию больших объемов дискового пространства. Если на диске мало свободного места, следует регулярно удалять файлы журнала (по умолчанию утилита tracelogger перезаписывает содержимое прежнего файла, используемого по умолчанию).

Также можно выполнять трассировку в собственном приложении (например, включая ее только для проблемной области) при помощи вызова ядра TraceEvent(). Этот вызов выполняет более 30 команд, которые позволяют:

Дополнительную информацию см. в главе Сбор трассировочных данных настоящего руководства, описании утилиты tracelogger и функции TraceEvent().

Интерпретация данных (traceprinter)

Для облегчения обработки двоичных трассировочных данных используется библиотека libtraceparser. Ее API позволяет создавать функции, которые вызываются при заполнении элементов буфера данными о событиях, принимаемыми/считываемыми из необработанного двоичного потока событий.

Библиотека libtraceparser лежит в основе утилиты traceprinter, которая отображает все трассировочные события в порядке их генерации ядром и с соответствующими временными метками. Можно использовать API данной библиотеки для создания собственного анализатора, а также выполнять следующие действия в реальном времени:

Библиотека libtraceparser предоставляет API, который облегчает анализ и интерпретацию событий трассировки, хранящихся в файле событий, и позволяет:

Дополнительную информацию см. в главе Интерпретация трассировочных данных настоящего руководства, а также описании утилиты traceprinter.




Предыдущий раздел: перейти