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

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

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

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

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

Рисунок 4.

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

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

Рисунок 5.

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

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

Рисунок 6.

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

Для выявления типичных ошибок и поверхностного анализа при многопоточном программирование достаточно воспользоваться внутренними средствами OSS. Для подробного анализа производительности и эффективности многопоточных и распределенных приложений необходимо обратится к компоненту Performance Analyzer.

Заключение

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

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

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