Ключевые слова:solaris, proccess, scheduler, cpu, nice, (найти похожие документы)
Date: Fri, 12 Mar 2004 12:36:27 +0500
From: Vladimir Ivanov <ivlad at extech.ru>
Newsgroups: ftn.ru.unix.solaris
Subject: Планировка выполнения пpоцессов в Solaris
> Я так для себя окончательно не понял как с пpиоpитетами пpоцессов. Есть PRI, а
> есть и NICE. Как взаимодействует nice с концепцией классов пpиоpитетов (типа
> там RT,SYS,TS).
NICE - это legacy. Осталось от BSD в целях сохранения совместимости.
Значение nice - фактически статическое изменение PRI, если не ошибаюсь
только внутри TS.
из docs.sun.com:
The Solaris Resource Manager CPU scheduler (SHR) implements a
per-process user priority and user priority limit. The external behavior
and range of these parameters is compatible with the TS class. An
approximately linear correspondence is maintained between the user
priority and nice value (see nice(1) of processes in the SHR class. If
the user priority range is -x to +x, then -x corresponds to maximum nice
(19), a default user priority of 0 corresponds to default nice (0), and
+x corresponds to nice -20. A change to either user priority or nice
value causes the corresponding change to the other parameter.
scheduler classes - это просто названия определенных диапазонов priority
dispatcher'а. INT и IA вы только забыли. IA и TS находятся в одном
диапазоне, но IA означает, что к приоритету процесса прибавляется, AFAIR,
10 - этот приоритет назначается априложению в активном окне под X. Выше
TS лежит SYS, выше SYS лежит RT, выше RT лежит INT. Число приоритетов в
каждом классе я не помню, можно справится на docs.sun.com или в Solaris
Internals.
В первом приближении, scheduler работает так: выбирается процесс с
максимальным приоритетом, ему дается квант выполнения (его видно в
dispadmin), после этого его приоритет обычно понижается (в пределах
класса).
При много процессорности есть еще некоторые особенности - можно,
например, снять с определенного камня обработку прерываний и назначить
ему только RT-процессы - тогда будет "настоящий" "мягкий" RT.
> В pуководстве системного администpатоpа как-то невpазумительно
> написано.
Евангелистам яблочной фирмы этого не понять. ;) У вас же вообще никакой
многозадачности не было до последнего времени. ;)
Впрочем, как я уже сказал, можно обратиться к Solaris Internals.
From: Dmitry Miloserdov <dmitry at bis.ru>
DS> Я так для себя окончательно не понял как с пpиоpитетами пpоцессов. Есть
DS> PRI, а есть и NICE. Как взаимодействует nice с концепцией классов
DS> пpиоpитетов (типа там RT,SYS,TS). В pуководстве системного
DS> администpатоpа как-то невpазумительно написано.
Для RT,FX и SYS все совершенно просто - там нет никаких nice
есть фиксированный приоритет (на который в случае SYS и повлиять
невозможно).
И в этих классах нить получает процессор до тех пока либо
a) не прервется более приоритетной
b) не отдаст процессор по собственному желанию (blocked on i/o,mutex, etc.)
c) не исчерпает временной интервал и при этом найдется еще одна нить с таким
же приоритетом.
NICE определен только для TS,IA,FSS.
FSS это отдельная песня для отдельных процессор-сетов.
IA это вообще не песня это тот же TS с увеличенным на 10 приоритетом
(nice -3.3) и перевернутой очередью.
Остался TS. Тут предлагается забыть о классическом юниксовом nice
потому как работает он не совсем так (или совсем не так).
Тут вместо nice у процесса есть user priority (который командой nice
устанавливается в -3*param). и каждый раз этот когда нить отсидит
свой интервал на процессоре(интервал тоже разный для разных PRI)
от его PRI отнимается 10 и прибавляется этот самый user priority.
Плюс к тому раз в секунду а также при возврате из sleep queue значение
PRI устанавливается в практически максимальное значение 50-59 также
с прибавлением upri и с учетом границ (PRI в TS должно находится в
промежутке 0-59).