sched_aps_info

Структура, используемая для информирования об общих параметрах адаптивного планирования

Прототип:

#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 в нужные единицы времени.

Note: Значение cycles_per_ms:
  • может не равняться значению поля cycles_per_sec системной страницы, разделенному на 1000
  • не обязательно в тех же единицах, что и значения, возвращаемые ClockCycles() на всех платформах.

windows_cycles
Размер окна усреднения, выраженный в машинных циклах, используемый при планировании. По умолчанию значение равно 100 мс.

Note: Если изменить размер системного тика во время выполнения, это нужно делать до определения партиций. Это связано с тем, что ЗОСРВ преобразует размер окна из миллисекунд в такты системного таймера для внутреннего использования.

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
Действия, предпринимаемые при банкротстве партиции. Банкротство — это случай, когда партиция исчерпала свой предельный (критический) бюджет. Банкротство являеться ошибкой проектирования приложения, но есть возможность настроить реакцию системы на него.

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