[  Страница назад | Страница вперед  |  Содержание  |  Индекс  | Библиотека | 
Юридическая информация | 
Поиск ] 
 
Руководство по настройке производительности
С появлением в операционной системе AIX версии 4 поддержки нитей, в
управлении выполнением программы стало участвовать два объекта:
- Процесс - это набор физических ресурсов, необходимых для
выполнения программы (например, сегмент памяти и файлы с данными).
 - Нить - это набор параметров, характеризующих текущее состояние
запущенного экземпляра программы, например, содержимое регистра адреса команды
и регистров общего назначения. Нить выполняется в контексте своего
процесса и использует его ресурсы. В составе одного процесса могут
выполняться несколько нитей, совместно используя его ресурсы.
 
В операционной системе AIX версии 4 планировщик работает с нитями.
Поддержка нитей упрощает задачу создания приложений, использующих
возможности SMP. Размножать процессы для создания нескольких потоков
управления неудобно и дорого, так как каждый процесс обладает собственным
набором ресурсов памяти и требует значительных системных ресурсов для своей
настройки. Более эффективно создавать несколько нитей в рамках одного
процесса.
Существует два уровня поддержки нитей:
- поддержка libpthreads.a в среде прикладных программ
 - Поддержка нитей ядра
 
Поддержка нитей никак не повлияет на работу уже существующих
программ. Операционная система точно так же, как и раньше, создает
процессы приложений, перенесенных из более младших выпусков. Такие
процессы создаются в виде единичных нитей (начальных нитей), которые
конкурируют за ресурсы CPU с нитями других процессов.
Благодаря новым алгоритмам планирования, а также атрибутам главной нити,
устанавливаемым по умолчанию, такой способ выполнения старых программ не
приводит к снижению производительности системы.
Для изменения приоритета предназначены команды nice и
renice, а также системные вызовы setpri() и
setpriority() (как и в предыдущих версиях). Планировщик
передает управление нити максимум на один квант времени (как правило, 10
мсек), а затем передает управление следующей готовой к выполнению нити с таким
же (или более высоким) приоритетом. Более подробная информация по этому
вопросу приведена в разделе Конкуренция за использование
процессора.
Планирование нитей зависит от нескольких переменных. Некоторые из
них относятся исключительно к поддержке нитей, другие относятся к планированию
процессов:
- Приоритет
 - Значение приоритета - это основной фактор, от которого зависит вероятность
захвата нитью очередного кванта времени процессора.
 - Положение в очереди выполнения планировщика
 - Положение нитей, готовых к выполнению, в очереди планировщика зависит от
числа нитей с более высоким приоритетом.
 - Стратегия планирования
 - От этого атрибута зависит, что происходит с активной нитью по истечении
выделенного ей кванта времени.
 - Область действия
 - Этот атрибут указывает, конкурирует ли нить со всеми нитями в системе, или
только с нитями своего процесса. Выполнение нитей pthread, действующих
в рамках процесса, планируется библиотекой, а выполнение нитей с глобальной
областью действия планируется ядром. Для управления нитями "pthread",
конкурирующими только с нитями своего процесса, планировщик библиотеки
использует пул нитей ядра. Нити pthread, выполняющие операции
ввода-вывода, рекомендуется создавать с глобальной областью действия.
Понятие области действия применяется по отношению к нитям
libpthreads.a.
 - Принадлежность процесса процессору
 - Степень связанности процессов с процессорами сказывается на
производительности системы.
 
На первый взгляд, учесть все эти параметры достаточно сложно. Однако
на самом деле, существует три основных способа планирования процессов:
- По умолчанию
 - Процесс состоит из одной нити, приоритет которой изменяется в зависимости
от нагрузки на CPU, а стратегия планирования равна SCHED_OTHER.
 - Управление на уровне процесса
 - Процесс может состоять из одной или нескольких нитей, но их стратегия
планирования остается прежней (по умолчанию - SCHED_OTHER). Эта
стратегия позволяет использовать существующие функции для изменения значения
nice и задания фиксированных приоритетов. Все эти функции применяются
ко всем нитям в составе процесса. При выполнении функции
setpri() для всех нитей процесса устанавливается стратегия
планирования SCHED_RR.
 - Управление на уровне нитей
 - Процесс может состоять из одной или нескольких нитей. Для этих
нитей можно установить стратегию планирования SCHED_RR или
SCHED_FIFOn. Приоритет нитей фиксирован. Для его
изменения используются функции уровня нитей.
 
Подробное описание стратегий планирования приведено в разделе Стратегия планирования нитей.
  [  Страница назад | Страница вперед  |  Содержание  |  Индекс  |
 
Библиотека | 
Юридическая информация | 
Поиск  ]