Начало работы с адаптивным планировщиком потоков
Эта глава содержит указания, которые позволяют быстро начать работу с планировщиком потоков. Предполагается, что в ЗОСРВ «Нейтрино» работает компактный оконный менеджер Photon.
cp basedma.build apsdma.build
apsdma.build
).
PATH=/proc/boot:/bin:/usr/bin:/opt/bin \ LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib \ procnto-instr
![]() | В реальном файле сборки нельзя разбивать длинную строку на несколько сегментов с помощью символа (\ ); здесь мы сделали это только для удобочитаемости. |
[module=aps]
:
[module=aps] PATH=/proc/boot:/bin:/usr/bin:/opt/bin \ LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib \ procnto-instr
Можно создавать партиции и запускать в них программы в файле сборки, однако удобнее экспериментировать с партициями планировщика во время работы системы, чтобы с легкостью вносить нужные изменения. Дополнительную информацию см. в главе Настройка и применение планировщика потоков адаптивного партиционирования.
mkifs apsdma.build apsdma.ifs
/.boot/
, а не перезаписывайте существующий образ; /.altboot
:
cp /.altboot /.old_altboot cp /.boot /.altboot cp apsdma.ifs /.boot
![]() | Для работы с партициями не обязательно использовать учетную запись root, поскольку параметры безопасности изначально не установлены. При использовании планировщика потоков необходимо задавать подходящий уровень безопасности. Дополнительную информацию см. в главе Безопасность партиций настоящего руководства и в описании функции SchedCtl(). |
aps create -b20 partitionA
![]() | Бюджет новой партиций вычитается из бюджета ее родительской партиции (в данном случае System). |
$ aps show -l +---- CPU Time ----+-- Critical Time -- Partition name id | Budget | Used | Budget | Used --------------------+------------------+------------------- System 0 | 80% | 14.14% | 100ms | 0.000ms partitionA 1 | 20% | 0.00% | 0ms | 0.000ms --------------------+------------------+------------------- Total | 100% | 14.14% |
![]() | Параметр -l указывает, что команда будет выполняться в бесконечном цикле, пока пользователь не завершит ее (например, нажатием клавиш Ctrl - C ). В этом примере не завершайте команду, а перейдите в другое окно терминала. |
on -Xaps=partitionA rebound &
![]() | Поскольку rebound является графическим приложением, оно обращается к процессу io-graphics, который выполняется в партиции System, и расходует некоторый ресурс CPU. Не следует задавать максимальную скорость работы приложения rebound, поскольку в этом случае сервер io-graphics лишает ресурсов CPU командные интерпретаторы, которые также выполняются в партиции System. |
aps create -b20 partitionB on -Xaps=partitionB rebound &
greedy.c
, которая выполняет бесконечный цикл и содержит следующий код.
#include <stdlib.h>int main( void ){while ( 1 ){...}return EXIT_SUCCESS;}
qcc -o greedy greedy.c on -Xaps=partitionB ./greedy &
Экземпляр программы rebound, который выполняется в партиции partitionB больше не получает значительную долю процессорного времени (а, возможно, вообще не имеет доступа к CPU), в отличие от экземпляра в партиции partitionA, которому планировщик потоков гарантирует 20% времени CPU.
+---- CPU Time ----+-- Critical Time -- Partition name id | Budget | Used | Budget | Used --------------------+------------------+------------------- System 0 | 60% | 11.34% | 100ms | 0.000ms partitionA 1 | 20% | 2.12% | 0ms | 0.000ms partitionB 2 | 20% | 86.50% | 0ms | 0.000ms --------------------+------------------+------------------- Total | 100% | 99.96% |
Обратите внимание, что партиция partitionB потребляет более 20% ресурсов CPU, которые заданы в ее бюджете. Это происходит потому, что другие партиции не используют свои бюджеты. Вместо того, чтобы выполнять бездействующий поток в других партициях, планировщик потоков передает неиспользуемое время партициям, которым оно необходимо.
on -Xaps=partitionA ./greedy &
Экземпляр rebound, который находится в этой партиции, не выполняется. Результаты утилиты aps выглядят следующим образом:
+---- CPU Time ----+-- Critical Time -- Partition name id | Budget | Used | Budget | Used --------------------+------------------+------------------- System 0 | 60% | 1.73% | 100ms | 0.000ms partitionA 1 | 20% | 48.91% | 0ms | 0.000ms partitionB 2 | 20% | 49.32% | 0ms | 0.000ms --------------------+------------------+------------------- Total | 100% | 99.96% |
Неспользуемое время партиции System распределяется между двумя другими партициями.
on -Xaps=System ./greedy &
Поскольку теперь в системе нет свободного времени, каждая партиция получает только свой гарантированный минимум времени CPU. Результаты утилиты aps выглядят следующим образом:
+---- CPU Time ----+-- Critical Time -- Partition name id | Budget | Used | Budget | Used --------------------+------------------+------------------- System 0 | 60% | 59.99% | 100ms | 0.000ms partitionA 1 | 20% | 19.97% | 0ms | 0.000ms partitionB 2 | 20% | 19.99% | 0ms | 0.000ms --------------------+------------------+------------------- Total | 100% | 99.96% |
Поскольку указанные партиции создаются во время работы системы, а не в образе ОС, новые партиции удаляются при перезапуске.
Предыдущий раздел: перейти