[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека |
Юридическая информация |
Поиск ]
Руководство по настройке производительности
С появлением в операционной системе 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. Приоритет нитей фиксирован. Для его
изменения используются функции уровня нитей.
Подробное описание стратегий планирования приведено в разделе Стратегия планирования нитей.
[ Страница назад | Страница вперед | Содержание | Индекс |
Библиотека |
Юридическая информация |
Поиск ]