1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef _UAPI_LINUX_SCHED_TYPES_H 3 #define _UAPI_LINUX_SCHED_TYPES_H 4 5 #include <linux/types.h> 6 7 struct sched_param { 8 int sched_priority; 9 }; 10 11 #define SCHED_ATTR_SIZE_VER0 48 /* sizeof first published struct */ 12 #define SCHED_ATTR_SIZE_VER1 56 /* add: util_{min,max} */ 13 14 /* 15 * Extended scheduling parameters data structure. 16 * 17 * This is needed because the original struct sched_param can not be 18 * altered without introducing ABI issues with legacy applications 19 * (e.g., in sched_getparam()). 20 * 21 * However, the possibility of specifying more than just a priority for 22 * the tasks may be useful for a wide variety of application fields, e.g., 23 * multimedia, streaming, automation and control, and many others. 24 * 25 * This variant (sched_attr) allows to define additional attributes to 26 * improve the scheduler knowledge about task requirements. 27 * 28 * Scheduling Class Attributes 29 * =========================== 30 * 31 * A subset of sched_attr attributes specifies the 32 * scheduling policy and relative POSIX attributes: 33 * 34 * @size size of the structure, for fwd/bwd compat. 35 * 36 * @sched_policy task's scheduling policy 37 * @sched_nice task's nice value (SCHED_NORMAL/BATCH) 38 * @sched_priority task's static priority (SCHED_FIFO/RR) 39 * 40 * Certain more advanced scheduling features can be controlled by a 41 * predefined set of flags via the attribute: 42 * 43 * @sched_flags for customizing the scheduler behaviour 44 * 45 * Sporadic Time-Constrained Task Attributes 46 * ========================================= 47 * 48 * A subset of sched_attr attributes allows to describe a so-called 49 * sporadic time-constrained task. 50 * 51 * In such a model a task is specified by: 52 * - the activation period or minimum instance inter-arrival time; 53 * - the maximum (or average, depending on the actual scheduling 54 * discipline) computation time of all instances, a.k.a. runtime; 55 * - the deadline (relative to the actual activation time) of each 56 * instance. 57 * Very briefly, a periodic (sporadic) task asks for the execution of 58 * some specific computation --which is typically called an instance-- 59 * (at most) every period. Moreover, each instance typically lasts no more 60 * than the runtime and must be completed by time instant t equal to 61 * the instance activation time + the deadline. 62 * 63 * This is reflected by the following fields of the sched_attr structure: 64 * 65 * @sched_deadline representative of the task's deadline 66 * @sched_runtime representative of the task's runtime 67 * @sched_period representative of the task's period 68 * 69 * Given this task model, there are a multiplicity of scheduling algorithms 70 * and policies, that can be used to ensure all the tasks will make their 71 * timing constraints. 72 * 73 * As of now, the SCHED_DEADLINE policy (sched_dl scheduling class) is the 74 * only user of this new interface. More information about the algorithm 75 * available in the scheduling class file or in Documentation/. 76 * 77 * Task Utilization Attributes 78 * =========================== 79 * 80 * A subset of sched_attr attributes allows to specify the utilization 81 * expected for a task. These attributes allow to inform the scheduler about 82 * the utilization boundaries within which it should schedule the task. These 83 * boundaries are valuable hints to support scheduler decisions on both task 84 * placement and frequency selection. 85 * 86 * @sched_util_min represents the minimum utilization 87 * @sched_util_max represents the maximum utilization 88 * 89 * Utilization is a value in the range [0..SCHED_CAPACITY_SCALE]. It 90 * represents the percentage of CPU time used by a task when running at the 91 * maximum frequency on the highest capacity CPU of the system. For example, a 92 * 20% utilization task is a task running for 2ms every 10ms at maximum 93 * frequency. 94 * 95 * A task with a min utilization value bigger than 0 is more likely scheduled 96 * on a CPU with a capacity big enough to fit the specified value. 97 * A task with a max utilization value smaller than 1024 is more likely 98 * scheduled on a CPU with no more capacity than the specified value. 99 * 100 * A task utilization boundary can be reset by setting the attribute to -1. 101 */ 102 struct sched_attr { 103 __u32 size; 104 105 __u32 sched_policy; 106 __u64 sched_flags; 107 108 /* SCHED_NORMAL, SCHED_BATCH */ 109 __s32 sched_nice; 110 111 /* SCHED_FIFO, SCHED_RR */ 112 __u32 sched_priority; 113 114 /* SCHED_DEADLINE */ 115 __u64 sched_runtime; 116 __u64 sched_deadline; 117 __u64 sched_period; 118 119 /* Utilization hints */ 120 __u32 sched_util_min; 121 __u32 sched_util_max; 122 123 }; 124 125 #endif /* _UAPI_LINUX_SCHED_TYPES_H */ 126