Профилирование приложений в Oracle Solaris Studio.

Для профилирования в OSS разработаны 2 многопоточных приложения на языке С с использованием библиотеки pthread.h.

В первом приложение, представленном в листинге 1, в основном потоке создается 8 потоков: 4 из них записывают в динамический массив данные, другие 4 считывают данные. С помощью объектов синхронизации: мьютексов и семафоров, организовано обращение потоков к разделяемому массиву.

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

Для быстрого анализа приложения в OSS встроены компоненты: Monitor Main Project – для отслеживания ресурсов ЦП, памяти и состояние потоков, и Data Races and Deadlocks. На рисунке 4 представлен быстрый анализ приложений (слева для первого, справа для второго).

Профилирование приложений в Oracle Solaris Studio. - student2.ru

Рисунок 4.

В первой программе анализ показал, что работает 9 потоков, в среднем 5 из них находятся в состояние ожидания, выделено 40 байт памяти (10 элементов массива типа int) и найдено 2 гонки за ресурсы. Во второй программе работает 3 потока, найдено 1 дедлок и 2 гонки за ресурсы. Нажав «details» для дедлока, OSS указывает в какой части кода происходит захват ресурса и где его запрашивает другой поток.

Произведем детальный анализ с помощью Performance Analyzer. Для первого приложения перед профилированием выберем настройки по умолчанию (с графиком времени работы потоков, с деревом вызовов, использование памяти и др.). На рисунке 5 представлен анализ приложения.

Профилирование приложений в Oracle Solaris Studio. - student2.ru Профилирование приложений в Oracle Solaris Studio. - student2.ru Профилирование приложений в Oracle Solaris Studio. - student2.ru Профилирование приложений в Oracle Solaris Studio. - student2.ru

Рисунок 5.

Из обзора видно, что потоки 58% времени тратили на User Lock Time (время ожидания освобождения ресурсов), 17% времени простаивали, 22% ждали ЦП и 2% выполнялись на ЦП. Было выделено 40 байт памяти. На временном графике видно, в каком состояние находились потоки в разные моменты времени. Дерево вызовов показывает сколько ресурсов ЦП ушло на вызов функций и структуру вызовов. Во вкладке Threads можно увидеть количество потоков и распределение ресурсов ЦП.

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

Профилирование приложений в Oracle Solaris Studio. - student2.ru Профилирование приложений в Oracle Solaris Studio. - student2.ru

Профилирование приложений в Oracle Solaris Studio. - student2.ru Профилирование приложений в Oracle Solaris Studio. - student2.ru

Рисунок 6.

Из обзора видно, что 30% времени ушло на User Lock Time, 30% времени потоки простаивали, 12% ждали ЦП и 22% выполнялись на ЦП. Обнаружено: 2 дедлока и 2 гонки за ресурсы, с подробным описанием (в какой функции, в какой строчке коде).




Заключение

В ходе работы были даны понятия параллельной и распределенной вычислительной системы, рассмотрена архитектура данных систем, высокопроизводительные языки и предъявляемые критерии для ИСР.

В результате исследования Oracle Solaris Studio IDE показала себя как мощный набор инструментов для разработки многопоточных приложений. В ее состав входят основные библиотеки для программирования: Pthread, OpenMP и MPI. OSS поддерживает высокопроизводительные языки С, С++ и HPF. Также, в ее состав входит профилировщик Performance Analyzer, который необходим для выполнения различных типов анализа параллельных приложений для систем как с распределенной, так и с общей памятью. При помощи этого инструментария можно получить ответы на различные вопросы, относящиеся к производительности и эффективности параллельного кода.

Основной недостаток OSS – это поддержка только ОС Oracle Solaris, Oracle linux и Red Hat Linux.


Наши рекомендации