Опубликован: 04.07.2008 | Уровень: специалист | Доступ: свободно | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 6:

Управление пулами ресурсов. Проекты. Зоны и контейнеры

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >

В Solaris применяется весьма серьезная и многоуровневая схема управления ресурсами. Именно поэтому Solaris имеет репутацию самой масштабируемой системы. В этой лекции мы обсудим базовые примитивы управления ресурсами и практику этого управления.

Процессы, задачи и проекты

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

Процессы, задачи (task) и проекты (project

Рис. 6.1. Процессы, задачи (task) и проекты (project

После установки в системе уже определены несколько проектов. По умолчанию они перечислены в файле /etc/project и сразу после установки системы он выглядит так:

# cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::

Некоторые пользователи уже отнесены к определенному проекту; в нашем случае этой чести удостоены только пользователь root (запись user.root) и все, для кого группа staff (group.staff) является главной. Все остальные при входе в систему ассоциируются только с проектом default. Для проекта могут быть назначены какие-либо специфические ресурсы, но это не обязательно.

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

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

  • просматривается файл /etc/user_attr (он содержит атрибуты пользователей), и если этот пользователь в нем присутствует, то проектом по умолчанию для данного пользователя назначается проект, объявленный для него в этом файле в параметре project ;
  • просматривается файл /etc/project, и если в нем указан проект для user.username, то проектом по умолчанию для данного пользователя назначается этот проект;
  • просматривается файл /etc/project, и если в нем объявлен проект для group.groupname, то система назначает этот проект данному пользователю проектом по умолчанию, если эта указанная группа является главной для данного пользователя;
  • если в файле /etc/project есть проект с именем default, то он назначается проектом по умолчанию для всех пользователей.

Если в файле /etc/project есть какой-либо проект, в поле "пользователи" которого указан данный пользователь, это означает, что данному пользователю разрешается присоединяться к данному проекту (например, с помощью указания имени этого проекта программе newtask ):

newtask -p user.brad bash

Можно посмотреть, процессы каких проектов запущены в системе, и оценить суммарную загрузку по процессам каждого проекта.

# prstat -J
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
1669 filip 161M 42M cpu0 59 0 0:03:05 4,7% rhythmbox/9
1757 filip 239M 104M run 59 0 0:17:57 1,3% firefox-bin/7
691 filip 216M 193M sleep 59 0 0:15:57 1,2% Xorg/1
1828 filip 279M 143M sleep 59 0 0:04:01 1,0% soffice.bin/6
2063 root 7424K 3552K cpu1 59 0 0:00:00 0,5% prstat/1
992 filip 124M 26M sleep 49 0 0:00:21 0,2% gnome-terminal/2
903 filip 76M 17M sleep 59 0 0:00:33 0,1% metacity/1
925 filip 135M 16M sleep 59 0 0:00:50 0,0% wnck-applet/1
777 noaccess 78M 53M sleep 59 0 0:00:59 0,0% java/24
937 filip 138M 19M sleep 59 0 0:00:31 0,0% mixer_applet2/1
434 root 6868K 5196K sleep 59 0 0:00:48 0,0% hald-addon-acpi/1
1019 mysql 52M 17M sleep 59 0 0:00:24 0,0% mysqld/10
911 filip 163M 49M sleep 49 0 0:00:16 0,0% nautilus/1
892 filip 73M 12M sleep 59 0 0:00:06 0,0% iiim-panel/1
789 filip 2992K 1544K sleep 59 0 0:00:00 0,0% dbus-daemon/1
PROJID NPROC SWAP RSS MEMORY TIME CPU PROJECT
3 46 586M 852M 56% 0:49:07 8,6% default
1 3 3252K 9500K 0,6% 0:00:00 0,5% user.root
0 44 27M 121M 7,9% 0:02:11 0,1% system
Total: 93 processes, 296 lwps, load averages: 0,22, 0,15, 0,09

Естественно, что список проектов может быть размещен не только в файле /etc/project, но и в других источниках – каталогах NIS, LDAP или иных. Главное – корректно указать источник для поиска описаний проектов в /etc/nsswitch.conf.

Записи файла /etc/project имеют следующий синтаксис:

projname:projid:comment:user-list:group-list:attributes

где

  • projname – имя проекта;
  • projid – уникальный идентификатор проекта;
  • comment – описание проекта;
  • user-list – список пользователей, использующих данный проект;
  • group-list – список групп пользователей, использующих данный проект;
  • attributes – параметры, определяющие возможность использования ресурсов.

Все поля, кроме projname и projid, являются необязательными:

system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.brad:150:A project for user brad:brad::project.max-lwps=(priv,20,deny)

Задачи создаются при следующих действиях/командах:

  • login
  • cron
  • su
  • newtask
  • setproject

С помощью команд id и ps можно определить, с какими проектами пользователь связан:

id -p
uid=0(root) gid=0(root) projid=1(user.root)
ps -o user,pid,uid,projid
USER PID UID PROJID
root 1242 0 1
root 2935 0 1

Создадим новый проект foopro c идентификатором 150 для пользователя brad:

# projadd -U brad -p 150 foopro

Добавим описание проекта foopro:

# projmod -c "A project for user brad" foopro
# cat /etc/project
system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
foopro:150:A project for user brad:brad::
# su - brad
Sun Microsystems Inc. SunOS 5.11 snv_79a January 2008
$ projects
default foopro

Однако этой операцией мы лишь разрешили пользователю brad присоединяться к проекту foopro. Если же мы хотим, чтобы проект foopro был проектом по умолчанию для пользователя brad, надо либо изменить соответственно строку описания пользователя brad в /etc/user.attr, либо переименовать проект foopro в user.brad. В примере ниже мы также наложили ограничение на максимальное количество одновременно запускаемых пользователем потоков исполнения. В ограничении priv означает тип ограничения (priviliged, может быть изменено только администратором), а deny (запретить) – действие, которое следует выполнить при превышении заданного лимита.

system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.brad:150:A project for user brad:brad::project.max-lwps=(
priv,20,deny)
< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Равиль Латыпов
Равиль Латыпов
Россия, Казань, Казанский Национальный Исследовательский Технический Университет