Структура, используемая для информирования об общих параметрах адаптивного планирования
#include <sys/sched_aps.h>
#include <sys/neutrino.h>
typedef struct {
_Uint64t cycles_per_ms;
_Uint64t windowsize_cycles;
_Uint64t windowsize2_cycles;
_Uint64t windowsize3_cycles;
_Uint32t scheduling_policy_flags;
_Uint32t sec_flags;
_Uint32t bankruptcy_policy;
_Uint16t num_partitions;
_Uint16t max_partitions;
} sched_aps_info;
Структура описывает общие параметры квотирования ресурсов и адаптивного планирования и включает следующие поля:
- cycles_per_ms
- Число машинных циклов за одну миллисекунду. Используйте это для преобразования вывода команды SCHED_APS_QUERY_PARTITION в нужные единицы времени.
 | Значение cycles_per_ms: - может не равняться значению поля cycles_per_sec системной страницы, разделенному на
1000 - не обязательно в тех же единицах, что и значения, возвращаемые ClockCycles() на всех платформах.
|
- windows_cycles
- Размер окна усреднения, выраженный в машинных циклах, используемый при планировании. По умолчанию значение равно
100
мс.
 | Если изменить размер системного тика во время выполнения, это нужно делать до определения партиций. Это связано с тем, что ЗОСРВ преобразует размер окна из миллисекунд в такты системного таймера для внутреннего использования. |
- windowsize2_cycles
- Длина в машинных циклах второго окна, используется только для отчетов. Обычно в 10 раз больше размера окна windows_cycles.
- windowsize3_cycles
- Длина в машинных циклах третьего окна, используется только для отчетов. Обычно в 100 раз больше размера окна windows_cycles.
- scheduling_policy_flags
- Политика планирования. Эти флаги задают параметры адаптивного алгоритма планирования. Чтобы установить их, необходимо передать указатель на объединенный набор этих флагов с помощью команды SCHED_APS_SET_PARMS для SchedCtl():
- SCHED_APS_SCHEDPOL_FREETIME_BY_RATIO
- Свободное время — это ситуация, когда хотя бы один раздел не запущен. Его время освобождается для других партиций, которые могут превысить свои бюджеты.
По умолчанию планировщик выделяет свободное время партиции с самым высоким приоритетом выполняемого потока. Эта партиция гарантирует планирование в реальном времени (т.е. планирование строго по приоритету) для разделов в любое время, когда они не ограничены правом какой-либо другой партиции на её гарантированный минимальный бюджет. Кроме этого, одному разделу разрешено использовать все свободное время.
Если вы установите данный флаг, запущенные партиции будут делить свободное время пропорционально соотношению их бюджетов. Один раздел не может получить все свободное время. Когда флаг установлен, партиции будут иметь строгое приоритетное планирование только если их бюджеты не израсходованы. - SCHED_APS_SCHEDPOL_BMP_SAFETY
- Строгое планирование по приоритетам между партициями, которое, с учетом комбинаций бюджетов и масок выполнения (т.е. ограниченная многопроцессорность BMP), может потребовать от адаптивного планировщика нарушения минимальных бюджетов CPU. Планировщик использует более ограниченный алгоритм, гарантирующий соблюдение минимальных бюджетов CPU и планирование с учетом приоритетов между партициями, если партиции потребляют меньше своего бюджета.
Если этот флаг установлен, SCHED_APS_SCHEDPOL_FREETIME_BY_RATIO
также устанавливается автоматически. - SCHED_APS_SCHEDPOL_DEFAULT
- Ни
SCHED_APS_SCHEDPOL_FREETIME_BY_RATIO
, ни SCHED_APS_SCHEDPOL_BMP_SAFETY
. Это значение устанавливаеться по-умолчанию.
Планирование внутри партиции всегда осуществляется строго по приоритету, независимо от того, какой из этих флагов установлен. - sec_flags
- Набор флагов SCHED_APS_SEC_*, описывающих параметры безопасности.
- bankruptcy_policy
- Действия, предпринимаемые при банкротстве партиции. Банкротство — это случай, когда партиция исчерпала свой предельный (критический) бюджет. Банкротство являеться ошибкой проектирования приложения, но есть возможность настроить реакцию системы на него.
Возможно система не сообщит о банкротстве, когда вы этого ожидаете. Банкротство может быть объявлено только в том случае, когда партиция используется сверх предельного времени. Предельное время начисляется за те временные интервалы, когда выполняются ВСЕ следующие условия: - Предельный (критический) бюджет исполняющейся партиции больше нуля.
- Исполняющийся наиболее высокоприоритетный поток в разделе помечен как критический или получил такое состояние из-за получения
SIG_INTR
, наличия критической struct sigevent или при получении сообщения от критического потока. - Текущая партиция находится за пределами процентного бюджета CPU.
- Существует хотя бы еще одна партиция, конкурирующая за процессорное время.
Только в этом случае, если предельное время, выставленное за текущее окно усреднения, превысит предельный бюджет партиции, система объявляет партицию банкротом. Это приводит к тому, что: - партиция выходит за рамки бюджета на оставшуюся часть текущего окна планирования.
- доставляет событие struct sigevent, указанное в качестве уведомления о банкротстве (см. SCHED_APS_ATTACH_EVENTS, но не более одного раза.
Кроме того, можно настроить следующую реакцию на банкротство партиции: - SCHED_APS_BNKR_BASIC (по умолчанию)
- Доставить уведомление о банкротстве и сделать партицию внебюджетной на оставшуюся часть окна планирования. Значение по умолчанию -
100
мс. - SCHED_APS_BNKR_CANCEL_BUDGET
- Устанавка критического бюджета проблемной партиции равным нолю. В этом случае повторное банкротство исключено, что сохраняется до тех пор, пока не произойдет перезапуск или вызов команды SCHED_APS_MODIFY_PARTITION с новым предельным бюджетом.
- SCHED_APS_BNKR_LOG
- Не реализовано.
- SCHED_APS_BNKR_REBOOT
- Вызов аварийного завершения работы системы с сообщением, идентифицирующим нарушающий раздел. Это наиболее жесткая реакция, используеться во время тестирования, для того, чтобы убедиться, что банкротства не игнорируются. Использование данной опции в конечном изделии не рекомендуется.
- SCHED_APS_BNKR_RECOMMENDED
- Комбинация
SCHED_APS_BNKR_CANCEL_BUDGET
| SCHED_APS_BNKR_LOG
. Рекомендуемый способ уведомлений.
Чтобы установить вариант обработки банкротства передайте комбинацию флагов SCHED_APS_BNKR_*
и указатель на поле bankruptcy_policyp структуры sched_aps_parms при вызове . SCHED_APS_SET_PARMS. - num_partitions
- Количество определенных партиций.
- max_partitions
- Максимальное количество партиций, которые можно создать в любой момент времени.
ЗОСРВ «Нейтрино»
ClockCycles() SchedCtl()
Предыдущий раздел: Описание API системной библиотеки