.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2014 Michael Kerrisk .\" and Copyright (C) 2014 Peter Zijlstra .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SCHED_SETATTR 2 "1 ноября 2020 г." Linux "Руководство программиста Linux" .SH ИМЯ sched_setattr, sched_getattr \- назначает и возвращает алгоритм планирования и атрибуты .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint sched_setattr(pid_t \fP\fIpid\fP\fB, struct sched_attr *\fP\fIattr\fP\fB,\fP \fB unsigned int \fP\fIflags\fP\fB);\fP .PP \fBint sched_getattr(pid_t \fP\fIpid\fP\fB, struct sched_attr *\fP\fIattr\fP\fB,\fP \fB unsigned int \fP\fIsize\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .\" FIXME . Add feature test macro requirements .SH ОПИСАНИЕ .SS sched_setattr() Системный вызов \fBsched_setattr\fP() задаёт алгоритм планирования и соответствующие атрибуты для нити с идентификатором \fIpid\fP. Если \fIpid\fP равно нулю, то будет изменён алгоритм и атрибуты планирования вызывающей нити. .PP В настоящее время в Linux поддерживаются следующие «обычные» (т. е. не реального времени) алгоритмы планирования, которые можно указать в \fIpolicy\fP: .TP 14 \fBSCHED_OTHER\fP .\" In the 2.6 kernel sources, SCHED_OTHER is actually called .\" SCHED_NORMAL. алгоритм циклического обслуживания с разделением времени; .TP \fBSCHED_BATCH\fP «пакетный» стиль выполнения процессов; .TP \fBSCHED_IDLE\fP для выполнения фоновых заданий с \fIочень\fP низким приоритетом. .PP Также поддерживаются различные алгоритмы «реального времени», для специальных, критичных ко времени приложений, которым требуется точное управление методом выбора приложением исполняемых нитей. Правила управления, когда процесс может использовать эти алгоритмы, смотрите в \fBsched\fP(7). Алгоритмы реального времени, которые могут быть указаны в \fIpolicy\fP: .TP 14 \fBSCHED_FIFO\fP алгоритм «первым вошёл — первым вышел»; .TP \fBSCHED_RR\fP алгоритм циклического обслуживания. .PP В Linux также предоставляются следующий алгоритм планирования: .TP 14 \fBSCHED_DEADLINE\fP алгоритм планирования с предельным сроком; смотрите \fBsched\fP(7). .PP Аргумент \fIattr\fP является указателем на структуру, в которой определяется новый алгоритм планирования и атрибуты, для заданной нити. Данная структура имеет следующий вид: .PP .in +4n .EX 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; }; .EE .in .PP Поля структуры \fIsched_attr\fP: .TP \fBsize\fP В этом поле должен быть указан размер структуры в байтах с помощью \fIsizeof(struct sched_attr)\fP. Если предоставляемая структура меньше чем структура ядра, то предполагается, что дополнительные поля равны «0». Если представляемая структура больше ядерной, то ядро проверяет, что все дополнительные поля равны 0; если нет, то \fBsched_setattr\fP() завершается с ошибкой \fBE2BIG\fP и заменяет значение \fIsize\fP размером структуры ядра. .IP Возможность иметь разный размер структуры \fIsched_attr\fP пользовательского пространства и структуры ядра позволит расширять интерфейс с будущем. Некорректные приложения, передающие больший размер структуры, ничего не сломают в будущем, если увеличится размер ядерной структуры \fIsched_attr\fP. В будущем, это также может позволить приложениям, которые знают о большей структуре \fIsched_attr\fP пользовательского пространства, определять, что они работают на старом ядре, которое не поддерживает структуру большего размера. .TP \fIsched_policy\fP В этом поле задаётся алгоритм планирования в виде значений \fBSCHED_*\fP, перечисленных выше. .TP \fIsched_flags\fP Это поле содержит побитовое ИЛИ нуля и более следующих флагов, для управления поведением планирования: .RS .TP \fBSCHED_FLAG_RESET_ON_FORK\fP Потомки, созданные \fBfork\fP(2), не наследуют привилегированные алгоритмы планирования. Подробней смотрите в \fBsched\fP(7). .TP \fBSCHED_FLAG_RECLAIM\fP (начиная с Linux 4.13) .\" 2d4283e9d583a3ee8cfb1cbb9c1270614df4c29d .\" Bandwidth reclaim is done via the GRUB algorithm; see .\" Documentation/scheduler/sched-deadline.txt Этот флаг позволяет нити \fBSCHED_DEADLINE\fP отхватить полосу пропускания, которая не используется другими нитями реального времени. .TP \fBSCHED_FLAG_DL_OVERRUN\fP (начиная с Linux 4.16) .\" commit 34be39305a77b8b1ec9f279163c7cdb6cc719b91 Этот флаг позволяет приложению получать информацию о времени переработки (run\-time overrun) в нитях \fBSCHED_DEADLINE\fP. Такие переработки могут быть вызваны (например) неточным учётом времени выполнения или некорректным назначением параметра. Уведомление поступает в виде сигнала \fBSIGXCPU\fP, который генерируется при каждой переработке. .IP Сигнал \fBSIGXCPU\fP \fIнаправляется процессу\fP (смотрите \fBsignal\fP(7)), а не нити. Вероятно, это дефект. С одной стороны, \fBsched_setattr\fP() используется для задания атрибутов определённой нити. С другой стороны, если сигнал, направленный процессу, доставляется нити внутри процесса, у которой не было переработки, то приложение не может узнать какая нить переработала. .RE .TP \fIsched_nice\fP В этом поле задаётся значение уступчивости, которое будет назначено при указании в \fIsched_policy\fP значения \fBSCHED_OTHER\fP или \fBSCHED_BATCH\fP. Значение уступчивости представляет собой число в диапазоне от \-20 (высший приоритет) до +19 (низший приоритет); смотрите \fBsched\fP(7). .TP \fIsched_priority\fP В этом поле указывается статический приоритет, который будет установлен при указании в \fIsched_policy\fP значения \fBSCHED_FIFO\fP или \fBSCHED_RR\fP. Допустимый диапазон приоритетов для этих алгоритмов можно определить с помощью \fBsched_get_priority_min\fP(2) и \fBsched_get_priority_max\fP(2). Для других алгоритмов значение этого поля должно быть равно 0. .TP \fIsched_runtime\fP В этом поле задаётся параметр «Runtime» для планирования с предельным сроком. Значение выражается в наносекундах. Это и два следующих поля используются только при алгоритме \fBSCHED_DEADLINE\fP; подробности смотрите в \fBsched\fP(7). .TP \fIsched_deadline\fP В этом поле задаётся параметр «Deadline» для планирования с предельным сроком. Значение выражается в наносекундах. .TP \fIsched_period\fP В этом поле задаётся параметр «Period» для планирования с предельным сроком. Значение выражается в наносекундах. .PP .\" .\" Аргумент \fIflags\fP предназначен для расширения интерфейса в будущем; в текущей реализации его значение должно быть равно 0. .SS sched_getattr() Системный вызов \fBsched_getattr\fP() возвращает алгоритм планирования и соответствующие атрибуты для нити с идентификатором \fIpid\fP. Если \fIpid\fP равно нулю, то будет возвращён алгоритм и атрибуты планирования вызывающей нити. .PP В аргументе \fIsize\fP должен быть задан размер структуры \fIsched_attr\fP, каким он известен в пользовательском пространстве. Значение должно быть не менее размера изначально показанной структуры \fIsched_attr\fP или вызов завершится с ошибкой \fBEINVAL\fP. .PP Возвращаемые атрибуты планирования помещаются в поля структуры \fIsched_attr\fP, на которую указывает \fIattr\fP. Ядро присваивает \fIattr.size\fP размер своей структуры \fIsched_attr\fP. .PP If the caller\-provided \fIattr\fP buffer is larger than the kernel's \fIsched_attr\fP structure, the additional bytes in the user\-space structure are not touched. If the caller\-provided structure is smaller than the kernel \fIsched_attr\fP structure, the kernel will silently not return any values which would be stored outside the provided space. As with \fBsched_setattr\fP(), these semantics allow for future extensibility of the interface. .PP Аргумент \fIflags\fP предназначен для расширения интерфейса в будущем; в текущей реализации его значение должно быть равно 0. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении \fBsched_setatt\fP() и \fBsched_getattr\fP() возвращается 0. При ошибке возвращается \-1, а в \fIerrno\fP содержится причина ошибки. .SH ОШИБКИ Вызовы \fBsched_getattr\fP() и \fBsched_setattr\fP() могут завершиться с ошибкой по следующим причинам: .TP \fBEINVAL\fP Значение \fIattr\fP равно NULL; или значение \fIpid\fP отрицательно; или значение \fIflags\fP не равно 0. .TP \fBESRCH\fP Нить с идентификатором \fIpid\fP не найдена. .PP Также \fBsched_getattr\fP() может завершиться с ошибкой по следующим причинам: .TP \fBE2BIG\fP Буфер, задаваемый \fIsize\fP и \fIattr\fP, слишком мал. .TP \fBEINVAL\fP Некорректное значение \fIsize\fP; то есть, оно меньше чем первая версия структуры \fIsched_attr\fP (48 байт) или больше размера системной страницы. .PP Также \fBsched_setattr\fP() может завершиться с ошибкой по следующим причинам: .TP \fBE2BIG\fP Буфер, заданный \fIsize\fP и \fIattr\fP, больше структуры ядра и один или более превышающих байт не равны нулю. .TP \fBEBUSY\fP Ошибка контроля допуска \fBSCHED_DEADLINE\fP, смотрите \fBsched\fP(7). .TP \fBEINVAL\fP Значение \fIattr.sched_policy\fP не является одним из возможных алгоритмов; в \fIattr.sched_flags\fP содержится флаг отличный от \fBSCHED_FLAG_RESET_ON_FORK\fP; некорректное значение \fIattr.sched_priority\fP; значение \fIattr.sched_policy\fP равно \fBSCHED_DEADLINE\fP и есть некорректные параметры алгоритм планирования с предельным сроком в \fIattr\fP. .TP \fBEPERM\fP Вызывающий не имеет соответствующих прав. .TP \fBEPERM\fP В процессорной маске увязывания нити, заданной в \fIpid\fP, отсутствуют все ЦП системы (смотрите \fBsched_setaffinity\fP(2)). .SH ВЕРСИИ .\" FIXME . Add glibc version Данные системные вызовы впервые появились в Linux 3.14. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" Данные системные вызовы являются нестандартными расширениями Linux. .SH ЗАМЕЧАНИЯ Вызов \fBsched_setattr\fP() предоставляет весь набор возможностей \fBsched_setscheduler\fP(2), \fBsched_setparam\fP(2), \fBnice\fP(2) и (всё кроме способности задавать приоритет всем процессам, принадлежащим указанному пользователю или всем процессам указанной группы) \fBsetpriority\fP(2). Аналогично, \fBsched_getattr\fP() предоставляет весь набор возможностей \fBsched_getscheduler\fP(2), \fBsched_getparam\fP(2) и (частично) \fBgetpriority\fP(2). .SH ДЕФЕКТЫ .\" FIXME . patch sent to Peter Zijlstra В версиях Linux до 3.15, \fBsched_setattr\fP() завершается с ошибкой \fBEFAULT\fP, а не \fBE2BIG\fP в случаях, которые описаны в разделе ОШИБКИ. .PP .\" In Linux versions up to up 3.15, .\" FIXME . patch from Peter Zijlstra pending .\" .BR sched_setattr () .\" allowed a negative .\" .I attr.sched_policy .\" value. In Linux versions up to 5.3, \fBsched_getattr\fP() failed with the error \fBEFBIG\fP if the in\-kernel \fIsched_attr\fP structure was larger than the \fIsize\fP passed by user space. .SH "СМ. ТАКЖЕ" .ad l .nh \fBchrt\fP(1), \fBnice\fP(2), \fBsched_get_priority_max\fP(2), \fBsched_get_priority_min\fP(2), \fBsched_getaffinity\fP(2), \fBsched_getparam\fP(2), \fBsched_getscheduler\fP(2), \fBsched_rr_get_interval\fP(2), \fBsched_setaffinity\fP(2), \fBsched_setparam\fP(2), \fBsched_setscheduler\fP(2), \fBsched_yield\fP(2), \fBsetpriority\fP(2), \fBpthread_getschedparam\fP(3), \fBpthread_setschedparam\fP(3), \fBpthread_setschedprio\fP(3), \fBcapabilities\fP(7), \fBcpuset\fP(7), \fBsched\fP(7) .ad .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .