Софт-Архив

Vtune img-1

Vtune

Рейтинг: 4.5/5.0 (1908 проголосовавших)

Описание

Vtune

VTune 2015 currently does not work with Linux 4.0, due to changes in the kernel that prevent the sepdk module from building. You need VTune 2016 which was released in August 2015.

VTune Amplifier XE 2013

Follow the instructions for 2011. If you see errors while building the driver, it may be because intel is using deprecated functionality subsections. In the following sections, lines beginning with "-" indicates code that should be removed, lines beginning with "+" should be added.

Missing asm/system.h

Edit lwpmudrv.c as follows:

Implicit declaration of this_cpu_read kmap_atomic and kunmap_atomic deprecated

Edit vtssp/user_vm.c as follows:

VTune Amplifier XE 2011

Starting with update 7 of the VTune Amplifier XE 2011, you can now use it on Linux 3.x and hence on Archlinux, even though the latter is not officially supported. See also: VTune on Archlinux

Using the following HOWTO you "install" VTune locally and can run it. Vtune requires a kernel module for all functionality. Nevertheless, VTune in user mode is very powerful and comes with lots of possibilities for profiling. Have fun!

Preparation:

  • download VTune Amplifier XE 2011 (there is a free version for non-commercial use on linux)
  • unpack the tarball
  • install libpng12 from AUR
  • install libjpeg6 from AUR
  • install rpmextract from extra repo
  • install linux-headers from core
  • if using a custom kernel, ensure that your kernel is compiled with the following options:
    • CONFIG_MODULES=y
    • CONFIG_MODULE_UNLOAD=y
    • CONFIG_SMP=y
    • CONFIG_KPROBES=y
    • CONFIG_PROFILING=y
    • CONFIG_OPROFILE=y

Now to "install" vtune:

Kernel module:

  • Create the group vtune and add yourself.
  • Build and load the driver in /opt/intel/vtune_amplifier_xe_2011/sepdk/src/
  • Add your license file to /opt/intel/licenses/

You can now start vtune:

For ease-of-use I suggest you move the ./opt/intel/vtune_amplifier_xe_2011 to your homefolder or similar and add a symlink to the amplxe-gui binary to one of your PATH folders or similar.

Installing Intel VTune 9.1 on Arch Linux

Другие статьи, обзоры программ, новости

Загадочный VTune

Этот сайт предназначен, прежде всего, людям, ностальгирующим по ушедшим РУССКОМУ СЛОВУ, Windows 3.1, ФОТОНУ, процессорам 486SX и иже с ними.

Конечно, времена должны идти вперед, но почему они обязательно должны уходить?

StuhlbergR 2007 ©

News In Brief

Компания Acer, занимающая седьмое место по производству персональных компьютеров в мире, объявила о росте совокупного оборота за первое полугодие на 72%: он достиг 2.36 млрд. долларов по сравнению с 1.36 млрд. в первом полугодии 1994 года. Успехи Acer в сфере сбыта и развития дистрибьюторской сети во многом объясняются применением новой концепции fast-food.

Стивен Кузара, глава представительства Acer в России и странах СНГ, комментируя столь быстрый рост компании, заявил: "Наша организационная модель "клиент-сервер" предполагает, что большинство решений принимается на местах. Это позволяет региональным руководителям очень точно отслеживать все изменения конъюнктуры рынка, создавать высокий спрос на нашу продукцию и быстро завоевывать преданность покупателей".

19 сентября компания Intel объявила, что для микропроцессора нового поколения, до сих пор именовавшегося P6, выбрано название Pentium Pro. Устройство, содержащее 5.5 млн. транзисторов, будет представлено на рынке в четвертом квартале с.г.

"Присваивая процессору следующего поколения такое имя, мы полагаемся на высокую репутацию, которую завоевало название Pentium, подразумевая при этом, что новый микропроцессор лучше своего предшественника, - заявил Дж. Карл Эверетт (G. Carl Everett), старший вице-президент группы продуктов для персональных компьютеров компании Intel. - Согласно нашим исследованиям, в соответствующих сегментах рынка название Pentium пользуется доверием не менее, чем у 95% опрошенных. Мы уверены, что упомянутая ассоциативная связь будет способствовать успеху нового процессора, когда он появится на рынке".

Загадочный VTune

Антон Гололобов

На выставке Windows Expo'95 фирма Intel представила новый программный отладчик.

Рынок компьютерных технологий изменяется стремительно. И все новое software мгновенно превращается в "хорошо забытое старое". Поэтому нет ничего удивительного в том, что основные сложности у разработчиков ПО вызывает переход на архитектуру Pentium. Причем, как только возникают проблемы с отладкой, все разом бегут за советом к маме-Intel, которая поначалу честно старалась работать с каждым из просителей в индивидуальном порядке (и, надо сказать, занималась этим весьма успешно: 64 компании после получения рекомендаций от Intel сумели повысить производительность своего ПО на 92%). Однако, когда миграция программистов на Pentium приобрела глобальный характер, а эфир стал просто разрываться от криков "Save Our Soft", Intel справедливо решила, что гораздо проще поручить своим специалистам разработать соответствующее программное средство.

В результате на свет появился Visual Tuning Environment 1.0 (сокращенно VTune), отладчик для разработчиков Windows-приложений, который был представлен в США 12 сентября. Десятью днями позже, на выставке WinExpo'95, менеджер проекта, г-н Рамеш Субраманиам (Ramesh Subramania) сделал пространное заявление о новом продукте.

Несмотря на высокий престиж корпорации Intel, не обошлось без небольших, но весьма досадных недоразумений. Ранее было обещано, что каждый присутствующий на выступлении получит demo-версию продукта (об этом говорилось в приглашениях, полученных некоторыми людьми - сам видел одного такого приглашенного). Однако уже в самом начале представители компании объявили, что таможня "не дала добро", вся пачка обещанных "демонстрашек" осталась лежать где-то в районе "Шереметьево". Впрочем, мне до сих пор не понятно, насколько это соответствует истине (мнительность воина Уголовным кодексом удвоена), ибо ответ представителя Intel на вопрос о работоспособности demo-версии не отличался особенной четкостью, и вполне возможно, упреки в адрес таможни есть не что иное, как дымовая завеса.

Все это тем более странно, если учесть следующий факт: представляя процессор Pentium OverDrive, Intel распространила документ, повествующий о планах корпорации на Windows Expo'95. В нем, в частности, было объявлено и о новом отладчике: "Intel помнит о своих друзьях, поэтому вы имеете шанс получить это мощное средство (имеется в виду VTune) бесплатно". Но в конспекте выступления г-на Субраманиама черным по белому было написано, что цена VTune в США - 395 долл. хотя он и "будет предложен русским разработчикам программного обеспечения по особой цене".

Мой наивный вопрос о том, как можно состыковать эти два заявления, привел представителей Intel в некоторое смущение. Рамеш Субраманиам откровенно заявил, что не знает, откуда появилась данная информация и что фирма, мол, планирует выпустить весьма и весьма ограниченное количество бесплатных копий для "особ, приближенных ко двору", но афишировать это событие вовсе не собирается. Причем тут же было заявлено во всеуслышание, что "все вы - друзья Intel" (за определенную сумму. - А.Г. ).

Теперь о самом продукте. Он действительно производит сильное впечатление. Правда, я не знаю, насколько он понравится программистам-отладчикам (то есть тем, для кого отладчик в первую очередь предназначен), однако с точки зрения организации интерфейса (Windows-приложение, как-никак), наглядности и удобства в работе он стоит выше всяческих похвал. Как неоднократно подчеркивали представители компании-изготовителя, его можно считать "консультантом по производительности" программного обеспечения в архитектуре Intel.

Во-первых, VTune, предназначенный для Windows 3.x и Windows 95 (увы, но версии для DOS и OS/2 корпорация делать не намерена), является, в отличие от конкурентных продуктов, "неинвазивным" инструментом (особо любопытных отсылаю к медицинской энциклопедии) - попросту говоря, сам он не вносит никаких изменений. Во-вторых, он позволяет разработчикам приложений визуально следить за своими программами, моделируя их поведение в различных средах и демонстрируя, как именно конкретное приложение (или его части) распоряжаются ресурсами системы. В-третьих, VTune может работать в трех режимах: с процессором 486, Pentium и перспективным P6, для которого выдаются различные предупреждения и рекомендации - то есть, работая на Pentium (под который, собственно, и создавался отладчик), вы можете создать приложение, которое безо всяких проблем будет работать на P6. Кроме всего прочего, пользователю предоставляется еще масса "приятных пустячков" типа: работа программы в 32-х, 16-и и 8-битном режимах (вот уж действительно по принципу "не обидеть никого"); режим подсказок Tuning Coach для программистов на C++; полностью интегрированный контекстно-ориентированный подсказчик, выдающий в реальном времени не туманные "рассуждения на тему", а четкие рекомендации и примеры выхода из ситуации; поддержка операций с плавающей точкой. Наконец (благая весть для разработчиков сетевого ПО), планируется выход версий для Windows NT и компьютеров, оборудованных двумя процессорами Pentium.

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

Все это звучит действительно многообещающе, но, увы: из-за того, что редакция не смогла получить в свое распоряжение demo-версию (причина упомянута выше), оценить описанные нововведения наши технические эксперты не смогли. Однако - чем черт не шутит? - может быть, мы и встретимся с загадочным VTune лицом к лицу, и уж тогда.

Статья опубликована в журнале "Компьютерра" #34 (114) 2 Октября 1995

Intel VTune Performance Analyzer (x86

Intel VTune Performance Analyzer 9.1.406 (x86/x64)

Intel VTune Performance Analyzer 9.1.406 (x86/x64) Год выпуска. 2010

Версия. 9.1.406

Платформа. Windows XP и старше

Системные требования. Intel(x86/x64) Processor, 128MB RAM, 200MB HDD

Таблэтка. Присутствует

Описание :

Intel VTune Performance Analyzer (анализатор производительности) — коммерческое приложение для анализа производительности программ для компьютеров на базе x86-процессоров, причем программа имеет как графический интерфейс пользователя, так и поддержку командной строки.

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

Возможности:

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

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

Просмотр исходного кода - Результаты семплирования отображаются построчно на исходный/оттранслированный код.

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

Intel Thread Profiler (Профилировщик потоков) - временная шкала показывает, что именно делают потоки и как они взаимодействуют. Он также показывает распределение работы по потокам и выявляет дисбаланс нагрузки.

Performance Tuning Utility (PTU) (Утилита настройки производительности) - PTU — отдельно загружаемое приложение, предоставляющее пользователям анализатора VTune доступ к экспериментальной технологии настройки. Сюда входит, например, Анализ доступа к данным (Data Access Analysis), который способен обнаруживать критические участки памяти и соотносить их с критическими участками кода.

Intel Parallel Amplifier (усилитель параллельности) - Parallel Amplifier — профилировщик производительности, являющийся компонентом Intel Parallel Studio. Если вы приобрели анализатор VTune, то вы также можете скачать и использовать Parallel Amplifier. Он добавляет статистическое дерево вызовов (анализ критических участков кода), причем при этом используется меньше накладных расходов, чем для построения VTune точного дерева вызовов, плюс анализ распараллеливаемости, блокировок и ожиданий.

Выявляем слабые места трехзвенных приложений

Анализатор Web-приложений VTune Enterprise позволяет выявить слабые места трехзвенных приложений ASP.NET.

Для большинства пользователей оптимизация приложений ASP.NET совершенно необходима. Однако процесс оптимизации трехзвенного приложения ASP.NET с кодом, распределенным на нескольких серверах через хранимые процедуры T-SQL, Web Services, COM Interop и/или .NET Remoting, крайне сложен. Приложение VTune Enterprise Analyzer для Web-приложений, разработанное компанией Intel, может снять большую часть проблем путем быстрого обнаружения тех областей приложений, которые требуют как небольшой доработки, так и полного перепрограммирования на системном уровне.

Начну с того, что VTune - анализатор самого последнего поколения. Его называют "Enterprise Analyzer" из-за того, что он позволяет проводить высокоэффективный анализ каждого яруса Web-приложения с классической трехъярусной архитектурой - яруса Web, приложения или объектного яруса или базы данных - на собственном сервере. При наличии только двухъярусного Web-приложения от VTune также можно получить массу полезной информации, но цена ее, впрочем, не будет равняться цене установки.

Архитектура приложения, которую я использовал для тестирования VTune, является модифицированным вариантом типового Web-приложения Microsoft´s Downhill Bikes. Она включает 4 сервера: основной Web-сервер ASP.NET, сервер SQL, сервер ASP.NET Web Services, а также компьютер, на котором находятся две библиотеки COM DLL с доступом через COM+ proxy. Это - минимальная архитектура стиля "enterprise", предназначенная только для демонстрации того, как VTune отслеживает загрузку множественных серверов, определяет части приложения, выполняемые в заданный момент времени, и суммирует данные рабочих характеристик для этих частей. Стоит отметить, что воздействие на систему во время сбора данных VTune незначительно.

Фактически, анализатор VTune Enterprise собран из двух основных компонентов: серверное приложение собирает данные с тестируемых серверов, а приложение GUI обеспечивает начало и конец сбора данных и просмотр результатов. Процедура установки VTune очень проста и не вызывает проблем (по крайней мере, у меня проблем не возникло). Однако следует иметь в виду, что сервер сбора данных и Web-сервер должны быть подключены к одному сетевому концентратору. Поэтому выполнить одновременный анализ нескольких Web-ферм с одного сервера сбора данных на данный момент невозможно.

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

Первый шаг анализа работы приложений программой VTune не имеет ничего общего с самими программными продуктами. Сначала нужно произвести имитацию большой нагрузки на серверы с помощью таких средств контроля нагрузки, как, например, Mercury Interactive´s LoadRunner или Application Center, включенных в выпуски Enterprise Architect и Enterprise Developer от Visual Studio .NET. Бесплатным альтернативным решением является Microsoft´s Web Application Stress Tool, который, возможно, отлажен не до конца, но работает неплохо.

Просмотр ярусов (Tier View)

После создания скрипта контроля загрузки можно запускать VTune. Сначала создайте новый проект и сконфигурируйте сервер сбора данных для тестирования всех серверов приложения (см. рис. 1).

Рис. 1. Для установки параметров тестирования нужно лишь указать имена серверов - поставить несколько флажков в соответствующих полях.

На данном этапе необходимо запустить программу тестирования для имитации реальной нагрузки, после чего запустить процесс сбора данных с приложения VTune´s GUI. Время работы этого приложения не ограничено; сервер сбора данных можно в любой момент остановить.

Просмотр результатов тестирования осуществляется несколькими способами: по ярусу, по компьютеру, по объекту или по задаче. При просмотре яруса отображается диаграмма всего процесса тестирования, а также время отклика каждого яруса приложения (см. рис. 2). Таким образом предоставляется полная и точная информация о работе каждого яруса во время тестирования, что позволяет обнаружить области, требующие дополнительного анализа.

Рис. 2. Вид Tier View в VTune обеспечивает наглядное представление о работе ярусов приложения.

Единственным недостатком диаграмм VTune, не позволяющих назвать их полностью интуитивными, является отсутствие (за некоторыми исключениями) контекстных меню. Например, при нажатии левой клавиши мыши можно перетащить в нужно место выделенный временной отрезок диаграммы. Я один раз попробовал: выделил все, как должно, и понадеялся на то, что при нажатии правой клавиши мыши появится меню со всеми доступными опциями. Этого не произошло, и мне пришлось довольно долго изучать справку - для того чтобы выяснить, что для увеличения отображения выделенной области было достаточно нажать кнопку Time Filter на панели инструментов. Да и потом, при всей почти безусловной полезности Tier View, в какой-то момент возникает желание получить с его помощью немного больше информации, нежели было доступно (например, узнать о действиях, выполняемых при выделении части диаграммы или по мере подведения к ней курсора).

Просмотр компьютеров (Machine View), задач (Task View) и объектов (Object View)

Вид "Machine View" (см. рис. 3) обеспечивает более глубокое понимание работы приложения, нежели просмотр отдельных ярусов. Согласно своему названию, вид "Machine View" позволяет просматривать рабочие характеристики и реакцию на нагрузку каждого физического сервера. Ярусы можно фильтровать и просматривать одновременно, а также выбирать атрибуты сервера для включения их в диаграмму (например, можно выбрать такие характеристики, как загруженность CPU, использование физической и виртуальной памяти, I/O диска, занятие полосы пропускания сети и время отклика).

Рис. 3. В Machine View показана работа каждого сервера, задействованного в тестировании.

Согласитесь, что здесь приводится весьма полезная информация. Лично я предпочитаю открывать этот вид уже после тестирования, поскольку он позволяет достичь необходимого баланса между получением общего представления выяснением подробностей, поэтому выявлять проблемные области здесь получается легче и быстрее. Однако в Machine View наблюдается тот же недостаток интуитивности, что и у Tier View, хотя это не особо беспокоит, если к этому привыкнуть.

Наряду с Tier View и Machine View, два других рассматриваемых вида по всем показателям являются теми областями, где возможности VTune проявляются в полной мере, и где разработчики ASP.NET добились максимальных результатов, несмотря на затраченные время, деньги и усилия. Начиная с Task View (см. рис. 4), в VTune отражается информация, которая знакома любому программисту-разработчику: запросы URL, методы вызовов и вызовы баз данных. Эти типы вызовов отображаются непосредственно в физических ярусах трехъярусной архитектуры приложений.

Рис. 4. В Task View представлена подробная информация по запросам ASP.NET и SQL, а также по методам вызовов.

Task View предоставляет минимальное, среднее и максимальное время отклика для всех выполняемых запросов и вызовов. Кроме этого, происходит вычисление загрузки по каждому вызову - это среднее время отклика, умноженное на количество выполнений данного вызова. Высокие показатели загрузки могут означать, что выполняемый элемент не полностью оптимизирован, и на него стоит обратить особое внимание.

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

Одним упущением в разработке Task View, с которым я столкнулся, была невозможность как сохранения, так и экспорта данных в другой формат. Это довольно странно, поскольку в меню File имеется как строка Export, так и команда Save As, однако они всегда недоступны (хотя должны быть активными). В справке по VTune говорится о том, что эти функции должны работать, однако, программа этого не учитывает. И, наконец, продукту абсолютно не хватает зависимой от контекста интеграции между различными видами просмотра - кажется, что последние представляют скорее отдельные блоки несвязанных между собой данных, а не являются просто различными способами просмотра одной и той же информации.

Task View позволяет просматривать полные данные по работе приложения в виде таблицы, тогда как Object View предоставляет подробную информацию по всей архитектуре. На рис. 5 видно, что Object View отображает поток выполнения для всех ярусов, серверов и объектов. Основное назначение данного вида просмотра - продемонстрировать работу всех компонентов вместе, а не то, как они работают. Идея хороша, но (более чем вероятно) если вам уже приходилось заниматься построением трехъярусной архитектуры, то похожая диаграмма - и, возможно, даже более подробная - у вас уже имеется.

Рис. 5. Object View отображает взаимосвязи между ярусами, серверами и объектами.

Эффективное использование VTune

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

Используйте Object View, чтобы убедиться в своем полном понимании архитектуры приложения перед началом анализа результатов его работы. Это поможет избежать массы неприятностей.

Используйте Tier View для проверки того, не занимает ли какой-либо ярус большую часть времени отклика. Это позволяет избежать проблем с переиндексацией базы данных в тот момент, когда необходимо только повышенное использование возможностей кэширования ASP.NET.

Используйте Machine View для определения того, не снижается ли производительность из-за сбоев Web-сервера или сервера приложений. Может случиться так, что серверу баз данных просто необходима дополнительная память или процессоры. Не тратьте время на анализ кодов, когда на самом деле необходимо обновлять "железо". Эта информация поможет определить дальнейшие необходимые действия. В этих случаях полезно соотнести стоимость VTune с затратами на (возможно) не совсем правильное обновление аппаратного обеспечения, включая затраты на консультантов и т.д.

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

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

VTune Enterprise Analyzer для Web-приложений от Intel может стать бесценным инструментом при тестировании приложения c трехъярусной архитектурой, направленным на повышение производительности, на этапе разработки (а не на этапе последующего использования данного приложения). VTune можно с успехом применять в средах разработки в качестве диагностического инструмента для выявления "неявных" проблем, хотя Intel не предполагала их для использования в таком качестве.

Основной для построения мощных приложений с трехъярусной архитектурой является .NET Framework. Однако даже здесь задача построения такой архитектуры может быть довольно трудной, а Visual Studio .NET пока не позволяет создавать полностью оптимизированные системы. VTune Enterprise Analyzer предназначен для заполнения именно этого пробела и, при правильном использовании, помогает достичь максимальной эффективности приложений.

Кен Мак-Нейми (Ken McNamee) - старший инженер по разработке ПО корпорации RelayHealth Corp. - ведущего провайдера безопасных Web-решений. Ранее он возглавлял группу разработчиков, занимавшихся переводом сайта Home Shopping Network´s e-commerce, HSN.com на 100% ASP.NET с использованием C#. Контактный адрес электронной почты: mailto:kenmcnamee@hotmail.com .

asp:factfile

VTune Enterprise Analyzer для Web-приложений - инструмент диагностирования производительности трехъярусных Web-архитектур.

  • Подробная информация о производительности ASP.NET по времени отклика, вызовам баз данных серверов SQL, а также вызовам DCOM, Web Services и .NET Remoting.
  • Необходимо: Windows 2000 с SP2 или более поздней версии.
  • Необходимо: SQL Server 2000 на ярусе базы данных.
  • Можно использовать с приложениями Windows DNA или .NET Web.
  • Простая установка с подробными инструкциями.
  • Включены: четыре лицензии на VTune Performance Analyzer 6.0 (стоимостью $700 каждая).

Intel Corp.

2200 Mission College Blvd.

Santa Clara, Calif. 95052

Семейство продуктов Intel VTune Performance Analyzer

Семейство продуктов Intel VTune Performance Analyzer

Наталия Елманова

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

реди средств анализа производительности особой популярностью у разработчиков пользуются продукты семейства Intel VTune Performance Analyzer — главным образом благодаря предоставляемым ими возможностям оптимизации при создании программного обеспечения. Указанные продукты позволяют обнаруживать в коде приложений команды, на которые тратится слишком много ресурсов процессора, на основании чего разработчики могут быстро выявить и устранить связанные с такими участками кода потенциальные узкие места, ускорив тем самым процесс разработки приложений.

Ниже мы обсудим особенности последних версий продуктов этого семейства.

VTune Performance Analyzer 7.0 для Windows

Анализатор производительности VTune Performance Analyzer 7.0 для Windows, выпущенный в апреле нынешнего года, поддерживает операционную систему Microsoft Windows Server 2003 и среду разработки Visual Studio .NET 2003 (в последнюю он может быть интегрирован в качестве инструмента среды разработки). Анализатор производительности Intel VTune версии 7 позволяет повысить эффективность оптимизации приложений и Web-решений на индивидуальных и многоуровневых платформах на базе процессоров Intel.

Пакет VTune версии 7.0 поддерживает все процессоры Intel, включая Intel Celeron, а счетчики производительности доступны для процессоров Intel Pentium 4, Intel Xeon, Intel Itanium 2, Intel PXA250 и Intel PXA262. Совместимость со средой разработки Microsoft Visual Studio .NET дает разработчикам возможность оптимизировать приложения и драйверы устройств для ОС Windows Server 2003 и платформ под управлением ОС Windows на базе процессоров Intel. Кроме того, VTune Performance Analyzer 7.0 поддерживает компиляторы Borland, Compaq, IBM, Intel, a также некоторые виртуальные Java-машины для Windows.

Особенностью VTune Performance Analyzer 7.0 является весьма удобное графическое представление таких данных, как последовательность вызовов функций и методов, включая функции прикладного программного интерфейса операционной системы (рис. 1 ), статистика используемых ресурсов (рис. 2 ), процессы и потоки выполнения (рис. 3 ).

Помимо этого VTune Performance Analyzer 7.0 для Windows может быть использован и для проведения удаленного анализа; в таком случае на компьютер, на котором выполняется анализируемое приложение, устанавливается специальное приложение-агент, отвечающее за сбор данных о производительности. Подобные агенты существуют для 32- и 64-разрядных версий Linux, а также для 32- и 64-разрядных версий Windows.

VTune Enterprise Analyzer 2.0 для Web-приложений. NET Edition

Пакет VTune Enterprise Analyzer версии 2.0 для Web-приложений. NET Edition позволяет находить узкие места в многоуровневых приложениях, работающих на комплексах систем с процессорами Intel, и предоставляет возможности анализа работы Web-инфраструктуры на уровне транзакций и диагностики на уровне объектов .NET. Данная версия анализатора позволяет анализировать использование процессорных ресурсов как на уровне одной операционной системы, так и для множества взаимодействующих платформ.

Пакет VTune Enterprise 2.0 для Web-приложений. NET Edition может быть использован совместно с VTune Performance Analyzer 7.0 для Windows — последний может применяться для анализа производительности отдельных частей распределенного приложения.

VTune Performance Analyzer 1.0 для Linux

В начале нынешнего года корпорация Intel представила VTune Performance Analyzer 1.0 для Linux — средство анализа и оптимизации приложений для операционной системы Linux, позволяющее достичь максимально эффективного использования возможностей процессоров Intel Pentium 4 и Intel Xeon. Этот продукт представляет собой первый специально разработанный корпорацией Intel анализатор производительности для ОС Linux. Новая версия анализатора дополняет возможности пакета Intel VTune Performance Analyzer 6.1 для приложений, совместимых с Microsoft Windows и удаленной поддержкой Linux. Благодаря большому опыту корпорации Intel в области разработки процессорных технологий созданные ею инструментальные средства, такие как Intel VTune Performance Analyzer, позволяют тщательно анализировать использование процессорных ресурсов разрабатываемым программным обеспечением.

Для повышения гибкости и удобства работы пользователей Linux новый пакет ПО Intel VTune Performance Analyzer 1.0 для Linux оснащен интерфейсом командной строки, возможностями использования сценариев и средствами анализа потоков управления, которые ранее были доступны лишь для приложений, ориентированных на операционные системы семейства Windows. Предусмотренная в новом пакете опция Pack and Go позволяет передать результаты с сервера под управлением ОС Linux обратно в систему под управлением Windows для дальнейшего анализа с помощью Intel VTune Performance Analyzer 6.1 и 7.0.

Кроме самого анализатора VTune Performance Analyzer, Linux-разработчикам доступен Intel VTune Performance Analyzer Driver Kit, содержащий драйверы с открытым исходным кодом для Intel VTune Performance Analyzer. С помощью этих драйверов разработчики смогут использовать анализатор при работе с неподдерживаемыми дистрибутивами Linux и ядрами этой ОС с измененным под свои нужды кодом.

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

Наряду с анализаторами производительности VTune корпорация Intel предлагает и другие средства разработки, в том числе компиляторы Intel C++ и Intel Fortran, анализатор потоков Intel Thread Checker 1.0 и библиотеку Intel Integrated Performance Primitives. Более подробную информацию можно найти на Web-сайте корпорации Intel по адресу: www.intel.com/software/products/.

В России инструментальные программные продукты Intel можно приобрести в компаниях «1С», SoftLine, «Диалог СФТ» и «Интерфейс». Более подробную информацию можно найти на Web-сайте www.intel.com/software/products .

Инструменты оптимизации приложений Intel

Инструменты оптимизации приложений Intel

С выходом релиза Microsoft Windows Vista сообщество разработчиков программного обеспечения ощутило, на сколько важна производительность компьютера. Не смотря на то, что компания Microsoft тратит серьезные усилия на то, чтобы программы, входящие в состав системы работали максимально быстро, задача оптимизации производительности пользовательских приложений лежит на плечах их разработчиков. Компания Intel предлагает уникальный набор программных инструментов, которые помогут оптимизировать производительность приложений, критичных к вычислительным ресурсам, на платформах Intel. В данной статье рассматриваются принципы использования анализатора производительности Intel VTune Performance Analyzer версии 9.0 в процессе оптимизации приложений от системного уровня до уровня микроархитектуры процессора.

С выходом Windows Vista оживилось и сообщество разработчиков. На многочисленных девелоперских форумах и в персональных блогах известных специалистов во всю обсуждаются впечатления от новой ОС от Microsoft. И если в пользовательских разделах споры идут на темы вроде «рюшечеки» и «бантики» в Vista – зачем их так много?», то в серьезных обсуждениях все же появляются темы о производительности системы на современных аппаратных платформах и способах ее повышения.

Действительно, системные требования Vista к «железу» поражают своим размахом, подогревая разговоры о «всемирном заговоре» производителей «софта» и «железа». Однако не стоит забывать, что со стороны разработчиков Windows было бы неразумно не использовать всю мощь, которую могут предоставить современные платформы, и включить в состав системы «прожорливые фичи», которые требуют гигабайты оперативной памяти и гигагерцы процессора. Тем и хорош семейственный подход Microsoft, когда разные выпуски Windows соответствуют разным сегментам рынка, от Home до Enterprise, имеющим разные “усредненные” показатели производительности платформ.

Тем не менее, очевидно, что компания Microsoft осознает конечность аппаратных ресурсов и серьезно относится к производительности приложений, по крайней мере, встроенных в саму систему, и предоставляет большой набор системных инструментов, позволяющих «подтьюнить» OC, чтобы приложения выполнялись быстрее. Неспроста появились и такие инновационные технологии как ReadyBoost и ReadyBoot, которые призваны немного скомпенсировать недостатки такого «узкого места» в платформе как система ввода-вывода.

А что же пользовательские приложения? Будут ли они работать быстрее на Windows Vista? Как их сделать более производительными? Решение этих вопросов Microsoft оставляет нам, разработчикам приложений. Хотя, справедливости ради, надо сказать, что нам в помощь компания сделала серьезные изменения в ядре – переработанный диспетчер задач с более «справедливым» распределением временных слотов; модифицированная система операций ввода-вывода, как в плане распределения приоритетов, так и завершения и отмены; усовершенствованный диспетчер памяти с приоритетом страниц в очереди и функцией SuperFetch – все это поможет имеющимся приложениям работать эффективнее, а разрабатывающимся – использовать новые особенности системы в полной мере. Visual Studio .NET 2005, Platform SDK и высокопроизводительный компилятор С/C++ компании Microsoft помогут нам разрабатывать эффективные приложения, использующие мощь платформы. Но весь ли имеющийся потенциал будет использован? Сможет ли компилятор распознать все огрехи в коде программиста и оптимизировать код должным образом? Можем ли мы быть уверены, что все инновационные технологии, заложенные производителем процессора в чип, используются во время исполнения программы?

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

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

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

Необходимо отметить, что крупнейшие компании производители софта уже отреагировали на тенденцию в развитии микропроцессорных технологий – эра галопирующего увеличения тактовых частот процессоров закончилась, наступила эпоха инновационных архитектур и мульти-ядерных процессоров. Adobe, Macromedia, Oracle, Pixar, SAP, Symantec, Yahoo – вот далеко не полный список компаний, которые включились в гонку за эффективностью своего кода, выполняемого на платформах IA-32 и Intel 64, и активно оптимизируют свои приложения с использованием инструментов.

Оптимизация программного обеспечения включает в себя несколько понятий. Прежде всего, это процесс, который представляет собой некий набор итераций в ходе разработки ПО (рис.1.) и требует дополнительных усилий для оценки производительности приложения. Следующее понятие – методология. На сегодняшний день методология оптимизации ПО для всех существующих платформ разработана и хорошо описана. Примером может служить отличная книга “The Software Optimization Cookbook” для платформ IA-32, написанная инженерами Intel [1], и изданная в издательстве Intel Press. И, наконец, инструменты, которые помогут оптимизировать ПО. Intel, как компания-производитель платформ, позаботилась о том, чтобы разработчики имели в своем распоряжении полный набор инструментов [2], позволяющих разрабатывать эффективные, а значит конкурентоспособные, приложения для современных платформ.

Рис. 1. Процесс оптимизации программного обеспечения

Перед тем как запускать анализатор производительности, создайте хороший тест (benchmark) для своего приложения. Хороший benchmark означает, что он должен быть повторяемым, легко запускаемым, поддающимся измерению, и моделирующим основной путь выполнения оптимизируемого приложения, т.е. репрезентативным. После того как benchmark создан, прогоните его для измерения производительности своего приложения. Это будет ваш базовый уровень производительности. Далее запускайте анализатор и находите узкие места в приложении. Найдя их, исправляйте код, пересоберите приложение и прогоните benchmark чтобы понять, увеличилась ли производительность. Повторяйте этот цикл до тех пор, пока не достигнете поставленной цели, либо пока у вас не закончатся ресурсы. Правильная постановка целей и осознание объема человеческих ресурсов и времени, которые можно потратить, всегда помогают сделать итерационные процессы более эффективными.

Сегодня мы поговорим об анализаторе производительности Intel VTune Performance Analyzer. Компания Intel приурочила к выпуску на рынок Windows Vista новый релиз VTune 9.0, основным маркетинговым преимуществом которого является поддержка 32- и 64-разрядных платформ, управляемых Microsoft Windows Vista и Microsoft Longhorn Server. Однако прежде чем переходить к рассмотрению возможностей инструмента, напомним базовые понятия методологии настройки производительности, так как именно на них опираются технологии, реализованные в VTune. Кстати, под «настройкой» здесь и далее будем понимать некие изменения как в в вычислительной системе, так и в программном коде, т.е. то, что принято называть «тьюнингом» (tuning).

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

Начинайте всегда искать узкие места (bottlenecks) с общесистемного уровня. Бессмысленно оптимизировать исполнение кода, если ваше приложение потребляет всего 10% процессорного времени. Даже если вы увеличите эффективность исполнения кода в микропроцессоре в два раза, на общую производительность приложения это почти никак не повлияет, а ваши временные затраты на оптимизацию будут огромными. При этом, если окажется, что приложение просто «отдыхает» во время обработки запросов ввода-вывода и обмена данными на жестком диске, то замена дискового интерфейса в компьютере на более быстрый потенциально может уменьшить абсолютное время работы программы в 10 раз, тогда как усилия на архитектурном уровне дадут выигрыш в каких-нибудь 5%.

Как только вы разобрались с общесистемными проблемами (приложение должно «съедать» 100% процессорного времени во время выполнения основной нагрузки), сфокусируйтесь на узких местах в архитектуре своего проекта. Там обязательно найдется парочка ненужных функций, которые зачем-то вызываются несколько миллионов раз, а вы этого даже и не замечали. И, наконец, после того, как в проекте наведен полный порядок, можно приступать (если, конечно, еще есть желание или необходимость) к настройке на самом глубоком уровне – архитектурном. Здесь начинается все самое интересное, так как вы сможете узнать какие сюрпризы припас производитель микропроцессора или платформы, что там еще есть, помимо стандартной программной модели х86.

Опыт наших инженеров показывает, что следование данному подходу в целом может давать следующий примерный прирост производительности приложения:
  • 3х – после общесистемной настройки;
  • 2х – после настройки уровня приложения;
  • 1.1 – 1.5х – после архитектурной настройки.

Причем часто бывает, что эти уровни взаимосвязаны. Например, обращение к памяти по невыровненным адресам приводит к неполным транзакциям записи (partial writes), что сильно перегружает системную шину, и чревато простоями процессора (CPU Stall). Казалось бы, выбор платформы с более высокой тактовой частотой системной шины решает проблему (общесистемный уровень), однако разумная организация обмена данными в коде программы (настройка на уровне микроархитектуры) даст прирост производительности на любой платформе.

Общесистемный уровень настройки

Целью настроек на общесистемном уровне является увеличение производительности приложения за счет улучшения эффективности его взаимодействия с системой. Обычно усилия на этом уровне дают максимальный результат при минимальных затратах времени. Это относится особенно к приложениям, которые интенсивно используют ввод-вывод с дисковыми или сетевыми интерфейсами. Хотя, если вы знаете, что ваша программа требует преимущественно вычислительных ресурсов, то, возможно, имеет смысл вообще пропустить этот этап.

Windows Vista, как и ее предшественники, содержит Менеджер Задач (Task Manager), который отображает данные мониторинга занятости процессора, распределения памяти и операций ввода-вывода. Анализатор производительности VTune тоже может отображать эту информацию, а также данные всех встроенных системных счетчиков, которые есть в операционной системе.
  • Counter Monitor – это один из коллекторов данных производительности в VTune. Counter Monitor может отображать значения системных счетчиков в трех видах:
  • Runtime Data view – отображает данные в реальном времени;
  • Logged Data view – отображает графики значений счетчиков производительности системы, собранные за время работы приложения (на рис.2. представлен пример Logged Data вместе с легендой);
  • Summary Data view – отображает bar graph суммарных данных, которые пользователь выделил в Logged Data view (рис.3).

Рис.2. Logged Data view в Counter Monitor

Рис.3. Summary Data view

По большому счету не важно, каким вы пользуетесь инструментом, главное – это понять, используются ли ресурсы процессора по-максимуму, или он простаивает, ожидая какой-либо работы. Данные о занятости CPU помогают сориентироваться, какого прироста производительности следует ожидать после настройки на системном или архитектурном уровне. Если загрузка процессора низкая, то приложение имеет узкие места в системе ввода-вывода (диск, сетевой интерфейс) или памяти, и скорость его работы теоретически можно увеличивать до тех пор, пока не нагрузится полностью процессор. Если загрузка высокая, то приложение можно считать вычислительно нагруженным, и в общем случае в разы его уже не ускоришь.

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

Вот несколько советов о том, как производить анализ и настройку на общесистемном уровне с помощью Counter Monitor:
  1. Запустите Counter Monitor Wizard (рис.4) для создания Активности (Activity), это некий аналог понятия эксперимента. Сконфигурируйте Counter Monitor коллектор, выбрав интересующие вас встроенные счетчики производительности (рис.5). Запустится коллектор данных, который, отображая данные в реальном времени, соберет всю выбранную информацию в течение работы приложения.
  2. По окончании работы запустится Logged Data view, в котором можно анализировать собранные данные, используя всевозможные представления (таблицы, чарты, графики, и т.д.). Анализируйте собранные данные и делайте выводы о работе своего приложения.
  3. Заинтересовавшие вас отрезки работы приложения можно увеличить (Zoom) для более детального анализа. А также можно отобразить результаты коллекции Sampling, если она была произведена, для конкретного участка, для более глубокого анализа на уровне микроархитектуры. В случае необходимости можно запросить контекстную подсказку в Tuning Assistant, который произведет собственный анализ ваших данных, сделает выводы о производительности приложения на данной платформе и даст Tuning Advice – подсказку по настройке системы или приложения (рис.6).

Рис. 4. Counter Monitor Wizard

Рис.5. Конфигурирование Counter Monitor

Рис.6. Подсказки Tuning Assistant

Щёлкните для увеличения

Не пропустите этот важный этап в процессе настройки и оптимизации вашего приложения. Те программисты, которые использовали встроенные в Windows счетчики производительности и раньше, нашли очень удобным использовать их в составе VTune. Для наиболее продвинутых любителей тьюнинга есть возможность создавать собственные счетчики, используя Performance DLL SDK. С его помощью можно создавать ловушки (hooks) в своем приложении, делая настройку производительности еще более эффективной и быстрой. Хотя Counter Monitor и считается третьей по используемости технологией в VTune после Sampling и Call Graph, его возможности широки, а работа над его усовершенствованием продолжается.

Настройки на уровне приложения

Целью настроек на уровне приложения является улучшение вычислительной эффективности алгоритмов, внедрение многопоточности, и/или использование производительных API, библиотек и примитивов. Для того, чтобы понять, где модифицировать приложение, необходимо идентифицировать те его участки, которые вносят наибольший отрицательный вклад в общую производительность приложения. Нахождение этих участков является самым важным шагом на пути улучшения производительности. Затрачивая свое время на оптимизацию «правильных» участков кода, вы получите хорошие результаты. И совсем не имеет значения, сколько времени вы потратили, оптимизируя не тот код, улучшение будет минимальным или совсем никаким. Это все равно что укреплять звенья цепи, находящейся под возрастающей нагрузкой: укрепите слабые звенья, и вся цепь окрепнет, а будете тратить время на и так сильные звенья, то толку от этого окажется мало.

Основополагающее понятие процесса оптимизации, Hotspot («Горячая точка») - это наиболее «слабое звено» в приложении в смысле его производительности. Hotspot может быть один во всем приложении. Их может быть и несколько. А может случиться и так, что, устранив один Hotspot, вы обнаружите в результате несколько новых.

Вообще приложения не выполняются равномерно на всем участке их работы. Некоторые части выполняются практически мгновенно, тогда как другие работают так долго, что кажется программа зависла. Эта неравномерность, очевидно, имеет три причины:
  • Редкое исполнение: некоторые участки кода, такие как инициализация или ветки обработки ошибок, исполняются или один раз, или вообще никогда. Обычно приложение в этих местах отрабатывает очень быстро, и оптимизировать эти «холодные точки» не имеет смысла.
  • Медленное исполнение: код, требующий значительных вычислительных ресурсов. Например, вычисление интегралов свертки или перемножение гигантских матриц заставят процессор «попотеть». Этот код является Hotspot’ом, если вычисление занимает довольно значительное время по сравнению со временем работы всего приложения.
  • Частые исполнения: многие участки кода исполняются повторно много раз. Перерисовка экрана в игре или проверка орфографии во время набора текста – это пара простейших примеров. Но функции, выполняемые очень часто, не обязательно являются Hotspot’ами. Ими могут быть только те функции, кумулятивное время выполнения которых значительно по сравнению со временем работы всего приложения.

Если вы знаете, что является причиной Hotspot’ов в вашем приложении (медленный код, или частое его исполнение, или и то и другое), то вы сможете правильно выбрать методику оптимизации.

Серьезный инструментарий для Hotspot-анализа предоставляет Intel VTune Performance Analyzer. Для первичной оценки ситуации с проблемными функциями в приложении используется технология Sampling, позволяющая идентифицировать Hotspot’ы в рамках всей системы, т.е. анализировать все процессы, выполняющиеся в системе, переходить от процессов в исполняемые модули, в модулях находить «горячие» функции, а в функциях идентифицировать строки кода, вызвавшие проблемы с производительностью. Дело в том, что Hotspot’ы – это не только участки, отнимающие время на их выполнение, это место кода, вызывающее любую интенсивную активность процессорных ресурсов. Поэтому в Sampling коллекции данных может быть собрана информация о количестве тиков процессора (CPU Clockticks), выполненных инструкций (Instructions Retired), промахах строк КЭШа процессора (Cache Miss), ошибках предсказания ветвления (Branch Misprediction), и т.д. Запустив Sampling коллекцию с приложением, мы получаем диаграмму (можно и в табличном виде) распределения событий (Events) процессора по модулям, исполняемым в системе, в абсолютном и относительном исчислении, а также некие относительные оценки производительности приложения, например CPI (рис.7). О значении показателя CPI мы поговорим в следующем подразделе.

Рис.7. Результаты Sampling коллекции. Module View.

Щёлкните для увеличения

Идентифицировав интересующий нас модуль в Module View и изучив его показатели, углубляемся в Hotspot View, собственно главный режим определения Hotspot’ов в исполняемом модуле (рис.8). Здесь мы можем посмотреть, какие функции являются наиболее критичными к ресурсам процессора, причем привязку при поиске Hotspot’ов можно осуществлять не только к именам функций, но и к RVA (Relative Virtual Address), классам, или файлам исходного кода.

Рис.8. Анализ Hotspot’ов (по функциям, виртуальным адресам, классам, файлам исходников)

Чтобы определить, какая строка или строки кода стали причиной появления Hotspot’а, достаточно просто углубиться в Source View (рис.9), предоставляющий нам исходный код, строкам которого поставлены в соответствие те данные, которые были собраны в Sampling коллекции. Тем самым мы можем легко определить, какие вычисления и данные привели к каким событиям в процессоре, ущемляющим производительность.

Рис.9. Анализ исходного кода в Source View

Щёлкните для увеличения

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

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

Вычислительная сложность. Известно, что сортировку можно выполнить многими способами. Самый простейший, и при этом самый медленный их них – метод пузырьковой сортировки (bubble sort). Он обладает вычислительной сложностью O(n2), что означает, что если количество элементов сортируемой последовательности удвоится, то количество операций для вычисления потребуется в четыре раза больше. Метод быстрой сортировки (quick sort) имеет вычислительную сложность O(n log n), то есть с ростом элементов количество операций увеличивается по закону чуть быстрее линейного. И соответственно при достаточно большой последовательности quick sort будет гораздо эффективнее bubble sort, выполняя одну и туже задачу.

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

Зависимость по данным. Большинство современных процессоров имеют суперскалярную архитектуру и способны выполнять инструкции из кода последовательной программы параллельно. Так новейшие процессоры Intel Core2Duo способны выполнять в одном ядре до 4-х инструкций за один такт. Однако для этого должны быть выполнены определенные условия, одним из которых является независимость данных в инструкциях, выполняемых параллельно (параллелизм на уровне команд).

На рис.10 представлен пример, когда три инструкции умножения выполняются в процессоре параллельно.

Рис. 10. Выполнение инструкций перемножения без зависимости по данным

На рисунке предполагается, что между перемножаемыми аргументами нет зависимости, поэтому они могут быть помещены в конвейер для параллельного выполнения, правда с небольшим сдвигом, который называется throughput. В реальной жизни зависимость по данным часто существует. Например, если рассмотреть перемножение тех же независимых аргументов, но в виде выражения a = w x y z, то график исполнения несколько изменится (рис.11), поскольку результаты перемножения w x на результаты y z не будут готовы в течение 15 тиков процессора. На рисунке видно, что перемножение выполняется намного дольше, потому что полный параллелизм на уровне инструкций в данном случае невозможен.

Рис. 11. Выполнение инструкций перемножения с зависимостью по данным

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

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

Проблемы с производительностью алгоритмов можно находить разными способами. Один из них – использование технологии Callgraph, которая, прежде всего, используется для анализа приложения на уровне алгоритмов или для выяснения общего потока исполнения в сложной программе. Callgraph комплементарно дополняет Sampling, так как профиль приложения, полученный с помощью сэмплирования, плоский (flat profile), то есть мы видим, какие функции являются Hotspot’ами, но вот как мы в них попали, сколько раз эта функция выполнялась, из скольких мест она вызывалась, и вызывает ли она другие функции мы не узнаем, пока не запустим Callgraph. Callgraph поможет вам найти функции, которые потребовали больше всего времени на их выполнение, предоставляя информацию о том, сколько времени было потрачено на выполнение кода самой этой функции, сколько - в функциях вызванных из нее, и время, потраченное на ожидание объектов синхронизации.

Дерево вызовов даст вам визуальную картину происходящего в приложении. VTune Callgraph построит критический путь исполнения (Critical Path) программы, то есть поток вызовов, исполнение которого заняло больше всего времени, а всплывающие подсказки укажут вам точные параметры вызовов функции (рис.12).

Рис.12. Отображение графа вызовов в VTune Callgraph

Щёлкните для увеличения

Здесь функция testoror1 была вызвана из testmain два миллиона раз, при этом из 223 мс в ней самой программа исполнялась только 45 мс, остальные 178 мс были проведены в функции dvid_rout, вызываемой из нее.

Если удобно просматривать результаты в табличном виде, то, перейдя по закладке Call List, можно получить список функций, которые вызвали текущую, или которые вызывались из текущей, с распределением вклада каждой (рис.13).

Рис.13. Список вызовов функций в Callgraph

Щёлкните для увеличения

Настройки на уровне микроархитектуры

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

Так, например, любой высокопрофессиональный программист должен себе представлять структуру организации памяти в системе, порядок размеров кэш-памяти процессора и примерные соотношения затрат по доступу к ним, чтобы написать эффективную реализацию какого-либо алгоритма, активно использующего размещение временных данных в памяти. Как правило, наиболее интенсивные вычисления производятся в циклах. Если следовать правилу компактной организации и доступа к данным и держать суммарные размеры структур данных, задействованных в циклических вычислениях, соизмеримыми с размером кэша первого уровня, то скорость выполнения вычислений будет невероятно высока, и ограничена только тактовой частотой процессора (тогда как в большинстве приложений процессор просто простаивает в ожидании данных, которые должны быть доставлены в кэш из основной памяти).

Кстати, упомянутый ранее показатель CPI (Clockticks per Instruction) – важное соотношение, индицирующее эффективность исполнения кода в процессоре. С учетом того, что в микроархитектуре Intel Core2Duo теоретически может выполняться до 4-х инструкций за один такт, идеальный CPI для участка кода с интенсивными вычислениями будет 0.25. После сбора данных с помощью Sampling VTune отобразит значения CPI на всех уровнях, от модуля исполнения до ассемблерной инструкции. Значительное превышение показателя CPI (выше 4-8) для вычислительных циклов, скорее всего, говорит о неправильной организации хранения данных, участвующих в вычислениях (рис.14).

Рис. 14. Показатели CPI для функций в Hotspot View.

Узнать в каком именно месте доступ к данным осуществляется не самым оптимальным образом с точки зрения микроархитектуры поможет коллекция процессорных событий. Например, исследование промаха КЭШа 2-го уровня (2nd-Level Cache Read Misses) позволит определить, какой участок кода приложения обращается к данным таким образом, что кэш-память все время приходится перезагружать из-за частого перепрыгивания через большие отрезки адресного пространства (Non-Unit Stride Memory Access) (рис.15).

Рис.15. В Source View легко видеть, какая строка кода вызыват события промаха КЭШа 2-го уровня

Щёлкните для увеличения

Примечательно то, что в данном примере компилятор Intel пытался предупредить разработчика о том, что текущий тяжелый цикл является хорошим кандидатом на векторизацию, т.е. он может быть исполнен как минимум в два раза быстрее с помощью SSE-инструкций. Однако автоматически векторизовать его не удалось по определенным причинам. Устранение таких причин («прыжки» по памяти, зависимость по данным в цикле, смешанные типы данных, не поддерживаемая структура цикла, и т.д.) действительно позволяет уменьшить время исполнения этого цикла в несколько раз (рис.16).

Рис.16. Intel C/C++ компилятор сообщает о том, какие участки кода не могут быть векторизованы и почему

Щёлкните для увеличения

Вообще же стоит полистать IA-32 Architectures Optimization Reference Manual [3], в котором подробно описаны не только все события процессора, которые можно собрать с помощью VTune, но и примеры кода, из которых можно понять, как с помощью небольших модификаций С/С++ кода заставить выполняться приложение гораздо быстрее на архитектуре Intel. Описания этих же событий процессора есть в VTune On-line Help системе, в которой также описаны важнейшие соотношения событий процессора и приведены рекомендации по их улучшению.

Такие модификации могут казаться элементарными, однако программист может даже и не подозревать, насколько они облегчают исполнение кода процессору с архитектурой IA-32. Вот простой пример, Partial Register Stalls. Это ситуация, когда процессор перестает выполнять полезную работу, а вместо этого такты тратятся на реорганизацию внутренних данных. Происходит это в случае, если после операции записи данных в часть регистра следует операция чтения регистра целиком.

Следующий ассемблерный код приведет к Partial Register Stalls в процессоре:

mov al, 5; только 8 бит записываются в регистр eax

mov var, eax; процессор останавливается, пытаясь считать весь регистр eax

Проблема возникает тогда, когда процессор пытается считать весь 32-разрядный регистр, но при этом не знает, что за данные хранятся в верхних 24-х битах, поэтому он ожидает, когда первая инструкция пройдет по конвейеру и закончит исполнение, т.е. обновятся состояния флагов по операции записи. Такой код может быть сгенерирован компилятором, если «злоупотреблять» типами данных short/word.

Исправить ситуацию можно достаточно просто, нужно записывать в регистр 32-битное значение:

mov eax, 5; записывается весь регистр eax

mov var, eax; не возникает остановок процессора

Надо сказать, что на некоторых процессорах Intel проблема Partial Register Stalls не актуальна (P4), однако необходимо придерживаться общих рекомендаций руководства по производительности, это обеспечит равномерность производительности приложения на разных типах процессоров архитектуры IA-32. При этом анализатор VTune поможет обнаружить проблему, собирая события Partial Register Stalls, генерируемые микропроцессором. Отметим также, что если для компиляции приложения используется Intel C/C++ компилятор, то код с такого рода проблемами вряд ли будет сгенерирован. Однако в случае портирования оптимизированных «вручную» библиотек, или использования модулей, скомпилированных старыми компиляторами, возможность обнаружения подобных проблем делает VTune крайне полезным инструментом при оптимизации производительности.

Заключение

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

Среди всех инструментов VTune Performance Analyzer является уникальным не только благодаря способности собирать данные о внутренних событиях процессоров Intel, анализировать их, и находить наиболее тяжелые участки кода, восстанавливать дерево вызовов функций, определять временные характеристики вызовов, но и возможности определять наиболее подходящие места для распараллеливания приложений, максимально задействуя имеющиеся вычислительные ядра микропроцессора (multicore). О методиках анализа эффективности параллельных приложений и инструментах, которые предлагает Intel разработчикам, мы поговорим в следующих статьях.

Литература и ссылки:
  1. The Software Optimization Cookbook. High-Performance Recipes for IA-32 Platforms. Second Edition. Richard Gerber, Aart J.C. Bik, Kelvin B. Smith, and Xinmin Tian. – Intel Press, 2006.
  2. Intel Software Development Products
  3. Intel 64 and IA-32 Architectures Software Developer's Manuals