Настройка и применение планировщика потоков адаптивного партиционирования

Настройка и применение планировщика потоков

Статья включает:

Сборка образа
Создание партиций планировщика
Создание партиции в загрузочном образе
Создание партиции в командной строке
Создание партиции в программе
Запуск процесса в партиции
Запуск процесса в загрузочном образе
Запуск процесса в командной строке
Запуск процесса в программе
Просмотр информации об использовании партиций

Сборка образа

Чтобы воспользоваться планировщиком потоков, необходимо добавить атрибут [module=aps] в команду, которая запускает модуль procnto-* в файле построения загрузочного образа. Пример:

[module=aps] PATH=/proc/boot procnto -vv

Затем следует пересобрать образ ОС с помощью команды mkifs и поместить его в /.boot. Пример см. в главе Быстрый старт: планировщик потоков адаптивного партиционирования.


Note: Для выполнения приложений в партициях не требуется перекомпилировать их.

Создание партиций планировщика

При загрузке система создает первую партицию System с номером 0 и начальным бюджетом 100%. Пользователь может создавать партиции и назначать им бюджеты с помощью командно-строковых утилит в файле построения загрузочного образа или динамически посредством API, который определен в заголовочном файле <sys/sched_aps.h>. При создании партиции ее бюджет вычитается из бюджета родительской партиции.

Для просмотра списка созданных партиций можно воспользоваться командой aps show. Дополнительную информацию об утилите aps см. в ее описании.

Создание партиции в загрузочном образе

Чтобы создать партицию в файле построения загрузочного образа, добавьте строку следующего формата в сценарий запуска:

sched_aps name budget


Note: Если в системе используется утилита diskboot, следует создавать партиции до ее выполнения, чтобы иметь возможность запускать программы в партициях с помощью файла /etc/rc.d/rc.local. Если партиции не созданы, при попытке запустить программу в партиции из файла /etc/rc.d/rc.local возникает ошибка.

Дополнительную информацию о запуске программ при загрузке системы см. в главе Управление запуском ЗОСРВ «Нейтрино».


С помощью утилиты aps также можно задавать параметры безопасности в сценарии запуска. Например, чтобы создать партицию с именем Drivers, бюджетом 20% и рекомендуемым уровнем безопасности, следует добавить следующие строки в файле построения загрузочного образа:

sched_aps Drivers 20 aps modify -s recommended

Создание партиции в командной строке

Чтобы создать партицию с помощью командной строки или файла /etc/rc.d/rc.local, следует воспользоваться командой aps с параметром create. Пример:

aps create -b15 DebugReserve

создает партицию с именем DebugReserve и бюджетом 15%.


Note: При создании партиции ее бюджет заимствуется из бюджета родительской партиции (как правило, System).

Создание партиции в программе

Чтобы создать партицию в программе, следует воспользоваться командой SCHED_APS_CREATE_PARTITION функции SchedCtl(). Пример:

sched_aps_create_parms creation_data;
memset( &creation_data, 0, sizeof( creation_data ) );
creation_data.budget_percent = 15;
creation_data.critical_budget_ms = 0;
creation_data.name = "DebugReserve";
ret = SchedCtl( SCHED_APS_CREATE_PARTITION, &creation_data, sizeof( creation_data ) );
if ( ret != EOK )
printf( "Couldn't create partition \"%s\": %s (%d).\n",
creation_data.name, strerror( errno ), errno );
else
printf( "The new partition's ID is %d.\n", creation_data.id );

Следует иметь в виду, что функция SchedCtl() помещает идентификатор партиции в структуру sched_aps_create_parms.

Запуск процесса в партиции

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

Запустить процесс в партиции также можно с помощью командной строки. Интерфейс, который определен в файле <sys/sched_aps.h>, дает возможность запускать в партиции отдельные потоки и перемещать выполняемые потоки из одной партиции в другую.

Запуск процесса в загрузочном образе

Чтобы запустить команду в партиции, следует указать атрибут [sched_aps=partition_name] в файле построения загрузочного образа. Пример:

[+session pri=35 sched_aps=DebugReserve] ksh &

запускает командный интерпретатор в партиции DebugReserve.

После создания партиции можно запускать в ней процессы из любого места сценария запуска.

Запуск процесса в командной строке

Чтобы запустить программу в партиции из командной строки или файла /etc/rc.d/rc.local, следует воспользоваться командой on с ключом -Xaps=partition_name. X задает внешнего планировщика — в данном случае планировщика потоков. Пример:

on -Xaps=DebugReserve ksh

запускает командный интерпретатор в партиции DebugReserve.

Запуск процесса в программе

Чтобы запустить в партиции программу из другой программы, запустите другую программу (например, с помощью функции spawn()), а затем выполните команду SCHED_APS_JOIN_PARTITION функции SchedCtl(). Например, следующий код помещает текущий процесс в указанную партицию:

sched_aps_join_parms join_data;
memset( &join_data, 0, sizeof( join_data ) );
join_data.id = partition_ID;
join_data.pid = 0;
join_data.tid = 0;
ret = SchedCtl( SCHED_APS_JOIN_PARTITION, &join_data, sizeof( join_data ) );
if ( ret != EOK )
printf( "Couldn't join partition %d: %s (%d).\n",
join_data.id, strerror( errno ), errno );
else
printf( "Process is now in partition %d.\n", join_data.id );

Просмотр информации об использовании партиций

Утилита aps чаще всего используется для перечисления партиций с указанием расходуемого ими времени CPU (команда aps show):

$ aps show +---- CPU Time ----+-- Critical Time -- Partition name id | Budget | Used | Budget | Used --------------------+------------------+------------------- System 0 | 60% | 36.24% | 100ms | 0.000ms partitionA 1 | 20% | 2.11% | 0ms | 0.000ms partitionB 2 | 20% | 1.98% | 0ms | 0.000ms --------------------+------------------+------------------- Total | 100% | 40.33% |

Чтобы отобразить расход CPU за более длительные интервалы времени (обычно равные 10 и 100 окнам усреднения), следует воспользоваться параметром -v:

$ aps show -v +---------- CPU Time -----------+- Critical Time - | | Used | | Partition name id | Budget | 0.100s 1.00s 10.0s | Budget | Used ------------------+-------------------------------+----------------- System 0 | 60% | 20.91% 3.23% 4.33% | 100ms | 0.000ms partitionA 1 | 20% | 1.78% 2.09% 2.09% | 0ms | 0.000ms partitionB 2 | 20% | 1.71% 2.03% 2.03% | 0ms | 0.000ms ------------------+-------------------------------+----------------- Total | 100% | 24.40% 7.34% 8.44% |

Если параметр v указан несколько раз, утилита aps отображает расход резервных бюджетов за более долгосрочные периоды.

Чтобы отображать результаты выполнения команды aps show каждые 5 секунд, воспользуйтесь ключом -l следующим образом: aps show -l. Период обновления результатов можно изменять с помощью ключа -d.

Дополнительную информацию об утилите aps см. в её описании.




Предыдущий раздел: перейти