| sched_setattr(2) | System Calls Manual | sched_setattr(2) |
sched_setattr, sched_getattr - назначает и возвращает алгоритм планирования и атрибуты
Стандартная библиотека языка C (libc, -lc)
#include <sched.h> /* определения констант SCHED_* */ #include <sys/syscall.h> /* определения констант SYS_* */ #include <unistd.h>
int syscall(SYS_sched_setattr, pid_t pid, struct sched_attr *attr,
unsigned int flags);
int syscall(SYS_sched_getattr, pid_t pid, struct sched_attr *attr,
unsigned int size, unsigned int flags);
Примечание: glibc не предоставляет обёрточных функций для этих системных вызовов, что делает необходимым использование syscall(2).
Системный вызов sched_setattr() задаёт алгоритм планирования и соответствующие атрибуты для нити с идентификатором pid. Если pid равно нулю, то будет изменён алгоритм и атрибуты планирования вызывающей нити.
В настоящее время в Linux поддерживаются следующие «обычные» (т. е. не реального времени) алгоритмы планирования, которые можно указать в policy:
Также поддерживаются различные алгоритмы «реального времени», для специальных, критичных ко времени приложений, которым требуется точное управление методом выбора приложением исполняемых нитей. Правила управления, когда процесс может использовать эти алгоритмы, смотрите в sched(7). Алгоритмы реального времени, которые могут быть указаны в policy:
В Linux также предоставляются следующий алгоритм планирования:
Аргумент attr является указателем на структуру, в которой определяется новый алгоритм планирования и атрибуты, для заданной нити. Данная структура имеет следующий вид:
struct sched_attr {
u32 size; /* Size of this structure */
u32 sched_policy; /* Policy (SCHED_*) */
u64 sched_flags; /* Flags */
s32 sched_nice; /* Nice value (SCHED_OTHER,
SCHED_BATCH) */
u32 sched_priority; /* Static priority (SCHED_FIFO,
SCHED_RR) */
/* For SCHED_DEADLINE */
u64 sched_runtime;
u64 sched_deadline;
u64 sched_period;
/* Utilization hints */
u32 sched_util_min;
u32 sched_util_max;
};
Поля структуры sched_attr:
Аргумент flags предназначен для расширения интерфейса в будущем; в текущей реализации его значение должно быть равно 0.
Системный вызов sched_getattr() возвращает алгоритм планирования и соответствующие атрибуты для нити с идентификатором pid. Если pid равно нулю, то будет возвращён алгоритм и атрибуты планирования вызывающей нити.
В аргументе size должен быть задан размер структуры sched_attr, каким он известен в пользовательском пространстве. Значение должно быть не менее размера изначально показанной структуры sched_attr или вызов завершится с ошибкой EINVAL.
Возвращаемые атрибуты планирования помещаются в поля структуры sched_attr, на которую указывает attr. Ядро присваивает attr.size размер своей структуры sched_attr.
If the caller-provided attr buffer is larger than the kernel's sched_attr structure, the additional bytes in the user-space structure are not touched. If the caller-provided structure is smaller than the kernel sched_attr structure, the kernel will silently not return any values which would be stored outside the provided space. As with sched_setattr(), these semantics allow for future extensibility of the interface.
Аргумент flags предназначен для расширения интерфейса в будущем; в текущей реализации его значение должно быть равно 0.
On success, sched_setattr() and sched_getattr() return 0. On error, -1 is returned, and errno is set to indicate the error.
Вызовы sched_getattr() и sched_setattr() могут завершиться с ошибкой по следующим причинам:
Также sched_getattr() может завершиться с ошибкой по следующим причинам:
Также sched_setattr() может завершиться с ошибкой по следующим причинам:
Linux.
Linux 3.14.
glibc does not provide wrappers for these system calls; call them using syscall(2).
Вызов 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_setattr() завершается с ошибкой EFAULT, а не E2BIG в случаях, которые описаны в разделе ОШИБКИ.
Up to Linux 5.3, sched_getattr() failed with the error EFBIG if the in-kernel sched_attr structure was larger than the size passed by user space.
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)
Русский перевод этой страницы руководства разработал(и) Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 13 июня 2024 г. | Справочные страницы Linux 6.9.1 |