Быстрый старт: планировщик потоков адаптивного партиционирования

Начало работы с адаптивным планировщиком потоков

Эта глава содержит указания, которые позволяют быстро начать работу с планировщиком потоков. Предполагается, что в ЗОСРВ «Нейтрино» работает компактный оконный менеджер Photon.

  1. Перейдите в каталог, в котором находится файл сборки загрузочного образа системы.

  2. Создайте копию файла построения загрузочного образа:

    cp basedma.build apsdma.build

  3. Откройте копию (apsdma.build).

  4. Найдите модуль procnto-*. Строка, в которой оно находится, может выглядеть следующим образом:

    PATH=/proc/boot:/bin:/usr/bin:/opt/bin \ LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib \ procnto-instr


    Note: В реальном файле сборки нельзя разбивать длинную строку на несколько сегментов с помощью символа (\); здесь мы сделали это только для удобочитаемости.

  5. Добавьте в начало строки конструкцию [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

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

  6. Сохраните изменения в файле построения загрузочного образа.

  7. Создайте новый загрузочный образ:

    mkifs apsdma.build apsdma.ifs

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

  9. Перезагрузите систему и при загрузке используйте новый загрузочный образ.

  10. Войдите в систему как обычный пользователь.

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

  11. Планировщик потоков автоматически создает одну партицию с именем System. Создайте еще одну партицию с помощью утилиты aps:

    aps create -b20 partitionA


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

  12. Просмотрите список существующих партиций системы с помощью утилиты aps:

    $ 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% |


    Note: Параметр -l указывает, что команда будет выполняться в бесконечном цикле, пока пользователь не завершит ее (например, нажатием клавиш Ctrl - C). В этом примере не завершайте команду, а перейдите в другое окно терминала.

  13. Запустите процесс в только что созданной партиции partitionA с помощью команды on:

    on -Xaps=partitionA rebound &


    Note: Поскольку rebound является графическим приложением, оно обращается к процессу io-graphics, который выполняется в партиции System, и расходует некоторый ресурс CPU. Не следует задавать максимальную скорость работы приложения rebound, поскольку в этом случае сервер io-graphics лишает ресурсов CPU командные интерпретаторы, которые также выполняются в партиции System.

  14. Создайте еще одну партицию partitionB и запустите в ней программу rebound:

    aps create -b20 partitionB on -Xaps=partitionB rebound &

  15. Чтобы узнать, в каких партициях выполняются процессы, воспользуйтесь командой pidin sched. Названия партиций планировщика отображаются в столбце ExtSched.

  16. Создайте программу greedy.c, которая выполняет бесконечный цикл и содержит следующий код.

    #include <stdlib.h>
    int main( void )
    {
    while ( 1 )
    {
    ...
    }
    return EXIT_SUCCESS;
    }

  17. Скомпилируйте и запустите программу greedy в одной из партиций, где она будет расходовать максимум времени CPU:

    qcc -o greedy greedy.c on -Xaps=partitionB ./greedy &

    Экземпляр программы rebound, который выполняется в партиции partitionB больше не получает значительную долю процессорного времени (а, возможно, вообще не имеет доступа к CPU), в отличие от экземпляра в партиции partitionA, которому планировщик потоков гарантирует 20% времени CPU.

  18. Результаты утилиты aps выглядят следующим образом:

    +---- 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, которые заданы в ее бюджете. Это происходит потому, что другие партиции не используют свои бюджеты. Вместо того, чтобы выполнять бездействующий поток в других партициях, планировщик потоков передает неиспользуемое время партициям, которым оно необходимо.

  19. Запустите еще один экземпляр приложения greedy в партиции partitionA:

    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 распределяется между двумя другими партициями.

  20. Запустите еще один экземпляр приложения greedy в партиции 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% |

  21. Если завершить работу экземпляров программы greedy командой slay, экземпляры rebound выполняются быстрее, а расход времени CPU уменьшается.

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




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