681.324 Шестаков С.К.
Россия, Пенза, Пензенский государственный университет
МОДЕЛИРОВАНИЕ УСТРОЙСТВА АППАРАТНОЙ ПОДДЕРЖКИ ДИСПЕТЧЕРИЗАЦИИ ЗАДАЧ ДЛЯ МНОГОПРОЦЕССОРНОЙ СИСТЕМЫ НА ПЛИС
Аннотация. В статье обосновывается необходимость реализации функций диспетчеризации задач аппаратными средствами. Представлены результаты исследований по аппаратной поддержке функций диспетчеризации задач многопроцессорных операционных систем с пространственным разделением задач и с разделением времени. Проведено моделирование алгоритмов диспетчеризации на языке VHDL, и показано существенное повышение производительности разработанного диспетчера по сравнению с традиционным.
Ключевые слова: аппаратная поддержка, многопроцессорная система, производительность, операционная система, синхронизация процессов, диспетчеризация задач.
При разработке современных многопроцессорных операционных систем всё чаще стараются осуществить переход от программной реализации функций операционной системы к аппаратной, поскольку программный способ вносит существенные накладные расходы. Особенно остро эта проблема стоит в многопроцессорных системах, выполняемых в системах на кристалле. Потери производительности связаны со значительными временными затратами на выполнение процедур планирования и переключения контекстов задач (процессов и потоков). Частью планировщика является функция диспетчеризации задач и связанные с ней процедуры синхронизации процессов. Традиционно, в однопроцессорных системах, синхронизация процессов осуществляется программным путем в пространстве ядра операционной системы или в пространстве пользователя и на производительность вычислительной системы коренным образом не влияет. В многопроцессорных системах относительные временные затраты на синхронизацию процессов увеличиваются. По оценкам, на диспетчеризацию одного процесса уходит от нескольких тысяч до десятка тысяч процессорных тактов.
В связи с этим возникает необходимость в аппаратной поддержке функций синхронизации процессов при диспетчеризации задач в многопроцессорной системе. При таком подходе нагрузка на ядро операционной системы могла бы существенно снизиться, так как функции диспетчеризации и планирования процессов частично были бы реализованы в самом процессоре или в отдельном устройстве.
Существует два типа диспетчеров (планировщиков) задач: с разделением времени и разделением пространства [1]. В первом типе имеется одна очередь задач типа FIFO, разделяемая всеми процессорами. Вновь поступившая задача помещается планировщиком в конец очереди, причем задачи, находящиеся вначале очереди, являются кандидатами на выполнение. Когда один из процессоров освобождается от текущей работы, он обращается к диспетчеру, который выбирает из головы очереди готовую к выполнению задачу и работает с ней до её завершения или до момента блокирования, например, вследствие необходимости выполнения операции ввода-вывода.
Алгоритм разделения загрузки представляет наиболее простой и одновременно эффективный способ планирования, поскольку обладает рядом достоинств:
- загрузка распределяется равномерно между процессорами, обеспечивая отсутствие простоев процессоров при наличии готовых к выполнению задач;
- простота представления алгоритма функционирования планировщика.
Эти достоинства обеспечивают преимущественное применение такого способа планирования в многопроцессорных системах. Традиционно планировщик и диспетчер задач выполняются программно и реализуются в SMP- системах методом вызова этих функций из общей памяти, в которой хранится программа операционной системы.
Однако планирование в многопроцессорной системе связано со значительными временными потерями. Временные потери связаны с тем, что каждый процессор чтобы, получить новую задачу, должен вначале захватить шину, дождавшись её освобождения. Затем, если, очередь готовых процессов не заблокирована другим процессором, то запрашивающий процессор может получить новую задачу. Если же очередь готовых процессов заблокирована, то запрашивающий процессор вынужден ждать, при этом он должен освободить общую шину. Кроме того в результате переключения контекста с высокой вероятностью возможна перезагрузка КЭШ и дополнительные потери процессорных тактов.
Одним из путей решения подобных проблем является аппаратная реализация функций диспетчеризации, которая в значительной степени снимает проблему временных потерь. Предлагаемый подход заключается в том, что планировщик и диспетчер задач выполняются в виде независимого аппаратного устройства (специализированного процессора) в составе многопроцессорной системы [2].
Аппаратная реализация требует поиска методов формализации алгоритмов функционирования, способных упростить и облегчить процесс проектирования соответствующих устройств. Для этого предлагается использовать аппарат недетерминированных автоматов (НДА), на основе которого можно осуществить формальный синтез блока синхронизации, что обеспечивает корректное функционирование планировщика и диспетчера задач многопроцессорной системы [3].
В самом общем виде алгоритм диспетчеризации задач выглядит следующим образом. В начальном состоянии каждый включающийся в работу процессор выполняет операцию «готов» и переходит в спящий режим, в котором находится до тех пор, пока на обслуживание не поступит задача. Если все процессоры заняты обслуживанием, то вновь поступившая задача помещается в конец очереди, число мест в которой ограничено. Если вновь поступившая задача обнаружит, что очередь заполнена, она на обслуживание не принимается и покидает систему. Принятая на обслуживание задача находится в очереди до тех пор, пока не поступит на выполнение в процессор, при этом в очереди освобождается одно место. После выполнения очередной задачи процессор просматривает очередь, и если в ней имеются ожидающие задачи, то он берет на выполнение задачу, стоящую в голове списка. Если очередь пуста, процессор переходит в режим ожидания. Если освободилось одновременно несколько процессоров, то производится выбор одного из них для обслуживания очередной задачи.
Следует учесть обстоятельство, что при одновременном освобождении нескольких процессоров они одновременно обращаются к общей очереди задач, вызывая тем самым конфликт, который разрешается методом взаимных исключений с использованием приоритетов задач.
Для формального описания алгоритма взаимодействия процессов в данной задаче, как уже было сказано, будем базироваться на использование моделей недетерминированных автоматов и их представления в виде систем канонических уравнений, описывающих все реализуемые события управляю-
щего алгоритма. В основе управляющего алгоритма лежит классическая задача о «спящем парикмахере» [1].
В диспетчерах с пространственным разделением каждый процессор имеет свою очередь задач. При переключении контекста задача остается в той же очереди, в которой она находилась ранее, что решает проблему перезагрузки кэш, но вносит проблему балансировки. Для решения этой проблемы диспетчер снабжают функцией перераспределения задач по процессорным узлам, что требует дополнительных затрат времени.
Следует отметить, что алгоритм работы диспетчера задач с распределенными очередями намного проще, чем первый вариант организации, так как интерфейс взаимодействия с процессорами в диспетчере фактически отсутствует. Данный алгоритм также был описан и формализован с использованием моделей недетерминированных автоматов.
Приведенный анализ показывает, что все типы диспетчеров несут потери не только из-за длительного выполнения команд основной программы диспетчеризации, но и из-за возложенных дополнительных функций, реализуемых также программно. Одним из путей повышения производительности лежит в плоскости аппаратной поддержки трудоемких функций диспетчера.
В настоящей работе поставлена задача схемной реализации алгоритма диспетчеризации задач с разделением времени в части синхронизации взаимодействующих процессов, и её моделирования на VHDL с использованием процессоров PicoBlaze.
Устройство диспетчеризации было реализовано на языке VHDL в составе трехпроцессорной системы. Оно состоит из блока очереди, хранящей идентификаторы задач, блока управления очередью, блока выбора процессора, интерфейсного блока для связи с процессорами и управляющего автомата.
Диспетчер
—S_proc_free—
—S_proc_req---
—S_task_req---
—S_task_ready— —task_id(15:0)— S_task_accepted-—S_task_fifo_wr—
—S_proc_free—
—S_proc_req---
—S_task_req---
—S_task_ready— —task_id(15:0)— S_task_accepted-—S_task_fifo_wr—
—S_proc_free—
—S_proc_req---
—S_task_req---
—S_task_ready— —task_id(15:0)— S_task_accepted-—S_task_fifo_wr—
-S_task_arrived-
-task_id(15:0)-
Рисунок 1. Структура реализованной системы.
Модель устройства была протестирована в различных режимах работы и показала хорошие результаты. Так на работу устройства синхронизации диспетчера уходит всего 6 процессорных тактов (см. рисунок 2), что значительно меньше, чем при его программной реализации.
Current Simulation Time: 4000 ns
III elk
||| reset
|D sjask_arri*ed |D sjaskjnjueue |D s _proc_sel_1 |D sjroc_sel_3 |D sjroc_sel_2 |D sjaskjeq _prod |D sjaskjeq _proc2 |D sjaskjeq _proc3
|D s_task_acceptjroc1 0
В ^(proc1jaskjq[15:0] 1...
|D s_task_acceptjroc2 0
E ^(proc2jaskjd[15:0] 1...
|D s_task_acceptjroc3 0
E$proc3jaskjq[15:0] 1...
ЕЕ 600 800 Ш Е 1000 Ц (]Г 1200 у 1400
п п п 1 П п п
1
г
1 L
Г 1
и
| 16'hOOOO '( ii
п
I «000 у 16'М002
П
| юмооо У «001
Рисунок 2. Временные диаграммы работы устройства диспетчеризации.
Работа выполнена в рамках ФЦП «Научные и научно-педагогические кадры инновационной России», соглашение № 14.B37.21.0597
ЛИТЕРАТУРА
1. Таненбаум Э. Современные операционные системы. 3-е изд. - СПб.: Питер, 2010. — 1120 с.
2. Вашкевич Н.П., Бикташев Р.А. Формализация алгоритма синхронизации процессов при диспетчеризации задач в многопроцессорных системах с использованием механизма рандеву // Информационные технологии.- 2009.- №12.- с. 12-17.
3. Вашкевич Н.П. Недетерминированные автоматы в проектировании систем параллельной обработки. Учебное пособие. - Пенза: изд-во Пенз.гос.ун-та, 2004.- 280 с.