diff options
Diffstat (limited to 'Documentation/accounting/taskstats.txt')
-rw-r--r-- | Documentation/accounting/taskstats.txt | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/Documentation/accounting/taskstats.txt b/Documentation/accounting/taskstats.txt index acc6b4f37fc7..efd8f605bcd5 100644 --- a/Documentation/accounting/taskstats.txt +++ b/Documentation/accounting/taskstats.txt | |||
@@ -32,12 +32,11 @@ The response contains statistics for a task (if pid is specified) or the sum of | |||
32 | statistics for all tasks of the process (if tgid is specified). | 32 | statistics for all tasks of the process (if tgid is specified). |
33 | 33 | ||
34 | To obtain statistics for tasks which are exiting, userspace opens a multicast | 34 | To obtain statistics for tasks which are exiting, userspace opens a multicast |
35 | netlink socket. Each time a task exits, two records are sent by the kernel to | 35 | netlink socket. Each time a task exits, its per-pid statistics is always sent |
36 | each listener on the multicast socket. The first the per-pid task's statistics | 36 | by the kernel to each listener on the multicast socket. In addition, if it is |
37 | and the second is the sum for all tasks of the process to which the task | 37 | the last thread exiting its thread group, an additional record containing the |
38 | belongs (the task does not need to be the thread group leader). The need for | 38 | per-tgid stats are also sent. The latter contains the sum of per-pid stats for |
39 | per-tgid stats to be sent for each exiting task is explained in the per-tgid | 39 | all threads in the thread group, both past and present. |
40 | stats section below. | ||
41 | 40 | ||
42 | getdelays.c is a simple utility demonstrating usage of the taskstats interface | 41 | getdelays.c is a simple utility demonstrating usage of the taskstats interface |
43 | for reporting delay accounting statistics. | 42 | for reporting delay accounting statistics. |
@@ -104,20 +103,14 @@ stats in userspace alone is inefficient and potentially inaccurate (due to lack | |||
104 | of atomicity). | 103 | of atomicity). |
105 | 104 | ||
106 | However, maintaining per-process, in addition to per-task stats, within the | 105 | However, maintaining per-process, in addition to per-task stats, within the |
107 | kernel has space and time overheads. Hence the taskstats implementation | 106 | kernel has space and time overheads. To address this, the taskstats code |
108 | dynamically sums up the per-task stats for each task belonging to a process | 107 | accumalates each exiting task's statistics into a process-wide data structure. |
109 | whenever per-process stats are needed. | 108 | When the last task of a process exits, the process level data accumalated also |
110 | 109 | gets sent to userspace (along with the per-task data). | |
111 | Not maintaining per-tgid stats creates a problem when userspace is interested | 110 | |
112 | in getting these stats when the process dies i.e. the last thread of | 111 | When a user queries to get per-tgid data, the sum of all other live threads in |
113 | a process exits. It isn't possible to simply return some aggregated per-process | 112 | the group is added up and added to the accumalated total for previously exited |
114 | statistic from the kernel. | 113 | threads of the same thread group. |
115 | |||
116 | The approach taken by taskstats is to return the per-tgid stats *each* time | ||
117 | a task exits, in addition to the per-pid stats for that task. Userspace can | ||
118 | maintain task<->process mappings and use them to maintain the per-process stats | ||
119 | in userspace, updating the aggregate appropriately as the tasks of a process | ||
120 | exit. | ||
121 | 114 | ||
122 | Extending taskstats | 115 | Extending taskstats |
123 | ------------------- | 116 | ------------------- |