Среда IDE NetBeans 6.8 с подключаемым модулем C/C++/Фортран имеет в своем составе средство анализа объема ввода-вывода, которое отслеживает ввод и вывод данных в проектах C/C++. Это средство обеспечивает общее графическое представление операций чтения и записи в проекте, подробное представление отдельных записываемых и считываемых файлов, а также количество записываемых или считываемых байтов.
В этом учебном курсе описано применение средства анализа объема ввода-вывода для проектов C/C++ в системах Solaris 10 или OpenSolaris. Это средство поддерживается только в операционных системах Solaris, так как для сбора системных и программных данных необходимо средство Solaris DTrace. Средство анализа объема ввода-вывода по умолчанию выполняется при запуске проекта C или C++ среды NetBeans в операционной системе Solaris. При необходимости его можно отключить в свойствах проекта.
Если используется система Windows или MacOS X, а в сети доступна система Solaris, то следует обратить внимание на то, что разработчик может запускать среду IDE локально на компьютере PC или Mac и настроить проект на использование системы Solaris в качестве удаленного узла разработки. Удаленная разработка позволяет применять средство анализа объема ввода-вывода и другие средства на основе Solaris даже при выполнении среды IDE в системах Windows или MacOS X. Функция удаленной разработки доступна только в модуле C/C++/Фортран среды IDE NetBeans. Для получения дополнительных сведений о настройке сборки на удаленном узле разработки см. Учебный курс по удаленной разработке на языке C/C++.
В этом учебном курсе используется проект, выполняемый в одноядерной системе на базе процессора Solaris SPARC. Выполнение действий, описанных в руководстве, возможно при запуске среды IDE NetBeans версии 6.8 в операционных системах Solaris на компьютерах на основе SPARC или x86. Обратите внимание на то, что понятие "операционная система Solaris" в этом руководстве относится к системам OpenSolaris и Solaris 10.
Сбор данных в вводе-выводе
Сбор данных ввода-вывода выполняется с помощью средства DTrace, применяемого для отслеживания операций программ, запущенных в системах Solaris 10 и OpenSolaris. Особый сценарий DTrace перехватывает системные вызовы Solaris, связанные со следующими операциями ввода-вывода: открытие, создание, закрытие, чтение, запись. Этот сценарий собирает данные и передает их в среду IDE NetBeans для анализа. Затем среда IDE отображает сведения в графическом представлении, а также в табличном виде при нажатии кнопки "Детали ввода/вывода".
Настройка среды Solaris в целях учебного курса
Для применения средства анализа объема ввода-вывода используемая при выполнении среды NetBeans учетной записи Solaris должны быть присвоены достаточные полномочия DTrace на отслеживание поведения системы. Учетная запись пользователя должны иметь полномочия dtrace_user, dtrace_proc и dtrace_kernel.
Для проверки полномочий DTrace введите следующую команду в командной строке: /bin/ppriv $$
Если учетная запись имеет требуемые полномочия, то команда ppriv должна возвратить следующие данные:
E: basic,dtrace_kernel,dtrace_proc,dtrace_user
I: basic,dtrace_kernel,dtrace_proc,dtrace_user
P: basic,dtrace_kernel,dtrace_proc,dtrace_user
L: all
Строка, начинающаяся с "I:", имеет особое значение, так как в ней указываются полномочия, наследуемые программами, которые запускаются из данного интерпретатора команд. Если учетная запись не имеет требуемых наследуемых полномочий, а пользователь не имеет полномочий администратора или пользователя root, следует попросить администратора системы добавить для данной учетной записи наследуемые полномочия dtrace_user, dtrace_proc и dtrace_kernel.
При наличии полномочий администратора или пользователя root пользователь может добавить эти полномочия самостоятельно, как описано ниже.
Постоянное предоставление необходимых полномочий DTrace учетной записи пользователя:
Убедитесь в том, что для изменяемой учетной записи пользователя не выполнен вход в систему.
Выполните вход в систему в качестве пользователя root или администратора.
Введите в командной строке следующую команду и замените имя_пользователя именем изменяемой учетной записи:
$ usermod -K defaultpriv=basic,dtrace_kernel,dtrace_user,dtrace_proc имя_пользователя
Затем необходимо выполнить вход в систему с помощью этой учетной записи, запустить среду IDE NetBeans и применить средства профилирования для поставщика данных DTrace.
Временное предоставление необходимых полномочий DTrace учетной записи пользователя:
Для определения идентификатора процесса интерпретатора команд введите следующую команду:
$ echo $$
Выполните вход в систему в качестве пользователя root или администратора.
Введите следующую команду, заменяя строку идентификатор_процесса идентификатором, полученным при выполнении команды echo:
$ ppriv -s I+dtrace_user,dtrace_proc,dtrace_kernelидентификатор_процесса
Все команды, введенные в интерпретатор команд с идентификатором идентификатор_процесса, теперь наследуют требуемые полномочия. С учетной записью пользователя теперь можно запустить среду IDE NetBeans в этом интерпретаторе команд и применять средство профилирования объема ввода-вывода.
Создание проекта для учебного курса
Для демонстрации работы функций профилирования объема ввода-вывода создадим новый проект из примера приложения ProfilingDemo, который включен в состав среды IDE.
Приложение ProfilingDemo состоит из трех частей, каждая из которых повторно выполняет задачи в течение 10 секунд. При этом используются различные способы, позволяющие наглядно отобразить в действия программы средствах профилирования. Первой задачей является запись данных в файл, после чего выполняются определенные вычисления. Количество задач вычисления зависит от количества ЦП.
Для компьютеров с одним ЦП в этот набор входит выполнение двух задач - операция записи в файл и выполнение определенных вычислений.
Для компьютеров с несколькими ЦП общее количество задач равно количеству ЦП. Если количество ЦП равно N, то набор включает в себя N задач: одну операцию записи в файл и N-1 операций вычисления.
Например, если узел разработки имеет 32 ядра, то программа выполняет одну операцию записи и 31 операцию вычислений. Для запуска каждой операции потребуется нажать клавишу Enter, поэтому следует обращать внимание на сообщения в окне выходных данных.
Проект ProfilingDemo разделен на следующие этапы:
Этап Sequential Demo имеет один поток и последовательно выполняет 10 операций по 10 секунд. Выполнение этого этапа может занять определенное время в системе с большим количеством ЦП, так как при этом последовательно выполняется несколько наборов задач.
Этап Parallel Demo содержит несколько потоков и одновременно выполняет операцию записи в файл и операции вычислений в разных потоках, количество которых равно количеству ЦП. На многоядерных компьютерах этот этап выполняется гораздо быстрее, чем этап Sequential Demo, так как то же количество операций теперь выполняется одновременно. При этом потоки могут обращаться к одинаковым данным, что может привести к неточным результатам. Потоки в приложении ProfilingDemo не используют общие данные, поэтому вероятность получения неточных результатов отсутствует. В других программах такая ситуация возможна.
Этап Pthread Mutex Demo также имеет несколько потоков и выполняет те же операции записи и вычисления, что и другие этапы. При этом код использует взаимные блокировки исключений для предотвращения перекрывающегося доступа к определенным функциям из нескольких потоков.
Создание проекта ProfilingDemo
Откройте мастер "New Project" с помощью команды "File" > "New Project".
Выберите в мастере категорию "Samples", а затем – подкатегорию "C/C++".
Выберите пример "Profiling Demo", как показано на рисунке, а затем нажмите кнопку "Next".
Название проекта и его расположение выбираются разработчиком. В данном примере используется имя по умолчанию "ProfilingDemo_1" и каталог NetBeansProjects.
Нажмите кнопку "Finish", чтобы выйти из мастера и создать проект.
Выбор настройки профиля проекта
Окно свойств проекта содержит параметры настройки профиля, которые позволяют определить средства профилирования, завпускаемые при выполнении проекта. Для отображения средства анализа объема ввода-вывода следует использовать настройку профиля "DTrace для C/C++, расширенная версия", в которой указаны все доступные средства профилирования. В целях этого руководства подробно рассмотрим средство анализа объема ввода-вывода, для чего создим отдельную настройку профиля, содержащую меньшее количество средств профилирования. Данное действие не является обязательным.
Для создания новой настройки профиля выполните следующие действия.
Щелкните имя проекта правой кнопкой мыши и выберите команду "Свойства", чтобы открыть диалоговое окно "Свойства проекта".
Выберите категорию "Профиль". Будет выбрана настройка "DTrace для C/C++, расширенная версия".
Нажмите кнопку "..." рядом со списком "Настройка профиля" для открытия окна "Диспетчер настроек средств профилирования".
В списке "Настройки средства профилирования" выберите элемент "Управление настройками".
В диалоговом окне "Диспетчер настроек средства профилирования" выберите элемент "DTrace для C/C++, расширенная версия".
Нажмите кнопку "Дублировать".
Нажмите кнопку "Переименовать" и введите имя "Ввод-вывод памяти ЦП", а затем нажмите кнопку "ОК".
На этом снимке экрана представлено диалоговое окно "Имя", а также диалоговые окна, в которые необходимо вызвать перед отображением окна "Имя".
Нажмите кнопку "ОК" в диалоговом окне "Диспетчер настроек средств профилирования".
В диалоговом окне "Диспетчер средств профилирования" выберите новую настройку "Ввод-вывод памяти ЦП".
В списке средств удалите флажки для средств "Микросостояния потока" и "Использование потоков", а затем нажмите кнопку "ОК".
Для выбора настройки откройте диалоговое окно "Свойства проекта", выберите настройку профиля "Ввод-вывод памяти ЦП" и нажмите кнопку "ОК".
Создание и выполнение проекта ProfilingDemo
(Необязательно) При необходимости отображения выходных данных проекта в окне "Вывод" среды NetBeans, как показано в данном руководстве, щелкните узел проекта ProfilingDemo правой кнопкой мыши и выберите команду "Свойства". В окне "Свойства проекта" щелкните узел "Выполнение" на панели "Категории" и выберите окно вывода в качестве типа консоли. Нажмите кнопку "OK".
Правой кнопкой мыши щелкните узел проекта ProfilingDemo и выберите команду "Построить".
На вкладке "Output" отобразятся результаты сборки, как показано ниже.
На рисунке отображен компилятор сс коллекции средств Sun Studio. Также возможно использование компилятора gcc для C в среде GNU.
Правой кнопкой мыши щелкните узел проекта ProfilingDemo и выберите команду "Run".
При выполнении проекта ProfilingDemo нажмите клавишу Enter в случае вывода соответствующего запроса.
Откроется вкладка "Монитор выполнения", на которой отображается динамический график для средства анализа объема ввода-вывода, а также для других средств, определенных в данной настройке профиля. В этом случае используется созданная настройка профиля "Ввод-вывод памяти ЦП", поэтому отображаются только три средства.
Чтобы просмотреть все средства, следует увеличить размер вкладки "Монитор выполнения". Для этого необходимо щелкнуть верхнюю границу вкладки и перетащить ее вверх. На приведенном выше рисунке вкладка "Монитор выполнения" увеличена по вертикали и горизонтали, что упрощает просмотр данных. Пользователь также может увеличить высоту определенного графика, перетащив его верхнюю границу.
Обратите внимание на то, что программа ProfilingDemo выводит сообщения о выполняемых операциях в окне вывода. Это позволяет сравнить вывод с графическими данными средств в среде IDE. Например, перед выводом запроса на нажатие клавиши Enter программой отображается значение истекшего времени выполнения. После этого отображаются сведения о выделяемом объеме памяти, выполняются вычисления, а затем память освобождается. График отражает действия программы.
Для целей данного руководства выполните все этапы программы до ее завершения, нажимая клавишу Enter при выводе соответствующего запроса. Собранные данные будут сохранены, а затем проанализированы для демонстрации возможностей средства анализа объема ввода-вывода.
Обзор использования ввода-вывода
Средство использования ввода-вывода отображает общие сведения об операциях чтения и записи программы при запуске проекта.
Следующий снимок экрана был сделан в начале выполнения части программы SEQUENTIAL DEMO, в которой две задачи выполняются последовательно в одном потоке. После запуска программа будет ожидать нажатия пользователем клавиши Enter. При нажатии пользователем клавиши Enter в момент времени 0:02, программа записывает символы во временный файл. Это действие отражается в средстве анализа объема ввода-вывода в виде оранжевой линии, которая показывает записанные байты. Обратите внимание на следующие аспекты:
Оранжевая линия средства показывает количество байтов, записанных в секунду. Программа ProfilingDemo сообщает о том, что в процессе выполнения последовательной программы записывается 39690240 байтов или около 38,7 МБ. При сложении всех значений точек на оранжевой линии от 2 секунд до 12 секунд общая сумма составит около 38,7 МБ.
Значение системного времени в средстве анализа объема ЦП во время этого этапа возрастает, так как программа использует системные вызовы для создания данных и их записи на диск.
Средство анализа объема памяти отображает выделенную "кучу" памяти постоянным объемом 8 КБ.
В нижней части окна "Монитор выполнения" отображаются ползунки для управления представлением графиков. Наведите указатель мыши на конечные точки для получения сведений о них.
Нажмите и удерживайте кнопку мыши на горизонтальной полосе прокрутки в нижней части окна, а затем переместите ползунок влево, чтобы отобразить начало выполнения программы. Остальные графики также перемещаются, отображая сведения о каждом из аспектов (ЦП, память, потоки) в ходе выполнения, что позволяет отслеживать взаимосвязь параметров.
Перетащите график слева направо, чтобы просмотреть весь процесс запуска.
Нажмите кнопку "Детали ввода-вывода". Откроется вкладка "Детали ввода-вывода", содержащая сведения о стандартном вводе и выводе, а также о временных файлах, которые считываются и записываются программой.
Файлы, отмеченные флажками, были закрыты, а файлы, отмеченные желтым значком, остаются открытыми для действий чтения и записи.
Обратите внимание на то, что программа только периодически выводит запрос на нажатие клавиши Enter, поэтому данные в столбце "Считанные байты" не требуются. Чтобы удалить столбец "Считанные байты", следует нажать кнопку справа от заголовков столбцов для вызова диалогового окна "Изменить видимые столбцы". Снимите флажок для столбца "Считанные байты" и нажмите кнопку "ОК".
Предположим, что на данном этапе необходимо узнать подробные сведения о том, как программа использует временные файлы. Щелкните одно из имен файлов на вкладке "Детали ввода-вывода" для просмотра списка функций, открывших и закрывших файл. Имена функций отображаются на панели справа от таблицы файлов.
Дважды щелкните функцию на правой панели, чтобы открыть файл исходного кода, в котором вызывается функция. В этом случае для функции work_run_syscpu был открыт файл common.c.
На вкладке "Детали ввода-вывода" можно указать необходимый временной интервал. В окнах выбора времени выберите или введите требуемое количество секунд для начала и окончания интервала. При вводе значения секунд необходимо нажать клавишу Enter.
При этом список функций обновляется, отображая только данные, собранные в течение этого интервала. Это позволяет просмотреть количество записанных и считанных байтов в определенный интервал времени. График также обновляется для контрастного отображения выбранного интервала по сравнению с остальным временем выполнения, которое затемняется.
В окне "Монитор выполнения" показано, что операция записи была запущена в самом начале выполнения. Эта точка представляет собой момент времени, в который последовательная часть проекта профилирования начинает запись во временный файл. Последовательная демонстрация содержит две задачи по 10 секунд, поэтому для локализации ее операций следует рассмотреть интервал с 0:00 до 0:27 секунд, чтобы учесть время, необходимое для нажатие клавиши Enter.
На вкладке "Детали ввода-вывода" установите конечное значение 0:27. Затем данные фильтруются для отображения сведений о вводе-выводе последовательной фазы. Обратите внимание на то, что графические индикаторы также отображают эффект от выбора временного интервала для фильтрации.
Обратите внимание на то, что на вкладке "Детали ввода-вывода" в течение временного интервала последовательной демонстрации отображается один временный файл. Поток открывает файл, записывает в него сведения и закрывает. Щелкните файл, чтобы отобразить функции, которые обращаются к файлу, а затем дважды щелкните функцию, чтобы просмотреть исходный код.
В окне монитор выполнения ползунок перемещается на момент времени 0:30, в который запись после паузы начинается повторно. Пауза в записи возникает из-за выполнения вычислений, в ходе которых данные не записываются. Обновленные данные свидетельствуют о том, что программа приступает к выполнению части PARALLEL DEMO, а пользователь нажимает клавишу Enter для запуска задач. После этого запись на диск и вычисления выполняются параллельно в различных потоках. Для применения фильтра к операциям параллельного выполнения перейдите на вкладку "Детали ввода-вывода" в раздел ввода времени, введите начальное значение 0:28 и конечное значение 0:41, а затем нажмите клавишу Enter для фильтрации данных ввода-вывода параллельного выполнения.
Обратите внимание на то, что на вкладке "Детали ввода-вывода" в течение временного интервала параллельной демонстрации отображается несколько временных файлов. Это выполняется даже в том случае, если запись в файл выполняется в одном потоке, так как каждую секунду выполняется переключение на новый файл. В ходе вычислений запись на диск не выполняется.
Щелкните один из временных файлов и убедитесь в том, что функция parallel_threadfunc открывает и закрывает файлы.
На следующем рисунке видно, что в момент времени 0:40 данные ввода-вывода снова изменяются. В этот момент программа начинает выполнение части PTHREAD MUTEX DEMO, а пользователь нажимает клавишу Enter. Отфильтруйте данные для этой части, установив начальное значение 0:41 и максимальное конечное значение. Если ввод значений выполняется вручную, нажмите клавишу Enter.
На вкладке "Детали ввода-вывода" отображается несколько файлов, открытых при выполнении демонстрации PTHREAD MUTEX DEMO.
Один поток выполняет запись в файлы и каждую секунду переключается на другой файл, как и при параллельном выполнении. При этом используются блокировки mutex, поэтому поток записи иногда блокируется потоком вычисления и не может выполнять постоянную запись.
Попробуйте запустить программу еще раз с включенным средством использования потока. Его можно добавить в настройку профиля, созданную в рамках этого руководства. Для этого выберите из меню "Средства" команду "Средства профиля", а затем установите настройку и средство анализа использования потоков.
Дополнительные сведения
Дополнительные сведения о технологии DTrace, используемой в фоновом режиме для компиляции данных по запущенному проекту, см. на портале BigAdmin DTrace.
В этом учебном курсе рассмотрены следующие сведения о средстве профилирования использования ввода-вывода:
Данные об операциях ввода-вывода на платформах Solaris собираются автоматически с помощью средства Solaris DTrace.
Отображаемые графические индикаторы профилирования можно выбрать посредством выбора настроек профиля.
Средство анализа объема ввода-вывода содержится только в настройке "DTrace для C/C++, расширенная версия" или в пользовательских настройках.
Параметры профилирования расположены в категории "Профиль" свойств проекта.
При нажатии кнопки "Детали ввода-вывода" на экран выводятся более подробные сведения об операциях ввода-вывода программы.
При щелчке по функции на вкладке подробной информации файл исходного кода открывается на строке, в которой вызывается данная функция
Если в сети доступна система Solaris, то возможно использование средства анализа объема ввода-вывода на компьютере под управлением Windows или Mac. Для этого необходимо настроить систему Solaris в виде узла удаленного управления для сборки и выполнения проектов.