Контроль планировщика адаптивного партиционирования ресурсов
#include <sys/sched_aps.h>#include <sys/neutrino.h>int SchedCtl( int cmd,void *data,int length );int SchedCtl_r( int cmd,void *data,int length );
libc
Вызовы ядра SchedCtl() и SchedCtl_r() управляют планировщиком адаптивного партиционирования ресурсов.
Планировщик не является обязательным и присутствует только в случае добавления строки [module=aps]
в файле построения образа ОС.
Обе функции идентичны за исключением способа возврата ошибок.
![]() | Необходимо инициализировать все поля, включая зарезервированные, в структурах, которые передаются в качестве аргумента data путем вызова, например, memset(). Также существует возможность использовать макрос APS_INIT_DATA():
|
Данная команда заполняет структуру sched_aps_info, которая описывает общие параметры планировщика адаптивного партиционирования.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Команда устанавливает параметры общего поведения планировщика адаптивного партиционирования ресурсов. Аргумент data должен быть указателем на структуру sched_aps_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
SCHED_APS_SEC_PARTITIONS_LOCKED
, или установлен SCHED_APS_SEC_ROOT0_OVERALL
, и работа в системной партиции ведется не от имени суперпользователя. Для получения дополнительной информации см. SCHED_APS_SEC_*.
Данная команда создает новую партицию, которая считается дочерней по отношению к партиции, вызывающей SchedCtl(). Система автоматически создает системную партицию под названием System (значение APS_SYSTEM_PARTITION_NAME
) с идентификатором 0
.
Аргумент data для этой команды должен быть указателем на структуру sched_aps_create_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
SCHED_APS_SEC_PARTITIONS_LOCKED
или любое из следующих условий безопасности установлено, но не выполнено: SCHED_APS_SEC_ROOT_MAKES_PARTITIONS
SCHED_APS_SEC_SYS_MAKES_PARTITIONS
SCHED_APS_SEC_NONZERO_BUDGETS
SCHED_APS_SEC_ROOT_MAKES_CRITICAL
SCHED_APS_SEC_SYS_MAKES_CRITICAL
APS_PARTITION_NAME_LENGTH
.
Команда получает информацию о заданной партиции. Аргумент data для этой команды должен быть указателем на структуру sched_aps_partition_info.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Данная команда находит идентификатор партиции для заданного имени партиции. Аргумент data для этой команды должен являться структурой sched_aps_lookup_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
В результате выполнения этой команды поток, указанный заданными идентификаторами процесса и потока, становится членом указанной партиции. Эта партиция также становится новой домашней партицией потока, т.е. местом, куда он возвращается после наследования партиции. Аргумент data этой команды должен быть указателем на sched_aps_join_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
SCHED_APS_SEC_ROOT_JOINS
SCHED_APS_SEC_SYS_JOINS
SCHED_APS_SEC_PARENT_JOINS
SCHED_APS_SEC_JOIN_SELF_ONLY
Данная команда изменяет параметры существующей партиции. Если процентное значение нового бюджета отличается от текущего, разница либо берется из бюджета родительской партиции, либо возвращается в неё. Параметр критического времени влияет только на выбранную партицию, но не на её родительскую партицию. Чтобы изменить только один параметр: новый бюджет или новое критическое время, для другого значения нужно установить -1
.
![]() |
|
Аргумент data для этой команды должен быть указателем на структуру sched_aps_modify_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
SCHED_APS_SEC_PARTITIONS_LOCKED
, или установлены и не удовлетворены следующие параметры безопасности: SCHED_APS_SEC_PARENT_MODIFIES
SCHED_APS_SEC_ROOT_MAKES_PARTITIONS
SCHED_APS_SEC_SYS_MAKES_PARTITIONS
SCHED_APS_SEC_NONZERO_BUDGETS
SCHED_APS_SEC_ROOT_MAKES_CRITICAL
SCHED_APS_SEC_SYS_MAKES_CRITICAL
Данная команда возвращает мгновенные значения переменных учета времени ЦП для набора партиций. Команда может заполнять данные для более чем одной партиции. Если аргумент length для SchedCtl() указывает, что функции был передан массив структур sched_aps_partition_stats, SchedCtl() заполняет каждый элемент статистикой для другой партиции, начиная с указанной партиции по полю id.
![]() | Чтобы получить точную картину по состоянию всей системы, важно считывать данные для всех партиций за один вызов, поскольку последовательные вызовы SCHED_APS_PARTITION_STATS могут исходить из отдельных окон усреднения.
Чтобы определить количество партиций, следует использовать команду SCHED_APS_OVERALL_STATS. |
Команда перезаписывает поле id номером партиции, для которой возвращаются данные. Он сохраняет -1
в поле id неиспользуемых элементов. Чтобы преобразовать время в циклах в миллисекунды, необходиом разделить их на cycles_per_ms, полученное с помощью команды SCHED_APS_QUERY_PARMS.
Аргумент data для этой команды должен быть указателем на структуру sched_aps_partition_stats или массив этих структур.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Данная команда возвращает мгновенные значения общих переменных использования ЦП и других динамических состояний планировщика. Аргумент data этой команды должен быть указателем на структуру sched_aps_overall_stats.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Данная команда устанавливает один поток в заданном процессе для запуска в качестве критического потока всякий раз, когда он запускается. Чтобы сделать вызывающий поток критическим, нужно использовать идентификатор потока, равный нулю. Аргумент data для этой команды должен быть указателем на структуру sched_aps_mark_crit_parms.
![]() | В большинстве случаев полезнее отправлять потоку критическое событие struct sigevent, чтобы он работал как критический поток. |
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Данная команда очищает состояние «всегда запускать как критическое», установленное командой SCHED_APS_CLEAR_CRITICAL. Следовательно, поток будет работать как критический только тогда, когда он унаследует это состояние от другого потока (при получении сообщения). Аргумент data этой команды должен быть указателем на структуру sched_aps_clear_crit_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Эта команда определяет партицию для данного потока и указывает, помечен ли поток в процессе как критический. Чтобы указать вызывающий поток, нужно спользовать нулевой идентификатор потока. Аргумент data этой команды должен быть указателем на структуру sched_aps_query_thread_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Данная команда определяет события struct sigevent, которые планировщик вернет вызывающему потоку, когда планировщик обнаружит, что данная партиция обанкротилась или вся система является перегруженной.
![]() | Уведомление о перегрузке не реализовано в данной редакции ЗОСРВ «Нейтрино». |
Вызов SCHED_APS_ATTACH_EVENTS
создает уведомление только один раз. После получения уведомления необходимо снова вызвать SCHED_APS_ATTACH_EVENTS
, чтобы получить последующее уведомление. Это делается для того, чтобы система не отправляла уведомления быстрее, чем пользователь успел их обработать. Поле pinfo_flags структуры sched_aps_partition_stats указывает, активированы ли эти события. (см. команду SCHED_APS_PARTITION_STATS)
![]() | Только одна пара событий struct sigevent, банкротство и перегрузка, могут быть зарегистрированы для каждой партиции и для одного принимающего потока. Принимающий уведомления поток является вызывающим потоком. Прикрепление событий во второй раз перезаписывает первое. Передача указателей NULL означает "без изменений в уведомлении". Для того, чтобы отключить уведомление, необходимо установить для соответствующего события struct sigevent значение SIGEV_NONE с помощью SIGEV_NONE_INIT(). |
Для получения информации по настройке дополнительных действий, которые система будет выполнять при банкротстве, см. SCHED_APS_BNKR_*. Аргумент data для этой команды должен быть указателем на структуру sched_aps_events_parm.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
SCHED_APS_SEC_PARENT_MODIFIES
SCHED_APS_SEC_ROOT_MAKES_PARTITIONS
SCHED_APS_SEC_SYS_MAKES_PARTITIONS
Данная команда устанавливает параметры безопасности. Установленный бит включает соответствующий параметр безопасности. Последовательные вызовы добавляются к существующему набору параметров безопасности. Параметры безопасности могут быть сброшены только перезагрузкой.
![]() | Необходимо быть суперпозльзователем в системной партиции, чтобы иметь возможность использовать данную команду, даже при условии, что все параметры безопасности отключены. |
Аргумент data для этой команды должен быть указателем на структуру sched_aps_security_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Команда возвращает партицию заданного процесса. Партиция процесса оплачивается, пока один из потоков процесса обрабатывает импульс. Все отдельные потоки в процессе могут находиться в разных партициях процесса. Аргумент data для этой команды должен быть указателем на структуру sched_aps_query_process_parms.
Коды ошибок:
Для данной команды возвращаются следующие коды ошибок:
Данный вызов является неблокируемым.
EOK
возвращается при успешном завершении. При возникновении ошибки SchedCtl() возвращает -1
и устанавливает errno.EOK
возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки SchedCtl_r() возвращает отрицательное значение кода ошибки.Список кодов ошибок представлен в описании каждой команды.
sched_aps_partition_info part_info;/* Необходимо инициализировать данный блок параметров. */APS_INIT_DATA( &part_info );/* Установить входные элементы данного блока параметров. */part_info.id = 2;/* Вызов SchedCtl для отправки запроса к партиции. */ret = SchedCtl( SCHED_APS_QUERY_PARTITION, &part_info, sizeof( part_info ) );if ( EOK != ret )some_kind_of_error_handler();/* Использование выходного поля. */printf( "The budget is %d per cent.\n", part_info.budget_percent );
ЗОСРВ «Нейтрино»
sched_aps_info structure, sched_aps_parms structure, sched_aps_create_parms structure, sched_aps_partition_info structure, sched_aps_lookup_parms structure, sched_aps_join_parms structure, sched_aps_modify_parms structure, sched_aps_partition_stats structure, sched_aps_overall_stats structure, sched_aps_mark_crit_parms structure, sched_aps_clear_crit_parms structure, sched_aps_query_thread_parms structure, sched_aps_events_parm structure, sched_aps_security_parms structure, sched_aps_query_process_parms structure, SchedGet(), SchedInfo(), SchedSet(), SchedYield(), struct sigevent
aps в Справочнике по Утилитам
Предыдущий раздел: Описание API системной библиотеки