SCHED_SETATTR(2) | Руководство программиста Linux | SCHED_SETATTR(2) |
sched_setattr, sched_getattr - назначает и возвращает алгоритм планирования и атрибуты
#include <sched.h>
int sched_setattr(pid_t pid, struct sched_attr *attr, unsigned int flags);
int sched_getattr(pid_t pid, struct sched_attr *attr, unsigned int size, unsigned int flags);
Системный вызов sched_setattr() задаёт алгоритм планирования и соответствующие атрибуты для нити с идентификатором pid. Если pid равно нулю, то будет изменён алгоритм и атрибуты планирования вызывающей нити.
В настоящее время в Linux поддерживаются следующие «обычные» (т. е. не реального времени) алгоритмы планирования, которые можно указать в policy:
Также поддерживаются различные алгоритмы «реального времени», для специальных, критичных ко времени приложений, которым требуется точное управление методом выбора приложением исполняемых нитей. Правила управления, когда процесс может использовать эти алгоритмы, смотрите в sched(7). Алгоритмы реального времени, которые могут быть указаны в policy:
В Linux также предоставляются следующий алгоритм планирования:
Аргумент attr является указателем на структуру, в которой определяется новый алгоритм планирования и атрибуты, для заданной нити. Данная структура имеет следующий вид:
struct sched_attr { u32 size; /* размер этой структуры */ u32 sched_policy; /* алгоритм (SCHED_*) */ u64 sched_flags; /* флаги */ s32 sched_nice; /* значение уступчивости (SCHED_OTHER, SCHED_BATCH) */ u32 sched_priority; /* статический приоритет (SCHED_FIFO, SCHED_RR) */ /* остальные поля нужны для SCHED_DEADLINE */ u64 sched_runtime; u64 sched_deadline; u64 sched_period; };
Поля этой структуры имеют следующее назначение:
Аргумент flags предназначен для расширения интерфейса в будущем; в текущей реализации его значение должно быть равно 0.
Системный вызов sched_getattr() возвращает алгоритм планирования и соответствующие атрибуты для нити с идентификатором pid. Если pid равно нулю, то будет возвращён алгоритм и атрибуты планирования вызывающей нити.
В аргументе size должен быть задан размер структуры sched_attr, каким он известен в пользовательском пространстве. Значение должно быть не менее размера изначально показанной структуры sched_attr или вызов завершится с ошибкой EINVAL.
Возвращаемые атрибуты планирования помещаются в поля структуры sched_attr, на которую указывает attr. Ядро присваивает attr.size размер своей структуры sched_attr.
Если буфер attr, предоставленный вызывающим, больше структуры ядра sched_attr, то лишние байты в структуре пользовательского пространства не изменяются. Если структура, предоставленная вызывающим, меньше ядерной структуры sched_attr и ядру необходимо вернуть значение вне предоставляемого пространства, то sched_getattr() завершается с ошибкой E2BIG. Как и для sched_setattr(), такая семантика позволяет расширить интерфейс в будущем.
Аргумент flags предназначен для расширения интерфейса в будущем; в текущей реализации его значение должно быть равно 0.
При успешном выполнении sched_setatt() и sched_getattr() возвращается 0. При ошибке возвращается -1, а в errno содержится причина ошибки.
Вызовы sched_getattr() и sched_setattr() могут завершиться с ошибкой по следующим причинам:
Также sched_getattr() может завершиться с ошибкой по следующим причинам:
Также sched_setattr() может завершиться с ошибкой по следующим причинам:
Данные системные вызовы впервые появились в Linux 3.14.
Данные системные вызовы являются нестандартными расширениями Linux.
Вызов sched_setattr() предоставляет весь набор возможностей sched_setscheduler(2), sched_setparam(2), nice(2) и (всё кроме способности задавать приоритет всем процессам, принадлежащим указанному пользователю или всем процессам указанной группы) setpriority(2). Аналогично, sched_getattr() предоставляет весь набор возможностей sched_getscheduler(2), sched_getparam(2) и (частично) getpriority(2).
В версиях Linux до 3.15, sched_settattr() завершается с ошибкой EFAULT, а не E2BIG в случаях, которые описаны в разделе ОШИБКИ.
chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2), sched_getparam(2), sched_getscheduler(2), sched_rr_get_interval(2), sched_setaffinity(2), sched_setparam(2), sched_setscheduler(2), sched_yield(2), setpriority(2), pthread_getschedparam(3), pthread_setschedparam(3), pthread_setschedprio(3), capabilities(7), cpuset(7), sched(7)
2019-03-06 | Linux |