Настройка производительности UNIX-систем

Работа с процессами требует аккуратности

В статье даются советы по настройке производительности сервера. Компьютер подобен сотруднику, выполняющему для вас работу - его не стоит перегружать сверх меры. Одним из способов предотвратить это является тщательная настройка процессов, выполняющихся на данном компьютере. Эта статья содержит несколько простых рекомендаций по настройке производительности с использованием команд nice операционной системы UNIX®.

Билл Циммерли, специалист в области инженерии знаний, независимый писатель

Билл Циммерли (Bill Zimmerly) является специалистом в области инженерии знаний, а также программистом языков низкого уровня. Он имеет большой опыт работы с различными версиями программного обеспечения UNIX® и Microsoft® Windows®. Билл с огромным энтузиазмом и удовольствием занимается созданием новых технологий и рассказывает о них в своих статьях. Живет он в деревушке Хиллсборо, Миссури, где может наслаждаться чистым воздухом и прекрасной природой. Кроме того, неподалеку находятся несколько винных заводов. Связаться с ним можно по адресу электронной почты: bill@zimmerly.com.



10.11.2008

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

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

Планировщик или переключатель задач в операционной системе выполняет следующие задачи:

  1. Загружает контекст задачи в регистры центрального процессора (CPU).
  2. Позволяет задаче выполняться в течение небольшого периода времени.
  3. Сохраняет контекст текущей задачи перед его выгрузкой и загрузкой контекста новой задачи.

Планировщик поддерживает некоторое число внутренних таблиц для управления контекстом каждой выполняющейся задачи в системе. Планировщик также управляет ресурсами, используя пару очередей, называемых очередь выполнения (run queue) и очередь "спящего режима" (sleep queue). В очереди выполнения выполняются задачи, у которых есть все необходимые ресурсы. Очередь "спящего режима" (sleep queue) предназначена для задач, которые ждут высвобождения каких-либо ресурсов. Главная задача планировщика - упорядочить работу системы так, чтобы она в правильном порядке выполняла разные задачи и отрабатывала команды управления.

Контекст задачи

Контекст выполняющейся задачи состоит из множества вещей. Когда задача выполняется, используется регистр CPU, называемый указателем инструкции (instruction pointer, IP), который содержит адрес в памяти для выполняющейся в данный момент инструкции машинного кода. Когда задача снимается с выполнения, планировщик должен сохранить значение регистра IP для того чтобы при новом запуске задачи она продолжила свое выполнение с того места, на котором была остановлена. Следовательно, частью контекста задачи является текущее значение регистра IP.

Другим важным значением, которое составляет контекст задачи, является указатель стека (stack pointer, SP). Стек это LIFO-очередь ("последним зашел, первым вышел"), которая содержит процедуру, возвращающую адреса, элементы данных, указатели и др. Значение каждого элемента, хранящегося в стеке, определяется инструкциями, которые предназначены для работы с этими элементами согласно разработанному программистом алгоритму.

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

Приоритет

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

UNIX предоставляет множество мощных инструментов для подробного просмотра процессов, которые выполняются на компьютере в любой момент времени; в частности, для получения этой исчерпывающей информации существует команда ps. Запустите xterm и, чтобы увидеть значения nice выполняемых программ, введите следующую команду:

$ ps -eo pid,state,nice,args | less -S

Результатом выполнения команды будет информация, приведенная в листинге 1.

Листинг 1. Полученная информация
  PID S  NI COMMAND
    1 S   0 init [5]
    2 S  19 [ksoftirqd/0]
    3 S -10 [events/0]
    4 S -10 [khelper]
    5 S -10 [kblockd/0]
   28 S   0 [kapmd]
   30 S   0 [pdflush]
   31 S   0 [pdflush]
   33 S -10 [aio/0]
   32 S   0 [kswapd0]
  138 S   0 [kseriod]
  176 S   0 [kjournald]
 1080 S   0 [kjournald]
 1081 S   0 [kjournald]
 1082 S   0 [kjournald]
 1564 S   0 /sbin/dhclient -1 -q -lf /var/lib/dhcp/dhclient-eth0...
 1610 S   0 syslogd -m 0
 1614 S   0 klogd -x
 1632 S   0 portmap
 1651 S   0 rpc.statd
 1729 S   0 /usr/sbin/sshd
 1744 S   0 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid
 1760 S   0 ntpd -U ntp
  .
  .
  .
 2364 S   0 konsole
 2373 S   0 /bin/bash
 2563 R   0 ps -eo pid,state,nice,args

Для моей рабочей станции было сгенерировано 84 строки. Это означает, что на момент выполнения ps в системе выполнялось только 84 задачи, которые состязались за время исполнения на CPU. Теперь изучим составные части команды для лучшего понимания информации, выводимой системой. Управляющая строка -eo pid,state,nice,args указывает инструменту ps вывести следующую информацию по каждой выполняющейся задачи в системе:

  • Идентификатор процесса (pid).
  • Выполняется ли процесс или находится в "спящем" режиме (state).
  • Значение nice (nice).
  • Аргументы, переданные задаче, когда та начала выполняться (args).

Команда less с флагом -S создает понятный список, ограничивая каждую строку в списке шириной xterm.

Большинство задач имеют nice - значение, равное 0, и они попадают в середину диапазона приоритетов. Совсем немного задач выполняются со значениями nice , которые придают им высокий (-10), или низкий (+19) приоритет. Большинство задач находятся в спящем режиме, т.е. они ожидают, пока высвободятся какие-либо ресурсы. Фактически, когда я создавал список, выполнялась только команда ps. Большинство задач разрабатываются так, чтобы они, быстро сделав свою работу, завершали работу или переходили в "спящий" режим.

Nice и renice

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

Команда renice

Команда renice позволяет изменить приоритет выполняющихся процессов. Новое значение приоритета (число nice) и идентификатор процесса (PID) являются основными входными параметрами команды renice для изменения приоритета.

Команду renice можно использовать для изменения приоритета любого процесса, которым вы владеете; однако можно только постепенно увеличивать приоритет для процессов от 0 до 20, тогда как системный администратор может изменять приоритеты всех выполняющихся процессов на всем диапазоне nice-значений.

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

Рабочие станции

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

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

$ su
Password:

# nice -n -15 make

Параметр -n -15 уменьшает значение nice задачи make на 15 - это увеличивает приоритет настолько, что прирост приоритета можно почувствовать даже при перемещении мыши по экрану. На большинстве систем только привилегированный пользователь может подобным образом изменить приоритет задачи. Для рабочей станции, выполняющей продолжительный процесс, применение такого подхода может быть вполне обосновано.

Администратор системы может использовать файл, ассоциированный с подключаемыми модулями аутентификации Linux (Linux Pluggable Authentication Modules, PAM) для того чтобы наложить на пользователей ограничения в ресурсах, включая значение nice по умолчанию. Этот файл называется limits.conf и находится в каталоге /etc/limits или /etc/security. Описание этого файла выходит за пределы данной статьи, однако в Интернете можно найти много статей на эту тему.

Иными словами, для всех процессов, которые выполняет пользователь, строка

@lusers hard priority 5

эквивалентна команде

nice -n 5

для всех процессов, запущенных пользователем.

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

Другим важным способом настроить производительность рабочей станции является определение функций и функциональных возможностей, которые не используются пользователем, хотя и выполняются на рабочей станции. Например, много Linux®-систем имеют файл, называемый /etc/cron.daily/slocate.cron, который ежедневно выполняет программу dbupdate, которая интенсивно использует жесткий диск. Эта программа позволяет использовать для поиска файлов команду locate вместо команды find. Если команда locate не будет использоваться, то, войдя под учетной записью привилегированного пользователя, можно так отредактировать файл /etc/cron.daily/slocate.cron, закомментировав соответствующие инструкции, что программа dbupdate не будет выполняться (см. листинг 2).

Листинг 2. Файл /etc/cron.daily/slocate.cron
$ su
Password:

# cd /etc/cron.daily

# vi slocate.cron

Листинг 3 показывает, как должен выглядеть файл /etc/cron.daily/slocate.cron после того как перед каждой строкой, чтобы отключить ее исполнение, будет поставлен символ комментария (#).

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

Листинг 3. Итоговый вид содержимого файла
#!/bin/sh
# renice +19 -p $$ >/dev/null 2>&1
# /usr/bin/updatedb -f "nfs,proc,devpts" -e "/tmp,/var/tmp,/usr/tmp,/afs,/net"

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

Серверы

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

Если сервер предназначен для выполнения только одной функции (например, Web-сервера), то следует удалить все остальные задачи из конфигурационных файлов. Часто Web-сервер выполняет ftp, nfs, dhcp, dns и другие демон-процессы, которые ему не нужны. Чем меньше задач выполняет сервер, тем легче поддаются настройке его главные процессы. Кроме того, также возрастает безопасность, поскольку уменьшается количество "дыр" в безопасности, которые можно использовать.

Эта статья предоставляет некоторые общие направления для настройки производительности сервера. Для более подробной информации исследуйте ссылки в разделе Ресурсы.

Заключение

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

Ресурсы

Научиться

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

  • 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=350729
ArticleTitle=Настройка производительности UNIX-систем
publish-date=11102008