Выполнение начальной оценки эффективности

Так, у Вас есть некоторый код, и Вы хотите видеть, страдает ли он от проблем производительности. Где Вы запускаете? Не все проблемы сразу видимы. Вы могли бы заметить, что работа заняла несколько секунд для выполнения, но Вы не могли бы заметить работу, использовавшую слишком много циклов CPU или выделившую слишком много памяти. Это - то, где инструменты производительности Apple играют роль. Они могут помочь Вам видеть легко пропущенные аспекты своей программы.

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

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

Используя вершину

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

top инструмент выводит на экран периодически обновляемую статистику по использованию CPU, использование памяти (в различных категориях), использование ресурсов (таких как потоки и порты), и события разбивки на страницы. В режиме по умолчанию, top загрузка ЦП дисплеев и использование памяти всех системных процессов. Можно использовать эту информацию для наблюдения, сколько памяти программа использует и какой процент процессорного времени это использует. Неактивная программа не должна использовать процессорное время, и активный должен использовать пропорциональную сумму процессорного времени на основе сложности задачи.

Перечисление 4-1 показывает типичный статистический вывод от top. Для разработчиков приложений статистические данные, которыми необходимо больше всего интересоваться, являются использованием CPU, резидентное частное использование памяти (RPRVT), и уровни pagein/pageout. Эти значения говорят Вам некоторые ключевые вещи об использовании ресурсов Вашего приложения. Высокое использование CPU может означать, что задачи Вашего приложения не настраиваются соответственно. Увеличенное использование памяти и page-in/page-out уровни могут указать потребность сократить объем потребляемой памяти Вашего приложения.

  Вывод Listing 4-1 Typical вершины

Processes:  36 total, 2 running, 34 sleeping... 81 threads
Load Avg:  0.24, 0.27, 0.23     CPU usage:  12.5% user, 87.5% sys, 0.0% idle
SharedLibs: num =   77, resident = 10.6M code, 1.11M data, 4.75M LinkEdit
MemRegions: num = 1207, resident = 16.4M + 4.94M private, 22.2M shared
PhysMem:  16.0M wired, 25.8M active, 48.9M inactive, 90.7M used, 37.2M free
VM:  476M + 39.8M   6494(6494) pageins, 0(0) pageouts
 
  PID COMMAND      %CPU   TIME      #TH #PRTS #MREGS RPRVT  RSHRD  RSIZE  VSIZE
  318 top           0.0%  0:00.36   1    23    13   172K   232K   380K  1.31M
  316 zsh           0.0%  0:00.08   1    18    12   168K   516K   628K  1.67M
  315 Terminal      0.0%  0:02.25   4   112    50  1.32M  3.55M  4.88M  31.7M
  314 CPU Monito    0.0%  0:02.08   1    63    35   896K  1.34M  2.14M  27.9M
  313 Clock         0.0%  0:01.51   1    57    38  1.02M  2.01M  2.69M  29.0M
  312 Dock          0.0%  0:03.72   2    77    78  2.18M  2.28M  3.64M  30.0M
  311 Finder        0.0%  0:07.68   4    86   171  7.96M  9.15M  15.1M  52.1M
  308 pbs           0.0%  0:01.37   4    76    40   928K   684K  1.77M  15.4M
  285 loginwindow   0.0%  0:07.19   2    70    58  1.64M  1.93M  3.45M  29.6M
  282 cron          0.0%  0:00.00   1    11    14    88K   228K   116K  1.50M
  245 sshd          0.0%  0:02.48   1    10    15   176K   312K   356K  1.41M
  222 SecuritySe    0.0%  0:00.14   2    21    24   476K   828K  1.29M  3.95M
  209 automount     0.0%  0:00.03   2    13    20   336K   748K   324K  4.36M
  200 nfsiod        0.0%  0:00.00   1    10    12     4K   224K    52K  1.22M
  199 nfsiod        0.0%  0:00.00   1    10    12     4K   224K    52K  1.2
[...]

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

Таблица 4-1 описывает колоночные данные, появляющиеся в режиме загрузки ЦП и использования памяти с помощью -w параметр. Для получения дальнейшей информации, о как top сообщает информацию, посмотрите top страница справочника.

Табличный 4-1  Вывод от вершины с помощью-w опции

Столбец

Описание

PID

BSD обрабатывает ID.

COMMAND

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

%CPU

Процент циклов CPU, использованных во время интервала от имени этого процесса (и ядро и пространство пользователя).

TIME

Сумма процессорного времени (minute:seconds.hundredths) использованный этим процессом, так как это было запущено.

#TH

Число потоков принадлежит этому процессу.

#PRTS (delta)

Число объектов порта Маха принадлежит этому процессу. (Для отображения значения дельты относительно значения, сначала выведенного на экран, когда top был запущен, используйте -w параметр.)

#MREG

Число областей памяти.

VPRVT

Частное адресное пространство в настоящее время выделяется. (Это значение выведено на экран только с -w параметр.)

RPRVT (delta)

Общая сумма резидентной частной памяти. (Для отображения значения дельты относительно предыдущей выборки используйте -w параметр при выполнении top.)

RSHRD (delta)

Резидентная общая память. (Для отображения значения дельты относительно предыдущей выборки используйте -w параметр при выполнении top.)

RSIZE (delta)

Общая резидентная память как реальные страницы, которые этот процесс в настоящее время связывал с ним. Некоторые могут быть совместно использованы другими процессами. (Для отображения значения дельты относительно предыдущей выборки используйте -w параметр при выполнении top.)

VSIZE (delta)

Общее адресное пространство, в настоящее время выделяемое, включая общую память. (Для отображения значения дельты относительно предыдущей выборки используйте -w параметр при выполнении top.)

Это значение главным образом не важно для процессов OS X. Каждое приложение имеет большой виртуальный размер из-за совместно используемой области, используемой для содержания кода библиотеки и платформы.

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

Таблица 4-2 показывает столбцы, выведенные на экран в считающем событие режиме, включенном с любым -e, -d, или -a опция на командной строке. Можно использовать эти опции получить дополнительное понимание об определенных способах поведения приложения. Например, можно коррелировать число отсутствий страницы с объемом памяти, который приложение использует, чтобы определить, мог ли бы объем потребляемой памяти приложения быть слишком большим.

Табличный 4-2  Вывод от вершины с помощью-d опции

Столбец

Описание

PID

BSD обрабатывает ID.

COMMAND

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

%CPU

Процент циклов CPU, использованных во время интервала от имени этого процесса (и ядро и пространство пользователя).

TIME

Сумма процессорного времени, использованного этим процессом (minute:seconds.hundredths), так как это было запущено.

FAULTS

Общее количество отсутствий страницы.

PAGEINS

Число страницы-ins, запросов на страницы от пейджера (каждая страница - в представляет 4-килобайтную операцию I/O).

COW_FAULTS

Число отказов, заставивших страницу быть скопированной (обычно вызываемый отказами копии на записи).

MSGS_SENT

Число сообщений Маха, отправленных процессом.

MSGS_RCVD

Число сообщений Маха получено процессом.

BSDSYSCALL

Число системных вызовов BSD сделано процессом.

MACHSYSCALL

Число системных вызовов Маха сделано процессом.

CSWITCH

Число контекстных переключений к процессу (число раз процессу дали время для выполнения планировщиком ядра).

Используя инструменты

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

При первом запуске Инструментов Вас просят выбрать стартовый шаблон для Вашего документа (рисунок 4-1). Шаблоны прибывают предварительно сконфигурированные с одним или более инструментами, разработанными для сбора данных для особых ситуаций. Например, шаблон Leaks включает и инструмент ObjectAlloc и инструмент Утечек, позволяя Вам видеть и общее количество блоков памяти, выделенных и подмножество тех блоков памяти, которые считают утечками. Можно добавить больше инструментов к документу в любое время, но общие конфигурации, предоставленные шаблонами, обычно достаточны для типичных задач.

Рисунок 4-1  Выбирая шаблон Instruments
Choosing an Instruments templateChoosing an Instruments template

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

После создания документа необходимо выбрать, какое приложение (или приложения) Вы хотите, чтобы Инструменты контролировали. Вы делаете это использование Значения по умолчанию управление Target на панели инструментов документа. Рисунок 4-2 показывает инструментальный документ, сконфигурированный, чтобы запустить и контролировать приложение на основанном на iOS устройстве. При трассировке приложений для iPhone Вы запускаете исполнимую программу как часть полного процесса трассировки. Для основанных на OS X приложений некоторые инструменты дают Вам опцию присоединения к уже рабочему процессу.

Рисунок 4-2  , Конфигурирующий целевую исполнимую программу
Configuring the target executableConfiguring the target executable

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

Рисунок 4-3 показывает данные, собранные для примера приложения MoveMe после того, как будет работать запись. Графическое представление для большинства инструментов конфигурируемо так, чтобы можно было смотреть на данные, которые являются самыми интересными Вам. В числе инструмент ObjectAlloc показывает общую сумму выделенной памяти, но можно также изменить дисплей для показа плотности выделений памяти в любой момент времени. Ниже графического представления можно просмотреть подробные данные, который был собран Инструментами от запущенного приложения.

Рисунок 4-3  , Исследующий зарегистрированные данные
Examining the recorded dataExamining the recorded data

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

Используя кварцевую отладку

Кварцевая Отладка является важным инструментом для определения эффективности Вашего кода для прорисовки. Инструмент собирает информацию от вызовов получения Вашей программы для обнаружения, где программа рисует и перерисовывает ли это содержание излишне. Рисунок 4-4 показывает Кварцевое окно Параметров отладки.

  Кварцевые Параметры отладки рисунка 4-4
Quartz Debug options

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

Дисплеи опции «Flash identical updates», красные по любым областям, получающиеся биты которых идентичны текущему содержанию. Можно использовать эту опцию обнаружить избыточные операции рисования в коде.

Используя регулирование вращения

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

Регулирование вращения является контрольным инструментом, что автоматически выборки, в то время как они безразличны. Просто запустите Регулирование вращения и оставьте его работающий на Вашем компьютере каждый раз, когда Вы тестируете свое приложение. Когда вращающийся курсор появляется, Регулирование вращения автоматически начинает выбирать Ваше приложение, делая результаты доступными из его главного окна, как показано на рисунке 4-5.

  Главное окно Figure 4-5 Spin Control
Spin Control main window

Для просмотра следа для определенного сеанса выберите тот сеанс и нажмите Open. Регулирование вращения выводит на экран окно браузера, содержащее демонстрационные данные, как показано на рисунке 4-6. Можно переместиться по стекам вызовов для потоков и использовать данные для обнаружения, какая функция или методы выполнялись, в то время как приложение было безразлично. Средства управления в нижнем левом углу окна позволяют Вам инвертировать информацию о стеке вызовов и изменить способ, которым Вы просматриваете выборки. Кнопки в нижнем правом позволяют Вам сократить стеки вызовов и внимание на самые соответствующие записи.

  Демонстрационное окно Регулирования вращения рисунка 4-6
Spin Control sample window

Если Вы хотите просмотреть полный список стеков вызовов, нажмите кнопку «Show text report» на главном окне. Этот формат показывает отформатированную версию всего набора данных, что можно скопировать и вставить в другие документы.