brintos

brintos / linux-shallow public Read only

0
0
Text · 4.7 KiB · f61c01f Raw
134 lines · plain
1================2Delay accounting3================4 5Tasks encounter delays in execution when they wait6for some kernel resource to become available e.g. a7runnable task may wait for a free CPU to run on.8 9The per-task delay accounting functionality measures10the delays experienced by a task while11 12a) waiting for a CPU (while being runnable)13b) completion of synchronous block I/O initiated by the task14c) swapping in pages15d) memory reclaim16e) thrashing17f) direct compact18g) write-protect copy19h) IRQ/SOFTIRQ20 21and makes these statistics available to userspace through22the taskstats interface.23 24Such delays provide feedback for setting a task's cpu priority,25io priority and rss limit values appropriately. Long delays for26important tasks could be a trigger for raising its corresponding priority.27 28The functionality, through its use of the taskstats interface, also provides29delay statistics aggregated for all tasks (or threads) belonging to a30thread group (corresponding to a traditional Unix process). This is a commonly31needed aggregation that is more efficiently done by the kernel.32 33Userspace utilities, particularly resource management applications, can also34aggregate delay statistics into arbitrary groups. To enable this, delay35statistics of a task are available both during its lifetime as well as on its36exit, ensuring continuous and complete monitoring can be done.37 38 39Interface40---------41 42Delay accounting uses the taskstats interface which is described43in detail in a separate document in this directory. Taskstats returns a44generic data structure to userspace corresponding to per-pid and per-tgid45statistics. The delay accounting functionality populates specific fields of46this structure. See47 48     include/uapi/linux/taskstats.h49 50for a description of the fields pertaining to delay accounting.51It will generally be in the form of counters returning the cumulative52delay seen for cpu, sync block I/O, swapin, memory reclaim, thrash page53cache, direct compact, write-protect copy, IRQ/SOFTIRQ etc.54 55Taking the difference of two successive readings of a given56counter (say cpu_delay_total) for a task will give the delay57experienced by the task waiting for the corresponding resource58in that interval.59 60When a task exits, records containing the per-task statistics61are sent to userspace without requiring a command. If it is the last exiting62task of a thread group, the per-tgid statistics are also sent. More details63are given in the taskstats interface description.64 65The getdelays.c userspace utility in tools/accounting directory allows simple66commands to be run and the corresponding delay statistics to be displayed. It67also serves as an example of using the taskstats interface.68 69Usage70-----71 72Compile the kernel with::73 74	CONFIG_TASK_DELAY_ACCT=y75	CONFIG_TASKSTATS=y76 77Delay accounting is disabled by default at boot up.78To enable, add::79 80   delayacct81 82to the kernel boot options. The rest of the instructions below assume this has83been done. Alternatively, use sysctl kernel.task_delayacct to switch the state84at runtime. Note however that only tasks started after enabling it will have85delayacct information.86 87After the system has booted up, use a utility88similar to  getdelays.c to access the delays89seen by a given task or a task group (tgid).90The utility also allows a given command to be91executed and the corresponding delays to be92seen.93 94General format of the getdelays command::95 96	getdelays [-dilv] [-t tgid] [-p pid]97 98Get delays, since system boot, for pid 10::99 100	# ./getdelays -d -p 10101	(output similar to next case)102 103Get sum of delays, since system boot, for all pids with tgid 5::104 105	# ./getdelays -d -t 5106	print delayacct stats ON107	TGID	5108 109 110	CPU             count     real total  virtual total    delay total  delay average111	                    8        7000000        6872122        3382277          0.423ms112	IO              count    delay total  delay average113                   0              0          0.000ms114	SWAP            count    delay total  delay average115                       0              0          0.000ms116	RECLAIM         count    delay total  delay average117                   0              0          0.000ms118	THRASHING       count    delay total  delay average119                       0              0          0.000ms120	COMPACT         count    delay total  delay average121                       0              0          0.000ms122	WPCOPY          count    delay total  delay average123                       0              0          0.000ms124	IRQ             count    delay total  delay average125                       0              0          0.000ms126 127Get IO accounting for pid 1, it works only with -p::128 129	# ./getdelays -i -p 1130	printing IO accounting131	linuxrc: read=65536, write=0, cancelled_write=0132 133The above command can be used with -v to get more debug information.134