94 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			94 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # The `ionice` command
 | |||
|  | 
 | |||
|  | The `ionice` command is used to set or get process I/O scheduling class and priority. | |||
|  | 
 | |||
|  | If no arguments are given , `ionice` will query the current I/O scheduling class and priority for that process. | |||
|  | 
 | |||
|  | ## Usage
 | |||
|  | 
 | |||
|  |  ``` | |||
|  | ionice [options] -p <pid> | |||
|  | ``` | |||
|  |   | |||
|  | ``` | |||
|  | ionice [options] -P <pgid> | |||
|  | ``` | |||
|  | 
 | |||
|  | ``` | |||
|  | ionice [options] -u <uid> | |||
|  | ``` | |||
|  | 
 | |||
|  | ``` | |||
|  | ionice [options] <command> | |||
|  | ``` | |||
|  | 
 | |||
|  | ## A process can be of three scheduling classes:
 | |||
|  | - ### Idle | |||
|  | 		 | |||
|  | 	A program with idle I/O priority will only get disk time when `no other program has asked for disk I/O for a defined grace period`. | |||
|  | 	 | |||
|  | 	The impact of idle processes on normal system actively should be `zero`. | |||
|  | 	 | |||
|  | 	This scheduling class `doesn’t take priority` argument. | |||
|  | 	 | |||
|  | 	Presently this scheduling class is permitted for an `ordinary user (since kernel 2.6.25)`. | |||
|  | - ### Best Effort | |||
|  | 		 | |||
|  | 	This is `effective` scheduling class for any process that has `not asked for a specific I/O priority`. | |||
|  | 	 | |||
|  | 	This class `takes priority argument from 0-7`, with `lower` number being `higher priority`. | |||
|  | 	 | |||
|  | 	Programs running at the same best effort priority are served in `round- robbin fashion`. | |||
|  | 	 | |||
|  | 	Note that before kernel 2.6.26  a process that has not asked for an I/O priority formally uses “None” as scheduling class , but the io schedular will treat such processes as if it were in the best effort class.  | |||
|  | 	 | |||
|  | 	The priority within best effort class will be dynamically derived form the CPU nice level of the process : io_priority = ( cpu_nice + 20 ) / 5/ | |||
|  | 	for kernels after 2.6.26 with CFQ I/O schedular a process that has not asked for sn io priority inherits CPU scheduling class. | |||
|  | 	 | |||
|  | 	`The I/O priority is derived from the CPU nice level of the process` ( smr sd before kernel 2.6.26 ). | |||
|  | 
 | |||
|  | - ### Real Time | |||
|  | 		 | |||
|  | 	The real time schedular class is `given first access to disk, regardless of what else is going on in the system`. | |||
|  | 	 | |||
|  | 	Thus the real time class needs to be used with some care, as it cans tarve other processes . | |||
|  | 	 | |||
|  | 	As with the best effort class, `8 priority levels are defined denoting how big a time slice a given process will receive on each scheduling window`.	 | |||
|  | 	 | |||
|  | 	This scheduling class is `not permitted for an ordinary user(non-root)`. | |||
|  | 
 | |||
|  | ## Options
 | |||
|  | | Options | Description | | |||
|  | |---|---| | |||
|  | | -c, --class <class>   | name or number of scheduling class, 0: none, 1: realtime, 2: best-effort, 3: idle| | |||
|  | | -n, --classdata <num> | priority (0..7) in the specified scheduling class,only for the realtime and best-effort classes| | |||
|  | | -p, --pid <pid>...    | act on these already running processes| | |||
|  | | -P, --pgid <pgrp>...  | act on already running processes in these groups| | |||
|  | | -t, --ignore          | ignore failures| | |||
|  | | -u, --uid <uid>...    | act on already running processes owned by these users| | |||
|  | | -h, --help            | display this help| | |||
|  | | -V, --version         | display version| | |||
|  | 
 | |||
|  | For more details see ionice(1). | |||
|  | 
 | |||
|  | 
 | |||
|  | ## Examples
 | |||
|  | | Command | O/P |Explanation| | |||
|  | |---|---|---| | |||
|  | |`$ ionice` |*none: prio 4*|Running alone `ionice` will give the class and priority of current process | | |||
|  | |`$ ionice -p 101`|*none : prio 4*|Give the details(*class : priority*) of the process specified by given process id| | |||
|  | |`$ ionice -p 2` |*none: prio 4*| Check the class and priority of process with pid 2 it is none and 4 resp.| | |||
|  | |`$ ionice    -c2    -n0    -p2`|2 ( best-effort )	priority 0	process 2 | Now lets set process(pid) 2 as a best-effort program with highest priority| | |||
|  | |$ `ionice` -p 2|best-effort : prio 0| Now if I check details of Process 2 you can see the updated one| | |||
|  | |$ `ionice` /bin/ls||get priority and class info of bin/ls | | |||
|  | |$ `ionice` -n4 -p2||set priority 4 of process with pid 2 | | |||
|  | |$ `ionice` -p 2|  best-effort: prio 4| Now observe the difference between the command ran above and this one we have changed priority from 0 to 4| | |||
|  | |$ `ionice` -c0 -n4 -p2|ionice: ignoring given class data for none class|(Note that before kernel 2.6.26  a process that has not asked for an I/O priority formally uses “None” as scheduling class , | | |||
|  | |||but the io schedular will treat such processes as if it were in the best effort class. )| | |||
|  | |||-t option : ignore failure| | |||
|  | |$ `ionice` -c0 -n4 -p2 -t| | For ignoring the warning shown above we can use -t option so it will ignore failure | | |||
|  | 
 | |||
|  | ## Conclusion
 | |||
|  |    | |||
|  |  Thus we have successfully learnt about `ionice` command. |