.\" -*- coding: UTF-8 -*- .\" Copyright 2014, Michael Kerrisk .\" Copyright 2014, Peter Zijlstra .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sched_setattr 2 "8 lutego 2026 r." "Linux man\-pages 6.18" .SH NAZWA sched_setattr, sched_getattr \- ustawia i pobiera algorytm i parametry szeregowania .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP,\ \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP /* Definicja stałych \fBSCHED_*\fP */ \fB#include \fP /* Definicja stałych \fBSYS_*\fP */ \fB#include \fP .P \fBint syscall(SYS_sched_setattr, pid_t \fP\fIpid\fP\fB, struct sched_attr *\fP\fIattr\fP\fB,\fP \fB unsigned int \fP\fIflags\fP\fB);\fP \fBint syscall(SYS_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 .P \fIUwaga\fP: glibc nie udostępnia opakowania dla tych wywołań systemowych, co wymusza użycie \fBsyscall\fP(2). .SH OPIS .SS sched_setattr() Wywołanie systemowe \fBsched_setattr\fP() ustawia algorytm szeregowania i powiązane atrybuty wątku, którego identyfikator podano w \fIpid\fP. Jeśli \fIpid\fP równa się zero, ustawi algorytm i parametry szeregowania wątku wywołującego. .P Obecnie, Linux obsługuje następujące \[Bq]zwykłe\[rq] (tj. nie czasu rzeczywistego) algorytmy szeregowania zadań, które można podać jako wartości \fIpolicy\fP: .TP 14 \fBSCHED_OTHER\fP .\" In the 2.6 kernel sources, SCHED_OTHER is actually called .\" SCHED_NORMAL. standardowy algorytm dzielenia czasu za pomocą szeregowania rotacyjnego; .TP \fBSCHED_BATCH\fP do wykonywania procesów w stylu \[Bq]wsadowym\[rq] oraz .TP \fBSCHED_IDLE\fP do uruchamiania zadań tła, o \fIbardzo\fP niskim priorytecie. .P Obsługiwane są również różne algorytmy \[Bq]czasu rzeczywistego\[rq], nadające się do specjalnych aplikacji, gdzie krytyczna jest precyzyjna kontrola nad sposobem, w jaki działające wątki są wybierane do wykonania. Aby dowiedzieć się więcej o zasadach regulujących okoliczności, w jakich wątki procesu mogą używać tych algorytmów, należy zapoznać się z podręcznikiem \fBsched\fP(7). Algorytmy czasu rzeczywistego, jakie można określić w \fIpolicy\fP to: .TP 14 \fBSCHED_FIFO\fP algorytm: pierwszy na wejściu, pierwszy na wyjściu oraz .TP \fBSCHED_RR\fP szeregowanie rotacyjne (karuzelowe). .P Linux zapewnia również poniższy algorytm: .TP 14 \fBSCHED_DEADLINE\fP szeregowanie sporadyczne z budżetem czasu; więcej szczegółów w podręczniku \fBsched\fP(7). .P Argument \fIattr\fP jest wskaźnikiem do struktury definiującej nowy algorytm szeregowania, wraz z atrybutami, danego wątku. Struktura ma postać: .P .in +4n .EX struct sched_attr { u32 size; /* Rozmiar tej struktury */ u32 sched_policy; /* Algorytm (SCHED_*) */ u64 sched_flags; /* Znaczniki */ s32 sched_nice; /* Wartość nice (SCHED_OTHER, SCHED_BATCH) */ u32 sched_priority; /* Priorytet statyczny (SCHED_FIFO, SCHED_RR) */ /* W SCHED_DEADLINE */ u64 sched_runtime; u64 sched_deadline; u64 sched_period; \& /* Wskazówki dot. użycia */ u32 sched_util_min; u32 sched_util_max; .EE .in .P Polami struktury \fIsched_attr\fP są: .TP \fBsize\fP Pole powinno być ustawione na rozmiar struktury w bajtach, jak w \fIsizeof(struct sched_attr)\fP. Jeśli zapewniona struktura jest mniejsza niż struktura jądra, dodatkowe pola są przyjmowane jako '0'. Jeśli zapewniona struktura jest większa niż struktura jądra, jądro weryfikuje, czy wszystkie dodatkowe pola wynoszą 0; jeśli tak nie jest, \fBsched_setattr\fP() zawodzi z błędem \fBE2BIG\fP i aktualizuje \fIsize\fP tak, aby zawierało rozmiar struktury jądra. .IP Powyższe zachowanie dotyczące przypadku, gdy rozmiar struktury \fIsched_attr\fP z przestrzeni użytkownika nie pasuje do rozmiaru struktury jądra, pozwala na rozszerzenie interfejsu w przyszłości. Nieprawidłowe aplikacje przekazujące nadmiarowe struktury będą wciąż działać w przyszłości, jeśli rozmiar struktury \fIsched_attr\fP jądra ulegnie zwiększeniu. W przyszłości, może również pozwolić aplikacjom, które wiedzą o większej strukturze \fIsched_attr\fP w przestrzeni użytkownika na określenie, czy działają na starszym jądrze, nieobsługującym większej struktury. .TP \fIsched_policy\fP Pole określa algorytm szeregowania, będący jedną z wartości \fBSCHED_*\fP podanych wyżej. .TP \fIsched_flags\fP Pole zawiera jeden lub więcej zsumowanych (OR) poniższych znaczników, służących do kontroli zachowania szeregowania zadań: .RS .TP \fBSCHED_FLAG_RESET_ON_FORK\fP Potomkowie utworzeni przez \fBfork\fP(2) nie odziedziczą uprzywilejowanych algorytmów szeregowania. Więcej szczegółów w podręczniku \fBsched\fP(7). .TP \fBSCHED_FLAG_RECLAIM\fP (od Linuksa 4.13) .\" 2d4283e9d583a3ee8cfb1cbb9c1270614df4c29d .\" Bandwidth reclaim is done via the GRUB algorithm; see .\" Documentation/scheduler/sched-deadline.rst Znacznik pozwala wątkowi \fBSCHED_DEADLINE\fP na odzyskanie przepustowości nieużywanej przez inne wątki czasu rzeczywistego. .TP \fBSCHED_FLAG_DL_OVERRUN\fP (od Linuksa 4.16) .\" commit 34be39305a77b8b1ec9f279163c7cdb6cc719b91 Znacznik pozwala na informowanie aplikacji o przekroczeniu czasu działania w wątkach \fBSCHED_DEADLINE\fP. Może być ono spowodowane (na przykład) przez zbyt zgrubne liczenie czasu lub nieprawidłowe przypisanie parametrów. Informowanie zachodzi za pośrednictwem sygnału \fBSIGXCPU\fP, wysyłanego przy każdym przekroczeniu czasu działania. .IP Sygnał \fBSIGXCPU\fP jest sygnałem \fIskierowanych do procesu\fP (zob. \fBsignal\fP(7)), a nie skierowanym do wątku. Należy to prawdopodobnie traktować jako usterkę. Z jednej strony, \fBsched_setattr\fP() jest używane do ustawienia atrybutu przynależnemu wątkowi. Z drugiej strony, jeśli sygnał skierowany do procesu jest dostarczony do wątku wewnątrz procesu, innego niż ten, który przekroczył czas działania, aplikacja nie ma sposobu, aby zidentyfikować wątek winowajcę. .TP \fBSCHED_FLAG_UTIL_CLAMP_MIN\fP .TQ \fBSCHED_FLAG_UTIL_CLAMP_MAX\fP (oba od Linuksa 5.3) Znaczniki wskazują, że obecne jest, odpowiednio, pole \fIsched_util_min\fP lub \fIsched_util_max\fP, reprezentując oczekiwane minimalne i maksymalne użycie przez wątek. .IP Atrybuty użycia zakreślają dyspozytorowi granice, pomiędzy którymi powinien szeregować wątek, potencjalnie pomagając podejmować decyzje dotyczące umieszczenia zadania i częstotliwości jego wyboru. .RE .TP \fIsched_nice\fP Pole określa wartość nice do ustawienia przy przekazywaniu algorytmu szeregowania \fIsched_policy\fP \fBSCHED_OTHER\fP lub \fBSCHED_BATCH\fP. Wartość nice jest liczbą z przedziału od \-20 (wysoki priorytet) do +19 (niski priorytet); zob. \fBsched\fP(7). .TP \fIsched_priority\fP Pole określa statyczny priorytet do ustawienia przy przekazywaniu algorytmu szeregowania \fIsched_policy\fP \fBSCHED_FIFO\fP lub \fBSCHED_RR\fP. Dozwolony przedział priorytetów w tych algorytmach można sprawdzić za pomocą \fBsched_get_priority_min\fP(2) i \fBsched_get_priority_max\fP(2). Przy innych algorytmach, to pole musi być ustawione na 0. .TP \fIsched_runtime\fP Pole określa parametr \[Bq]Czas Działania\[rq] przy szeregowaniu z budżetem czasu. Wartość jest wyrażana w nanosekundach. Pole to, razem z kolejnymi dwoma, jest używane tylko przy algorytmie \fBSCHED_DEADLINE\fP; szerszy opis w podręczniku \fBsched\fP(7). .TP \fIsched_deadline\fP Pole określa parametr \[Bq]Limit\[rq] przy szeregowaniu z budżetem czasu. Wartość jest wyrażana w nanosekundach. .TP \fIsched_period\fP Pole określa parametr \[Bq]Okres\[rq] przy szeregowaniu z budżetem czasu. Wartość jest wyrażana w nanosekundach. .TP \fIsched_util_min\fP .TQ \fIsched_util_max\fP (oba od Linuksa 5.3) Pola określają, odpowiednio, minimalne i maksymalne oczekiwane użycie. Są ignorowane, chyba że w \fIsched_flags\fP ustawiono, odpowiednio, \fBSCHED_FLAG_UTIL_CLAMP_MIN\fP lub \fBSCHED_FLAG_UTIL_CLAMP_MAX\fP . .IP Użycie jest wartością z przedziału [0, 1024], reprezentującą procentowy czas procesora używany przez zadania działające przy maksymalnej częstotliwości na najmocniejszym procesorze w systemie. Jest to reprezentacja stałopozycyjna, gdzie 1024 odpowiada 100%, a 0 odpowiada 0%. Na przykład zadanie z 20% użyciem jest zadaniem działającym przez 2ms co każde 10ms przy maksymalnej częstotliwości i jest reprezentowane przez wartość użycia równą \fI0.2\ *\ 1024\ =\ 205\fP. .IP Zadanie o minimalnej wartości użycia większej od 0 ma większe prawdopodobieństwo uzyskania dostępu do procesora, którego możliwości są wystarczające do pomieszczenia podanej wartości. Zadanie o maksymalnej wartości użycia mniejszej od 1024 ma większe prawdopodobieństwo uzyskania dostępu do procesora, którego możliwości są nie większe niż podana wartość. .IP Granice użycia zadania można zresetować ustawiając dane pole na \fBUINT32_MAX\fP (od Linuksa 5.11). .P .\" .\" Argument \fIflags\fP pozwala na przyszłe rozszerzenia interfejsu; w bieżącej implementacji musi być określony jako 0. .SS sched_getattr() Wywołanie systemowe \fBsched_getattr\fP() pobiera algorytm szeregowania, wraz z powiązanymi atrybutami, dla wątku, którego identyfikator podano w \fIpid\fP. Jeśli \fIpid\fP jest równe zero, pobiera algorytm szeregowania, wraz z powiązanymi atrybutami, wątku wywołującego. .P Argument \fIsize\fP należy ustawić na rozmiar struktury \fIsched_attr\fP znany przestrzeni użytkownika. Wartość musi być co najmniej tak duża, jak rozmiar pierwotnie ogłoszonej struktury \fIsched_attr\fP (por. opis E2BIG w rozdziale BŁĘDY \- przyp. tłum.), w innym przypadku wywołanie zawiedzie z błędem \fBEINVAL\fP. .P Pobrane atrybuty szeregowania są umieszczane w polach struktury \fIsched_attr\fP, na którą wskazuje \fIattr\fP. Jądro ustawi \fIattr.size\fP na rozmiar jego struktury \fIsched_attr\fP. .P Jeśli bufor \fIattr\fP zapewniony przez wywołującego jest większy niż struktura jądra \fIsched_attr\fP, dodatkowe bajty w strukturze w przestrzeni użytkownika nie są modyfikowane. Jeśli struktura zapewniona przez wywołującego jest mniejsza od struktury jądra \fIsched_attr\fP, jądro po cichu niż zwróci wartości, które znalazłyby się poza zapewnioną przestrzenią. Podobnie jak przy \fBsched_setattr\fP(), takie zachowanie pozwala na przyszłe rozszerzanie interfejsu. .P Argument \fIflags\fP pozwala na przyszłe rozszerzenia interfejsu; w bieżącej implementacji musi być określony jako 0. .SH "WARTOŚĆ ZWRACANA" W przypadku powodzenia, \fBsched_setattr\fP() i \fBsched_getattr\fP() zwracają 0. W razie wystąpienia błędu zwracają \-1 i ustawiają \fIerrno\fP wskazując błąd. .SH BŁĘDY \fBsched_getattr\fP() oraz \fBsched_setattr\fP() mogą zawieść z następujących powodów: .TP \fBEINVAL\fP \fIattr\fP wynosi NULL; albo \fIpid\fP jest ujemne; albo \fIflags\fP nie jest zerem. .TP \fBESRCH\fP Nie znaleziono wątku o identyfikatorze równym \fIpid\fP. .P Dodatkowo, \fBsched_getattr\fP() może zawieść z następujących powodów: .TP \fBE2BIG\fP Bufor określony przez \fIsize\fP i \fIattr\fP jest zbyt mały. .TP \fBEINVAL\fP \fIsize\fP jest nieprawidłowy; tj. jest mniejszy niż pierwotna wersja struktury \fIsched_attr\fP (48 bajtów) lub jest większy od systemowego rozmiaru strony. .P Dodatkowo, \fBsched_setattr\fP() może zawieść z następujących powodów: .TP \fBE2BIG\fP Bufor określony przez \fIsize\fP i \fIattr\fP jest większy niż struktura jądra, a jeden lub więcej nadmiarowych bajtów jest niezerowy. .TP \fBEBUSY\fP Błąd testu przyjęcia \fBSCHED_DEADLINE\fP, zob. \fBsched\fP(7). .TP \fBEINVAL\fP \fIattr.sched_policy\fP nie jest jednym z rozpoznawanych algorytmów szeregowania. .TP \fBEINVAL\fP \fIattr.sched_flags\fP zawiera znacznik inny niż \fBSCHED_FLAG_RESET_ON_FORK\fP. .TP \fBEINVAL\fP \fIattr.sched_priority\fP jest nieprawidłowy. .TP \fBEINVAL\fP \fIattr.sched_policy\fP wynosi \fBSCHED_DEADLINE\fP, a parametry szeregowania z budżetem czasu w \fIattr\fP są nieprawidłowe. .TP \fBEINVAL\fP \fIattr.sched_flags\fP zawiera \fBSCHED_FLAG_UTIL_CLAMP_MIN\fP lub \fBSCHED_FLAG_UTIL_CLAMP_MAX\fP, a \fIattr.sched_util_min\fP lub \fIattr.sched_util_max\fP są spoza zakresu. .TP \fBEOPNOTSUPP\fP Podano \fBSCHED_FLAG_UTIL_CLAMP\fP, lecz jądro zbudowano bez obsługi \fBCONFIG_UCLAMP_TASK\fP. .TP \fBEPERM\fP Wywołujący nie ma odpowiednich przywilejów. .TP \fBEPERM\fP Maska koligacji procesora dla wątku określonego przez \fIpid\fP nie obejmuje wszystkich procesorów w systemie (zob. \fBsched_setaffinity\fP(2)). .SH STANDARDY Linux. .SH HISTORIA .\" FIXME . Add glibc version Linux 3.14. .SH UWAGI glibc nie zapewnia opakowań tych wywołań systemowych; należy je wywołać za pomocą \fBsyscall\fP(2). .P \fBsched_setattr\fP() zapewnia nadzbiór funkcjonalności \fBsched_setscheduler\fP(2), \fBsched_setparam\fP(2), \fBnice\fP(2) i (poza możliwością ustawienia priorytetu wszystkich procesów należących do podanego użytkownika i wszystkich procesów w podanej grupie) \fBsetpriority\fP(2). Analogicznie, \fBsched_getattr\fP() zapewnia nadzbiór funkcjonalności \fBsched_getscheduler\fP(2), \fBsched_getparam\fP(2) i (częściowo) \fBgetpriority\fP(2). .SH USTERKI .\" FIXME . patch sent to Peter Zijlstra W wersjach Linuksa do 3.15, \fBsched_setattr\fP() zawodził z błędem \fBEFAULT\fP zamiast \fBE2BIG\fP, w przypadku opisanym w rozdziale BŁĘDY. .P .\" 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. Do Linuksa 5.3, \fBsched_getattr\fP() zawodził z błędem \fBEFBIG\fP, jeśli struktura jądra \fIsched_attr\fP była większa od rozmiaru \fIsize\fP przekazanego z przestrzeni użytkownika. .SH "ZOBACZ TAKŻE" .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 .PP .SH TŁUMACZENIE Tłumaczenie niniejszej strony podręcznika: Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .