Увеличение производительности AIX 5L: Часть 3. Мониторинг центрального процессора

Управлением использованием потоков и привязывание их к конкретному процессору

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

Кен Милберг, UNIX-консультант Future Tech, составитель технической документации и эксперт по сайту, Future Tech

Кен Милберг занимает должности Technical Writer и Site Expert на сайте techtarget.com и предоставляет техническую информацию и поддержку по Linux на searchopensource.com. Он также является автором и техническим редактором IBM Systems Magazine, Open Edition. Кен обладает степенью бакалавра компьютерных и информационных наук и степенью магистра по менеджменту технологий Университета штата Мэрилэнд. Он является основателем и лидером группы пользователей POWER-AIX Лонг-Айленда. В течение многих лет он работал как в крупных, так и небольших организациях и занимал различные должности от директора по информационным технологиям до главного разработчика AIX. Сейчас он работает в Future Tech, бизнес-партнере IBM в Лонг-Айленде. Кен обладает званиями PMI certified Project Management Professional (PMP), IBM Certified Advanced Technical Expert (CATE, IBM System p5 2006), и Solaris Certified Network Administrator (SCNA). Вы можете связаться с ним по адресу kmilberg@gmail.com.



19.11.2007

Об этом цикле статей

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

Введение

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

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

Мониторинг потоков

В этом разделе я рассмотрю инструменты и команды, которые помогут выполнять мониторинг использования потоков и их анализ. В то время как в AIX 4 впервые было реализовано использование потоков для контроля расхода процессорного времени, в AIX 5L™ были представлены инструменты управления системой, помогающие выполнять мониторинг и анализ использования потоков. Одним из таких инструментов является procmon, который впервые появился в AIX 5.3.

Procmon отображает список выполняющихся процессов (меняющийся динамически по мере изменения системы), который позволяет получать информацию о том, что выполняется на Вашей системе. Ниже перечислены типы информации, которые предоставляет procmon:

  • Количество времени, в течение которого процесс занимает центральный процессор
  • Количество памяти и ресурсов ввода/вывода, используемых процессом
  • Приоритеты процессов (значения nice)

Вы можете также завершать процессы ( командаkill) и изменять приоритеты уже выполняющихся процессов ( renice) что называется "на лету". На рисунке 1 дан пример графика общей производительности системы. Для запуска инструментального средства Performance Workbench Platform используйте: # perfwb.

Рисунок 1. Экран procmon с информацией о производительности разделов
Экран procmon с информацией о производительности разделов

Если открыть закладку Show threads metrics, то команда выдаст отсортированный список процессов, т.е. потоков (см рисунок 2).

Рисунок 2. Список процессов, выдаваемый procom
Список процессов, выдаваемый procom

Другие пункты меню позволяют либо завершить процессы (kill) изменить их приоритеты (renice) (см рисунок 3).

Рисунок 3. Окно procom для изменения приоритета процесса
Окно procom для изменения приоритета процесса

Так собственно что такое nice? Использование команды nice позволяет установить приоритет определенного процесса. Значение приоритета процесса по умолчанию - 20. Используя команду renice можно изменить приоритет процесса, сделать его более низким или высоким. Фактически, эта команда изменяет величину приоритета потока (по умолчанию он равен 40).

Если вы используете флаг -l с ps, то получите данные от nice (см. пример 1).

Пример 1. Информация, выводимая nice
# ps -l
       F S  UID   PID  PPID   C PRI NI ADDR    SZ    WCHAN    TTY  TIME CMD
  200001 A    0 12972 45770   0  60 20 dea6   764           pts/1  0:00 ksh
  200001 A    0 33816 12972   3  61 20 36168   440           pts/1  0:00 ps
  240001 A  207 45770 40374   0  60 20 258ec   744           pts/1  0:00 ksh

Давайте запустим новый экземпляр командной оболочки ksh командой nice, изменим приоритет процесса: # nice --10 ksh (см. пример 2).

Из списка процессов видно, что значение приоритета этого процесса отлично от значения по умолчанию, как и его дочернего процесса (ps).

Пример 2. Новая ksh, запущенная командой nice
# ps -l
       F S  UID   PID  PPID   C PRI NI ADDR    SZ    WCHAN    TTY  TIME CMD
  200001 A    0 12972 45770   0  60 20 dea6   764           pts/1  0:00 ksh
  200001 A    0 17246 12972   0  50 10 68a1f   748           pts/1  0:00 ksh
  200001 A    0 18450 17246   1  50 10 51bb1   380           pts/1  0:00 ps
  240001 A  207 45770 40374   0  60 20 258ec   744           pts/1  0:00 ksh

Также можно использовать команду renice (уже была рассмотрена ранее вместе с procmon, см рисунок 3) для динамического изменения приоритетов работающих процессов.

Вернемся к ps. Детальную информацию о ваших потоках можно получить, если использовать флаг -mo (см пример 3).

Пример 3. Использование флага -mo для получения детальной информации о потоках
# ps -mo THREAD
    USER   PID  PPID    TID ST  CP PRI SC    WCHAN        F     TT BND COMMAND
    root 12800 45770      - A    0  60  1        -   200001  pts/1   - -ksh
       -     -     -  56759 S    0  60  1        -    10400      -   - -
    root 44648 12800      - A    1  60  1        -   200001  pts/1   - ps -mo THREAD
       -     -     -  64905 R    1  60  1        -        0      -   - -
kmilberg 45770 40374      - A    0  60  1        -   240001  pts/1   - -ksh
       -     -     -  54005 S    0  60  1        -    10400      -   - -

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

Изменение приоритета потоков

Теперь от изменения приоритетов процессов перейдем к изменению приоритетов потоков. В этом разделе показано, как изменить некоторые параметры планировщика центрального процессора, которые используются для вычисления приоритетов потоков. Сделать это можно при помощи команды schedo (или schedune в AIX 5.2 и более ранних версиях).

Сперва убедимся что в системе есть все необходимые наборы файлов (см пример 4).

Пример 4. Проверка на наличие необходимых файлов
# lslpp -lI bos.perf.tune
  Fileset                      Level  State      Description
  ----------------------------------------------------------------------------
Path: /usr/lib/objrepos
  bos.perf.tune             5.2.0.10  COMMITTED  Performance Tuning Support

Path: /etc/objrepos
  bos.perf.tune             5.2.0.10  COMMITTED  Performance Tuning Support

Теперь выведем на экран все параметры центрального процессора, как показано в примере 5.

Пример 5. Вывод всех параметров центрального процессора
# schedo -a
              %usDelta = 100
          affinity_lim = 7
         big_tick_size = 1
      fixed_pri_global = 0
             force_grq = 0
idle_migration_barrier = 4
               maxspin = 16384
              pacefork = 10
               sched_D = 16
               sched_R = 16
             timeslice = 1
         v_exempt_secs = 2
         v_min_process = 2
           v_repage_hi = 0
         v_repage_proc = 4
            v_sec_wait = 1

Начнем с fixed_pri_global. Значение по умолчанию этого параметра равняется нулю. Когда центральный процессор готов выполнять поток, проверяется глобальная очередь на выполнение. Когда поток отработал положенное ему время на центральном процессоре, он возвращается назад в очередь выполнения. Это позволяет поддерживать "родственность процессов" (об этом я расскажу немного ниже). Для увеличения общей производительности потока существует параметр RT_GRQ, который нужно активировать. В результате этого действия поток автоматически попадает в глобальную очередь на выполнение. Все потоки с фиксированным приоритетом будут помещены в очередь на выполнение если изменить значение параметра fix_pri_global с 0 на 1 командой: #schedo -o fix_pri_global=1.

Давайте вернемся к рассмотрению потоков. Фактический приоритет пользовательского процесса изменяется время от времени, в зависимости от того, сколько времени процесс выполнялся на центральном процессоре в последний раз. Параметры, с которыми надо ознакомиться, это sched_R и sched_D. Значения обоих параметров измеряются в 1/32 секунды и у каждого значение по умолчанию равно 16. Далее, когда поток создан, значение его коэффициента загрузки на данном центральном процессоре равно 0. Чем больше времени поток выполняется на центральном процессоре, тем больше значение его коэффициента загрузки. Планировщик определяет коэффициент загрузки потока (CPU usage) по следующей формуле: CPU usage = CPU usage*(D/32).

Для этой формулы, если параметр D равен 32, коэффициент загрузки потока не уменьшается —значение по умолчанию (16) позволяет коэффициенту загрузки уменьшаться с течением времени, что дает потоку больше времени для работы на центральном процессоре.

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

Schedo чаще всего используется для изменения единицы времени планировщика с помощью опции schedo -o timeslice=value. Увеличение единицы времени может увеличить производительность системы за счет уменьшения частоты переключения между контекстами. Однако предварительно стоит при помощи vmstat убедиться, что контекстные переключения действительно выполняются слишком часто.

Привязывание процессов к конкретному процессору

В этом разделе я рассмотрю понятие "родственность процессов", которое позволяет процессам выполняться только на определенных центральных процессорах. Родственность процессов используется для достижения многих целей, например, отладки. Другой пример - можно привязать потоки к конкретному процессору, чтобы найти причину зависания программы. Обычно родственность процессов используется для проверки состояния системы, например, SMP-системы. Для привязывания предназначена команда bindprocessor. Предположим, что в системе активирована симметричная многопоточность (SMT), тогда каждый поток ядра в физическом процессоре отображается в виде отдельного процессора при выполнении команды bindprocessor. В процессорах POWER5 на каждое ядро приходится два потока. Однако при назначении выполнения потоков на определенном процессоре необходимо помнить, что у некоторых программ процессор, на котором они будут выполняться, уже определен, и переопределение процессора в таком случае приведет к ошибке. Однако давайте сначала проверим, активизирована ли на данной системе симметричная многопоточность (см. пример 6).

Пример 6. Проверка активизации симметричной многопоточности
# smtctl

SMT is currently enabled.

Пример 7 выводит доступные процессоры, с которыми можно использовать симметричную многопоточность.

Пример 7. Список доступных процессоров
# bindprocessor -q
The available processors are:  0 1 2 3

Если нужно привязать процесс к конкретному центральному процессору, то используйте такую простую команду:

# bindprocessor 12741 2

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

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

Другой важной командой, связанной с потоками являет gprof. Команда gprof создает рабочий профиль скомпилированной вами программы, написанной на языках C, Pascal, FORTRAN, или даже COBOL.gprof предоставляет информацию о порядке выполнения программ и количестве процессорного времени, потребляемом каждой подпрограммой. Она очень полезна, если проблема заключается в том, как процессы расходуют ресурсы центрального процессора. gprof можно использовать для создания профиля программы и определения, какие функции используют центральный процессор. Этот профиль создается вызовом графического файла профилирования (gmon.out по умолчанию). А какие отличия в реализации профилей в AIX 5.3? Поскольку AIX 5.3 позволяет пользователю задавать имена файлов профилей настройкой специальных параметров среды, в ней есть дополнительная профильная поддержка для потоков и опции, которые влияют на тип данных профиля, которые собираются для потока.

Резюме

В этой статье я объяснил важность осуществления контроля над использованием потоков и родственность процессов. Я рассмотрел наиболее важные инструменты и утилиты для анализа потоков и администрирования ваших процессов. Далее я настраивал ядро при помощи команды schedo, рассказал все о родственности процессов и ее реализации. В этой серии из трех статей, посвященной мониторингу центрального процессора, были рассмотрены общие концепции, применяемые в настройке, осуществление мониторинга и сбора данных, и в конце статьи - настройка и администрирование системы. Хотя многие администраторы хорошо освоили настройку подсистемы оперативной памяти, я надеюсь, что мне удалось убедить читателя в важности мониторинга и настройки центрального процессора.

Ресурсы

Научиться

Получить продукты и технологии

  • IBM trial software: программное обеспечение для разработчиков, которое можно загрузить со страницы сообщества developerWorks.(EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=269786
ArticleTitle=Увеличение производительности AIX 5L: Часть 3. Мониторинг центрального процессора
publish-date=11192007