SCHEDTOOL(8) System Manager's Manual SCHEDTOOL(8) NAME schedtool - query and set CPU scheduling parameters SYNOPSIS schedtool [-0|-N] [-1|-F] [-2|-R] [-3|-B] [-4|-I] [-5|-D] [-M policy] [-a affinity] [-p prio] [-n nice_level] [-e command [arg ...]] [-r] [-v] [-h] [LIST OF PIDs] DESCRIPTION schedtool can set all CPU scheduling parameters Linux is capable of or display information for given processes. Long-running, non-interactive tasks may benefit from SCHED_BATCH as timeslices are longer, less system-time is wasted by computing the next runnable process and the caches stay stable. Audio/video or other near-realtime applications may run with less skip- ping if set to SCHED_RR. Use the static priority-switch -p to desig- nate inter-process-hierarchies. schedtool now supports setting the CPU-affinity introduced in linux 2.5.8. OPTIONS -N or -0 set all PIDs to SCHED_NORMAL/OTHER -F or -1 to SCHED_FIFO root-credentials required -R or -2 to SCHED_RR root-credentials required -B or -3 to SCHED_BATCH -I or -4 to SCHED_ISO -D or -5 to SCHED_IDLEPRIO -M policy for manual/raw mode; policy is the number of the scheduling pol- icy (see above for 0-4). This option is mostly for kernel guys that want to test their new implementations. -p prio specify static priority required for SCHED_FIFO and SCHED_RR. Usually ranged from 1-99. -a affinity set the PID's affinity to this bitmask (hexadecimal); alterna- tively, a list mode is supported. -n nice_level set the PID's nice level; see nice(2), nice(1). -e command [arg ...] execute command with given scheduling parameters (overwrites schedtool's process image). See EXAMPLES. -r display min and max priority for each policy. -v be verbose. -h help EXAMPLES To query the $SHELL's policies: #> schedtool $$ To query some PIDs, namely 1 2 and 3: #> schedtool 1 2 3 To execute mplayer in SCHED_RR with priority 20. The priority arg is needed for both SCHED_RR and SCHED_FIFO. #> schedtool -R -p 20 -e mplayer -quiet some_file.avi To set current shell to SCHED_BATCH, which all programs the shell starts will inherit: #> schedtool -3 $$ To set all processes with the name 'cpu_hog' to SCHED_BATCH: #> schedtool -3 `pidof cpu_hog` To set a process' affinity to only the first CPU (CPU0): #> schedtool -a 0x1 <PID> Using the list mode and affinty of CPU0 and CPU3: #> schedtool -a 0,3 <PID> A combination of an affinity and a policy-argument is - of course - al- ways possible. #> schedtool -B -a 0x1 <PID> AFFINITY MASK The affinity-argument determines on which CPUs a process is allowed to run. It consists of a simple bitmask represented in hexadecimal. CPU0 is denoted by the least-significant bit, CPU1 by the second least-sig- nificant and so on, thus giving: 0x1 -> only run on CPU0 0x2 -> only run on CPU1 0x4 -> only run on CPU2 0x8 -> only run on CPU3 ... and so on. Multi-target CPUs may be specified using bitwise OR of the values: 0x7 -> run on CPUs 0, 1, 2 but NOT on 4 0x3 -> run only on CPUs 0 and 1 The default is to run a process on all CPUs, giving a mask of 0xf for all 4 CPUs 0xff for all 8 CPUs AFFINITY MASK - LIST MODE Alternatively a list mode is supported where you can specify the CPUs delimited by ",". The following runs <PID> on CPU0 and CPU1 (equiva- lent to 0x3): #> schedtool -a 0,1 <PID> POLICY OVERVIEW SCHED_NORMAL / SCHED_OTHER This is the default policy and for the aver- age program with some interaction. Does preemption of other processes. SCHED_FIFO First-In, First Out Scheduler, used only for real-time con- straints. Processes in this class are usually not preempted by others, they need to free themselves from the CPU via sched_yield() and as such you need special designed applications. Use with extreme care. ROOT- credentials required. SCHED_RR Round-Robin Scheduler, also used for real-time constraints. CPU-time is assigned in an round-robin fashion with a much smaller timeslice than with SCHED_NORMAL and processes in this group are favoured over SCHED_NORMAL. Usable for audio/video applications near peak rate of the system. ROOT-credentials required. SCHED_BATCH [ since 2.6.16 in mainline ] SCHED_BATCH was designed for non-interactive, CPU-bound applications. It uses longer timeslices (to better exploit the cache), but can be interrupted anytime by other pro- cesses in other classes to guaratee interaction of the system. Pro- cesses in this class are selected last but may result in a considerable speed-up (up to 300%). No interactive boosting is done. SCHED_ISO [ patch needed ] SCHED_ISO was designed to give users a SCHED_RR-similar class. To quote Con Kolivas: "This is a non-expiring scheduler policy designed to guarantee a timeslice within a reasonable latency while preventing starvation. Good for gaming, video at the limits of hardware, video capture etc." SCHED_IDLEPRIO [ patch needed ] SCHED_IDLEPRIO is similar to SCHED_BATCH, but was explicitly designed to consume only the time the CPU is idle. No interactive boosting is done. If you used SCHED_BATCH in the -ck kernels this is what you want since 2.6.16 HINTS PID 0 means "current process", in our case, schedtool. May occur when using the -e switch. Be careful with SCHED_FIFO! You may lock out other processes from the CPU, including your shell. For SCHED_BATCH you certainly need the a recent 2.6 kernel. A short overview is given in SCHED_DESIGN and the README contains thor- ough discussion. The INSTALL file also lists all prerequisites and where you can get patches. Affinity 0x0 should never be used. SEE ALSO sched_setscheduler(2), sched_setaffinity(2), nice(2), nice(1), renice(3). BUGS You need some knowledge about the kernel and scheduling. The author is a grumpy little elitist. AUTHOR Freek Please contact me via freshmeat.net's "contact author"-feature (http://freshmeat.net/projects/schedtool). 1 November 2006 SCHEDTOOL(8)
Generated by dwww version 1.15 on Thu Jun 20 14:12:24 CEST 2024.