# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-03-01 17:07+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "sched" msgstr "" #. type: TH #: archlinux fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "" #. type: TH #: archlinux fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "sched - overview of CPU scheduling" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 2.6.23, the default scheduler is CFS, the \"Completely Fair " "Scheduler\". The CFS scheduler replaced the earlier \"O(1)\" scheduler." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "API summary" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Linux provides the following system calls for controlling the CPU scheduling " "behavior, policy, and priority of processes (or, more precisely, threads)." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Set a new nice value for the calling thread, and return the new nice value." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Return the nice value of a thread, a process group, or the set of threads " "owned by a specified user." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Set the nice value of a thread, a process group, or the set of threads owned " "by a specified user." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Set the scheduling policy and parameters of a specified thread." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Return the scheduling policy of a specified thread." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Set the scheduling parameters of a specified thread." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Fetch the scheduling parameters of a specified thread." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Return the maximum priority available in a specified scheduling policy." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Return the minimum priority available in a specified scheduling policy." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Fetch the quantum used for threads that are scheduled under the \"round-" "robin\" scheduling policy." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Cause the caller to relinquish the CPU, so that some other thread be " "executed." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "(Linux-specific) Set the CPU affinity of a specified thread." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "(Linux-specific) Get the CPU affinity of a specified thread." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Set the scheduling policy and parameters of a specified thread. This (Linux-" "specific) system call provides a superset of the functionality of " "B(2) and B(2)." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Fetch the scheduling policy and parameters of a specified thread. This " "(Linux-specific) system call provides a superset of the functionality of " "B(2) and B(2)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Scheduling policies" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The scheduler is the kernel component that decides which runnable thread " "will be executed by the CPU next. Each thread has an associated scheduling " "policy and a I scheduling priority, I. The " "scheduler makes its decisions based on knowledge of the scheduling policy " "and static priority of all threads on the system." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For threads scheduled under one of the normal scheduling policies " "(B, B, B), I is not " "used in scheduling decisions (it must be specified as 0)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Processes scheduled under one of the real-time policies (B, " "B) have a I value in the range 1 (low) to 99 " "(high). (As the numbers imply, real-time threads always have higher " "priority than normal threads.) Note well: POSIX.1 requires an " "implementation to support only a minimum 32 distinct priority levels for the " "real-time policies, and some systems supply just this minimum. Portable " "programs should use B(2) and " "B(2) to find the range of priorities supported for " "a particular policy." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Conceptually, the scheduler maintains a list of runnable threads for each " "possible I value. In order to determine which thread runs " "next, the scheduler looks for the nonempty list with the highest static " "priority and selects the thread at the head of this list." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A thread's scheduling policy determines where it will be inserted into the " "list of threads with equal static priority and how it will move inside this " "list." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "All scheduling is preemptive: if a thread with a higher static priority " "becomes ready to run, the currently running thread will be preempted and " "returned to the wait list for its static priority level. The scheduling " "policy determines the ordering only within the list of runnable threads with " "equal static priority." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SCHED_FIFO: First in-first out scheduling" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B can be used only with static priorities higher than 0, which " "means that when a B thread becomes runnable, it will always " "immediately preempt any currently running B, B, or " "B thread. B is a simple scheduling algorithm " "without time slicing. For threads scheduled under the B policy, " "the following rules apply:" msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "\\[bu]" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A running B thread that has been preempted by another thread of " "higher priority will stay at the head of the list for its priority and will " "resume execution as soon as all threads of higher priority are blocked again." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a blocked B thread becomes runnable, it will be inserted at " "the end of the list for its priority." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If a call to B(2), B(2), " "B(2), B(3), or " "B(3) changes the priority of the running or runnable " "B thread identified by I the effect on the thread's " "position in the list depends on the direction of the change to threads " "priority:" msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(a)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the thread's priority is raised, it is placed at the end of the list for " "its new priority. As a consequence, it may preempt a currently running " "thread with the same priority." msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(b)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the thread's priority is unchanged, its position in the run list is " "unchanged." msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(c)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the thread's priority is lowered, it is placed at the front of the list " "for its new priority." msgstr "" #. In Linux 2.2.x and Linux 2.4.x, the thread is placed at the front of the queue #. In Linux 2.0.x, the Right Thing happened: the thread went to the back -- MTK #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "According to POSIX.1-2008, changes to a thread's priority (or policy) using " "any mechanism other than B(3) should result in the " "thread being placed at the end of the list for its priority." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "A thread calling B(2) will be put at the end of the list." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "No other events will move a thread scheduled under the B policy " "in the wait list of runnable threads with equal static priority." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A B thread runs until either it is blocked by an I/O request, it " "is preempted by a higher priority thread, or it calls B(2)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SCHED_RR: Round-robin scheduling" msgstr "" #. On Linux 2.4, the length of the RR interval is influenced #. by the process nice value -- MTK #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B is a simple enhancement of B. Everything described " "above for B also applies to B, except that each thread " "is allowed to run only for a maximum time quantum. If a B thread " "has been running for a time period equal to or longer than the time quantum, " "it will be put at the end of the list for its priority. A B " "thread that has been preempted by a higher priority thread and subsequently " "resumes execution as a running thread will complete the unexpired portion of " "its round-robin time quantum. The length of the time quantum can be " "retrieved using B(2)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SCHED_DEADLINE: Sporadic task model deadline scheduling" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 3.14, Linux provides a deadline scheduling policy " "(B). This policy is currently implemented using GEDF " "(Global Earliest Deadline First) in conjunction with CBS (Constant " "Bandwidth Server). To set and fetch this policy and associated attributes, " "one must use the Linux-specific B(2) and " "B(2) system calls." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A sporadic task is one that has a sequence of jobs, where each job is " "activated at most once per period. Each job also has a I, before which it should finish execution, and a I, which is the CPU time necessary for executing the job. The moment " "when a task wakes up because a new job has to be executed is called the " "I (also referred to as the request time or release time). The " "I is the time at which a task starts its execution. The " "I is thus obtained by adding the relative deadline to the " "arrival time." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The following diagram clarifies these terms:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "arrival/wakeup absolute deadline\n" " | start time |\n" " | | |\n" " v v v\n" "-----x--------xooooooooooooooooo--------x--------x---\n" " |E- comp. time -E|\n" " |E------- relative deadline ------E|\n" " |E-------------- period -------------------E|\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When setting a B policy for a thread using " "B(2), one can specify three parameters: I, " "I, and I. These parameters do not necessarily correspond " "to the aforementioned terms: usual practice is to set Runtime to something " "bigger than the average computation time (or worst-case execution time for " "hard real-time tasks), Deadline to the relative deadline, and Period to the " "period of the task. Thus, for B scheduling, we have:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "arrival/wakeup absolute deadline\n" " | start time |\n" " | | |\n" " v v v\n" "-----x--------xooooooooooooooooo--------x--------x---\n" " |E-- Runtime -------E|\n" " |E----------- Deadline -----------E|\n" " |E-------------- Period -------------------E|\n" msgstr "" #. FIXME It looks as though specifying sched_period as 0 means #. "make sched_period the same as sched_deadline". #. This needs to be documented. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The three deadline-scheduling parameters correspond to the I, " "I, and I fields of the I " "structure; see B(2). These fields express values in " "nanoseconds. If I is specified as 0, then it is made the same " "as I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The kernel requires that:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "sched_runtime E= sched_deadline E= sched_period\n" msgstr "" #. See __checkparam_dl in kernel/sched/core.c #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In addition, under the current implementation, all of the parameter values " "must be at least 1024 (i.e., just over one microsecond, which is the " "resolution of the implementation), and less than 2\\[ha]63. If any of these " "checks fails, B(2) fails with the error B." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The CBS guarantees non-interference between tasks, by throttling threads " "that attempt to over-run their specified Runtime." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "To ensure deadline scheduling guarantees, the kernel must prevent situations " "where the set of B threads is not feasible (schedulable) " "within the given constraints. The kernel thus performs an admittance test " "when setting or changing B policy and attributes. This " "admission test calculates whether the change is feasible; if it is not, " "B(2) fails with the error B." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For example, it is required (but not necessarily sufficient) for the total " "utilization to be less than or equal to the total number of CPUs available, " "where, since each thread can maximally run for Runtime per Period, that " "thread's utilization is its Runtime divided by its Period." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In order to fulfill the guarantees that are made when a thread is admitted " "to the B policy, B threads are the highest " "priority (user controllable) threads in the system; if any B " "thread is runnable, it will preempt any thread scheduled under one of the " "other policies." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A call to B(2) by a thread scheduled under the B " "policy fails with the error B, unless the thread has its reset-on-" "fork flag set (see below)." msgstr "" # #. FIXME Calling sched_getparam() on a SCHED_DEADLINE thread #. fails with EINVAL, but sched_getscheduler() succeeds. #. Is that intended? (Why?) #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A B thread that calls B(2) will yield the " "current job and wait for a new period to begin." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SCHED_OTHER: Default Linux time-sharing scheduling" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B can be used at only static priority 0 (i.e., threads under " "real-time policies always have priority over B processes). " "B is the standard Linux time-sharing scheduler that is intended " "for all threads that do not require the special real-time mechanisms." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The thread to run is chosen from the static priority 0 list based on a " "I priority that is determined only inside this list. The dynamic " "priority is based on the nice value (see below) and is increased for each " "time quantum the thread is ready to run, but denied to run by the " "scheduler. This ensures fair progress among all B threads." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In the Linux kernel source code, the B policy is actually named " "B." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "The nice value" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The nice value is an attribute that can be used to influence the CPU " "scheduler to favor or disfavor a process in scheduling decisions. It " "affects the scheduling of B and B (see below) " "processes. The nice value can be modified using B(2), " "B(2), or B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "According to POSIX.1, the nice value is a per-process attribute; that is, " "the threads in a process should share a nice value. However, on Linux, the " "nice value is a per-thread attribute: different threads in the same process " "may have different nice values." msgstr "" #. Linux before 1.3.36 had \-infinity..15. #. Since Linux 1.3.43, Linux has the range \-20..19. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The range of the nice value varies across UNIX systems. On modern Linux, " "the range is -20 (high priority) to +19 (low priority). On some other " "systems, the range is -20..20. Very early Linux kernels (before Linux 2.0) " "had the range -infinity..15." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The degree to which the nice value affects the relative scheduling of " "B processes likewise varies across UNIX systems and across " "Linux kernel versions." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "With the advent of the CFS scheduler in Linux 2.6.23, Linux adopted an " "algorithm that causes relative differences in nice values to have a much " "stronger effect. In the current implementation, each unit of difference in " "the nice values of two processes results in a factor of 1.25 in the degree " "to which the scheduler favors the higher priority process. This causes very " "low nice values (+19) to truly provide little CPU to a process whenever " "there is any other higher priority load on the system, and makes high nice " "values (-20) deliver most of the CPU to applications that require it (e.g., " "some audio applications)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "On Linux, the B resource limit can be used to define a limit to " "which an unprivileged process's nice value can be raised; see " "B(2) for details." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For further details on the nice value, see the subsections on the autogroup " "feature and group scheduling, below." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SCHED_BATCH: Scheduling batch processes" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "(Since Linux 2.6.16.) B can be used only at static priority " "0. This policy is similar to B in that it schedules the thread " "according to its dynamic priority (based on the nice value). The difference " "is that this policy will cause the scheduler to always assume that the " "thread is CPU-intensive. Consequently, the scheduler will apply a small " "scheduling penalty with respect to wakeup behavior, so that this thread is " "mildly disfavored in scheduling decisions." msgstr "" #. The following paragraph is drawn largely from the text that #. accompanied Ingo Molnar's patch for the implementation of #. SCHED_BATCH. #. commit b0a9499c3dd50d333e2aedb7e894873c58da3785 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This policy is useful for workloads that are noninteractive, but do not want " "to lower their nice value, and for workloads that want a deterministic " "scheduling policy without interactivity causing extra preemptions (between " "the workload's tasks)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SCHED_IDLE: Scheduling very low priority jobs" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "(Since Linux 2.6.23.) B can be used only at static priority 0; " "the process nice value has no influence for this policy." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This policy is intended for running jobs at extremely low priority (lower " "even than a +19 nice value with the B or B " "policies)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Resetting scheduling policy for child processes" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Each thread has a reset-on-fork scheduling flag. When this flag is set, " "children created by B(2) do not inherit privileged scheduling " "policies. The reset-on-fork flag can be set by either:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "ORing the B flag into the I argument when " "calling B(2) (since Linux 2.6.32); or" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "specifying the B flag in I when " "calling B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Note that the constants used with these two APIs have different names. The " "state of the reset-on-fork flag can analogously be retrieved using " "B(2) and B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The reset-on-fork feature is intended for media-playback applications, and " "can be used to prevent applications evading the B resource " "limit (see B(2)) by creating multiple child processes." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "More precisely, if the reset-on-fork flag is set, the following rules apply " "for subsequently created children:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the calling thread has a scheduling policy of B or " "B, the policy is reset to B in child processes." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the calling process has a negative nice value, the nice value is reset to " "zero in child processes." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "After the reset-on-fork flag has been enabled, it can be reset only if the " "thread has the B capability. This flag is disabled in child " "processes created by B(2)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Privileges and resource limits" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Before Linux 2.6.12, only privileged (B) threads can set a " "nonzero static priority (i.e., set a real-time scheduling policy). The only " "change that an unprivileged thread can make is to set the B " "policy, and this can be done only if the effective user ID of the caller " "matches the real or effective user ID of the target thread (i.e., the thread " "specified by I) whose policy is being changed." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A thread must be privileged (B) in order to set or modify a " "B policy." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 2.6.12, the B resource limit defines a ceiling on " "an unprivileged thread's static priority for the B and " "B policies. The rules for changing scheduling policy and " "priority are as follows:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If an unprivileged thread has a nonzero B soft limit, then it " "can change its scheduling policy and priority, subject to the restriction " "that the priority cannot be set to a value higher than the maximum of its " "current priority and its B soft limit." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the B soft limit is 0, then the only permitted changes are " "to lower the priority, or to switch to a non-real-time policy." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Subject to the same rules, another unprivileged thread can also make these " "changes, as long as the effective user ID of the thread making the change " "matches the real or effective user ID of the target thread." msgstr "" #. commit c02aa73b1d18e43cfd79c2f193b225e84ca497c8 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Special rules apply for the B policy. Before Linux 2.6.39, an " "unprivileged thread operating under this policy cannot change its policy, " "regardless of the value of its B resource limit. Since Linux " "2.6.39, an unprivileged thread can switch to either the B or " "the B policy so long as its nice value falls within the range " "permitted by its B resource limit (see B(2))." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Privileged (B) threads ignore the B limit; as " "with older kernels, they can make arbitrary changes to scheduling policy and " "priority. See B(2) for further information on B." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Limiting the CPU usage of real-time and deadline processes" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A nonblocking infinite loop in a thread scheduled under the B, " "B, or B policy can potentially block all other " "threads from accessing the CPU forever. Before Linux 2.6.25, the only way " "of preventing a runaway real-time process from freezing the system was to " "run (at the console) a shell scheduled under a higher static priority than " "the tested application. This allows an emergency kill of tested real-time " "applications that do not block or terminate as expected." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 2.6.25, there are other techniques for dealing with runaway real-" "time and deadline processes. One of these is to use the B " "resource limit to set a ceiling on the CPU time that a real-time process may " "consume. See B(2) for details." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 2.6.25, Linux also provides two I files that can be used " "to reserve a certain amount of CPU time to be used by non-real-time " "processes. Reserving CPU time in this fashion allows some CPU time to be " "allocated to (say) a root shell that can be used to kill a runaway process. " "Both of these files specify time values in microseconds:" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This file specifies a scheduling period that is equivalent to 100% CPU " "bandwidth. The value in this file can range from 1 to B, giving an " "operating range of 1 microsecond to around 35 minutes. The default value in " "this file is 1,000,000 (1 second)." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "I" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The value in this file specifies how much of the \"period\" time can be used " "by all real-time and deadline scheduled processes on the system. The value " "in this file can range from -1 to B-1. Specifying -1 makes the run " "time the same as the period; that is, no CPU time is set aside for non-real-" "time processes (which was the behavior before Linux 2.6.25). The default " "value in this file is 950,000 (0.95 seconds), meaning that 5% of the CPU " "time is reserved for processes that don't run under a real-time or deadline " "scheduling policy." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Response time" msgstr "" #. as described in #. .BR request_irq (9). #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A blocked high priority thread waiting for I/O has a certain response time " "before it is scheduled again. The device driver writer can greatly reduce " "this response time by using a \"slow interrupt\" interrupt handler." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Miscellaneous" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Child processes inherit the scheduling policy and parameters across a " "B(2). The scheduling policy and parameters are preserved across " "B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Memory locking is usually needed for real-time processes to avoid paging " "delays; this can be done with B(2) or B(2)." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "The autogroup feature" msgstr "" #. commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 2.6.38, the kernel provides a feature known as autogrouping to " "improve interactive desktop performance in the face of multiprocess, CPU-" "intensive workloads such as building the Linux kernel with large numbers of " "parallel build processes (i.e., the B(1) B<-j> flag)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This feature operates in conjunction with the CFS scheduler and requires a " "kernel that is configured with B. On a running " "system, this feature is enabled or disabled via the file I; a value of 0 disables the feature, while a value " "of 1 enables it. The default value in this file is 1, unless the kernel was " "booted with the I parameter." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A new autogroup is created when a new session is created via B(2); " "this happens, for example, when a new terminal window is started. A new " "process created by B(2) inherits its parent's autogroup membership. " "Thus, all of the processes in a session are members of the same autogroup. " "An autogroup is automatically destroyed when the last process in the group " "terminates." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When autogrouping is enabled, all of the members of an autogroup are placed " "in the same kernel scheduler \"task group\". The CFS scheduler employs an " "algorithm that equalizes the distribution of CPU cycles across task groups. " "The benefits of this for interactive desktop performance can be described " "via the following example." msgstr "" #. Mike Galbraith, 25 Nov 2016: #. I'd say something more wishy-washy here, like cycles are #. distributed fairly across groups and leave it at that, as your #. detailed example is incorrect due to SMP fairness (which I don't #. like much because [very unlikely] worst case scenario #. renders a box sized group incapable of utilizing more that #. a single CPU total). For example, if a group of NR_CPUS #. size competes with a singleton, load balancing will try to give #. the singleton a full CPU of its very own. If groups intersect for #. whatever reason on say my quad lappy, distribution is 80/20 in #. favor of the singleton. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Suppose that there are two autogroups competing for the same CPU (i.e., " "presume either a single CPU system or the use of B(1) to confine " "all the processes to the same CPU on an SMP system). The first group " "contains ten CPU-bound processes from a kernel build started with I. The other contains a single CPU-bound process: a video player. The " "effect of autogrouping is that the two groups will each receive half of the " "CPU cycles. That is, the video player will receive 50% of the CPU cycles, " "rather than just 9% of the cycles, which would likely lead to degraded video " "playback. The situation on an SMP system is more complex, but the general " "effect is the same: the scheduler distributes CPU cycles across task groups " "such that an autogroup that contains a large number of CPU-bound processes " "does not end up hogging CPU cycles at the expense of the other jobs on the " "system." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A process's autogroup (task group) membership can be viewed via the file IpidI:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "$ B\n" "/autogroup-1 nice 0\n" msgstr "" # #. FIXME . #. Because of a bug introduced in Linux 4.7 #. (commit 2159197d66770ec01f75c93fb11dc66df81fd45b made changes #. that exposed the fact that autogroup didn't call scale_load()), #. it happened that *all* values in this range caused a task group #. to be further disfavored by the scheduler, with \-20 resulting #. in the scheduler mildly disfavoring the task group and +19 greatly #. disfavoring it. #. A patch was posted on 23 Nov 2016 #. ("sched/autogroup: Fix 64bit kernel nice adjustment"; #. check later to see in which kernel version it lands. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This file can also be used to modify the CPU bandwidth allocated to an " "autogroup. This is done by writing a number in the \"nice\" range to the " "file to set the autogroup's nice value. The allowed range is from +19 (low " "priority) to -20 (high priority). (Writing values outside of this range " "causes B(2) to fail with the error B.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The autogroup nice setting has the same meaning as the process nice value, " "but applies to distribution of CPU cycles to the autogroup as a whole, based " "on the relative nice values of other autogroups. For a process inside an " "autogroup, the CPU cycles that it receives will be a product of the " "autogroup's nice value (compared to other autogroups) and the process's " "nice value (compared to other processes in the same autogroup." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The use of the B(7) CPU controller to place processes in cgroups " "other than the root CPU cgroup overrides the effect of autogrouping." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The autogroup feature groups only processes scheduled under non-real-time " "policies (B, B, and B). It does not " "group processes scheduled under real-time and deadline policies. Those " "processes are scheduled according to the rules described earlier." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "The nice value and group scheduling" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When scheduling non-real-time processes (i.e., those scheduled under the " "B, B, and B policies), the CFS " "scheduler employs a technique known as \"group scheduling\", if the kernel " "was configured with the B option (which is typical)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Under group scheduling, threads are scheduled in \"task groups\". Task " "groups have a hierarchical relationship, rooted under the initial task group " "on the system, known as the \"root task group\". Task groups are formed in " "the following circumstances:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "All of the threads in a CPU cgroup form a task group. The parent of this " "task group is the task group of the corresponding parent cgroup." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If autogrouping is enabled, then all of the threads that are (implicitly) " "placed in an autogroup (i.e., the same session, as created by B(2)) " "form a task group. Each new autogroup is thus a separate task group. The " "root task group is the parent of all such autogroups." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If autogrouping is enabled, then the root task group consists of all " "processes in the root CPU cgroup that were not otherwise implicitly placed " "into a new autogroup." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If autogrouping is disabled, then the root task group consists of all " "processes in the root CPU cgroup." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If group scheduling was disabled (i.e., the kernel was configured without " "B), then all of the processes on the system are " "notionally placed in a single task group." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Under group scheduling, a thread's nice value has an effect for scheduling " "decisions I. This " "has some surprising consequences in terms of the traditional semantics of " "the nice value on UNIX systems. In particular, if autogrouping is enabled " "(which is the default in various distributions), then employing " "B(2) or B(1) on a process has an effect only for " "scheduling relative to other processes executed in the same session " "(typically: the same terminal window)." msgstr "" #. More succinctly: the nice(1) command is in many cases a no-op since #. Linux 2.6.38. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Conversely, for two processes that are (for example) the sole CPU-bound " "processes in different sessions (e.g., different terminal windows, each of " "whose jobs are tied to different autogroups), I I in terms of the " "scheduler's decisions relative to the process in the other session. A " "possibly useful workaround here is to use a command such as the following to " "modify the autogroup nice value for I of the processes in a terminal " "session:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "$ B /proc/self/autogroup>\n" msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Real-time features in the mainline Linux kernel" msgstr "" #. FIXME . Probably this text will need some minor tweaking #. ask Carsten Emde about this. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since Linux 2.6.18, Linux is gradually becoming equipped with real-time " "capabilities, most of which are derived from the former I " "patch set. Until the patches have been completely merged into the mainline " "kernel, they must be installed to achieve the best real-time performance. " "These patches are named:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "patch-I-rtI\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "and can be downloaded from E<.UR http://www.kernel.org\\:/pub\\:/linux\\:/" "kernel\\:/projects\\:/rt/> E<.UE .>" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Without the patches and prior to their full inclusion into the mainline " "kernel, the kernel configuration offers only the three preemption classes " "B, B, and " "B which respectively provide no, some, and " "considerable reduction of the worst-case scheduling latency." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "With the patches applied or after their full inclusion into the mainline " "kernel, the additional configuration item B becomes " "available. If this is selected, Linux is transformed into a regular real-" "time operating system. The FIFO and RR scheduling policies are then used to " "run a thread with true real-time priority and a minimum worst-case " "scheduling latency." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NOTES" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B(7) CPU controller can be used to limit the CPU consumption " "of groups of processes." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Originally, Standard Linux was intended as a general-purpose operating " "system being able to handle background processes, interactive applications, " "and less demanding real-time applications (applications that need to usually " "meet timing deadlines). Although the Linux 2.6 allowed for kernel " "preemption and the newly introduced O(1) scheduler ensures that the time " "needed to schedule is fixed and deterministic irrespective of the number of " "active tasks, true real-time computing was not possible up to Linux 2.6.17." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(1), B(1), B(1), B(1), B(1), B(1), " "B(2), B(2), B(2), B(2), " "B(2), B(2), B(2), " "B(2), B(2), B(2), " "B(2), B(2), " "B(2), B(2), B(2), " "B(2), B(2), B(3), " "B(3), B(3), " "B(3), B(7), B(7)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I by Bill O.\\& Gallmeister, " "O'Reilly & Associates, Inc., ISBN 1-56592-074-0." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The Linux kernel source files I<\\%Documentation/\\:scheduler/\\:sched-" "deadline\\:.txt>, I<\\%Documentation/\\:scheduler/\\:sched-rt-group\\:.txt>, " "I<\\%Documentation/\\:scheduler/\\:sched-design-CFS\\:.txt>, and I<\\" "%Documentation/\\:scheduler/\\:sched-nice-design\\:.txt>" msgstr "" #. type: TH #: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "2023-02-10" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "" #. type: TH #: debian-unstable opensuse-tumbleweed #, no-wrap msgid "Linux man-pages 6.05.01" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr ""