<<
>>

Планирование работы процессора и приоритеты процессов

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

В конфигурации клиент/сервер серверный процесс можно привязать к конкретному процессору (путем привязки к нему процесса listener). Тогда все серверные процессы, порождаемые процессом listener, будут выполняться на выбранном процессоре.

Пример. 100 клиентских приложений SQL*Forms соединяются через SQL*Net с сервером Oracle на 4-процессорной машине. Пусть приложения 1—10 имеют более высокий приоритет.

Схема распределения нагрузки в этом случае заключается в привязке десяти высокоприоритетных приложений к процессору 0 и распределении остальных приложений между 1-м, 2-м и 3-м процессорами. Чтобы сделать это, необходимо сначала стартовать 4-м процессам orasrv на четырех различных портах.

%tcpctl port 1256 start &

(1)9807

%tcpctl port 1257 start &

(1)9812

%tcpctl port 1258 start &

(1)9833

%tcpctl port 1259 start &

(1)9850

Затем необходимо связать каждый «слухач» соответственно с 4-мя процессорами:

%pbind -b 0 9807 %pbind -b 0 9812 %pbind -b 0 9833 %pbind -b 0 9850

Приложения 1—10 будут соединяться с СУБД через порт 1256, приложения 11—40 — через порт 1257 и т.д. Например, для приложений 41—70

%setenv TWOTASK T:dragon/1258:oracle %runform

Поскольку процесс orasrv на порте 1258 привязан ко 2-му процессору, все серверные процессы для приложений 41—70 будут автоматически связаны со 2-м процессором.

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

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

Операционная система Solaris поддерживает три класса приоритетов: с разделением времени, системный и реального времени. По умолчанию все процессы реального времени имеют более высокий приоритет (уровни 100—159), чем все системные процессы (уровни 60—99), а последние имеют более высокий приоритет, чем процессы с разделением времени (уровни 0—59). Производительность СУБД можно повысить, если поместить, например, все процессы Oracle в класс процессов реального времени. При этом, если приложения SQL*Forms выполняются на том же компьютере, то и они должны быть помещены в тот же класс.

Необходимо учитывать, что помещение процессов СУБД в класс реального времени может сильно повлиять на выполнение системных процессов и привести к сбоям ОС.

Пример. Для переноса процессов из класса «с разделением времени» в класс «реального времени» можно использовать пользовательскую команду priocntl с привилегиями суперпользователя. Для того чтобы проверить, какому классу принадлежит процесс, можно применить команду ps -с.

Определите идентификатор процесса для текущего командного интерпретатора

% echo $$

2427

Станьте суперпользователем и переведите командный интерпретатор в класс реального времени:

# priocntl -s -с RT -i pid 2427

Запустите экземпляр Oracle и процессы listener SQL*Net. Поскольку командный интерпретатор находится в классе реального времени, то все новые процессы Oracle и listener также будут иметь приоритет реального времени.

Труднее поместить в класс реального времени прикладные процессы, так как они не принадлежат коллективно родительскому процессу. Ниже приведены некоторые способы реализации процесса помещения.

Для процессов SQL*Plus с идентификаторами 3482 и 3483:

# priocntl -s -с RT -i pid 3482 3483

Для процессов Oracle, принадлежащих пользователю orausr с идентификатором 8888:

# priocntl -s -с RT -i uid 8888

Для процессов Oracle, принадлежащих пользователям в группе oragrp с идентификатором группы 435:

# priocntl -s -с RT -i gid 435 Для запуска процесса SQL*Plus:

# priocntl -с RT -е sqlplus

Для некоторых нагрузок типа оперативной обработки транзакций корректное распределение приоритетов дает повышение производительности на 10... 15 %.

<< | >>
Источник: Григорьев Ю.А., Ревунков Г.И.. Банки данных. 2002

Еще по теме Планирование работы процессора и приоритеты процессов:

  1. 6.13. ПРИНЦИП ПРИОРИТЕТА
  2. 7. Приоритет изобретения, полезной модели и промышленного образца
  3. ВАШ ПРИОРИТЕТ НОМЕР ОДИН
  4. СОСТАВЛЯЮЩИЕ ПРОЦЕССА, ОСНОВНЫЕ ЗАДАЧИ И ФОРМЫ РАБОТЫ
  5. Планирование, а не планы
  6. Планирование телепередач
  7. 11. КРИМИНАЛИСТИЧЕСКИЕ ВЕРСИИ И ПЛАНИРОВАНИЕ РАССЛЕДОВАНИЯ
  8. 10.2. Планирование и организация следственных действий
  9. § 2. ПЛАНИРОВАНИЕ И СОДЕРЖАНИЕ НАБЛЮДЕНИЯ
  10. 5.4. Планирование упражнений