diff options
author | Jay Lan <jlan@engr.sgi.com> | 2006-10-01 02:28:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-01 03:39:29 -0400 |
commit | 9acc1853519a0473620d424105f9d49ea5b4e62e (patch) | |
tree | fd4d03bf82ea604e71f8e805e557023226c2dd42 | |
parent | f3cef7a99469afc159fec3a61b42dc7ca5b6824f (diff) |
[PATCH] csa: Extended system accounting over taskstats
Add extended system accounting handling over taskstats interface. A
CONFIG_TASK_XACCT flag is created to enable the extended accounting code.
Signed-off-by: Jay Lan <jlan@sgi.com>
Cc: Shailabh Nagar <nagar@watson.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Jes Sorensen <jes@sgi.com>
Cc: Chris Sturtivant <csturtiv@sgi.com>
Cc: Tony Ernst <tee@sgi.com>
Cc: Guillaume Thouvenin <guillaume.thouvenin@bull.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | include/linux/taskstats.h | 11 | ||||
-rw-r--r-- | include/linux/tsacct_kern.h | 9 | ||||
-rw-r--r-- | init/Kconfig | 9 | ||||
-rw-r--r-- | kernel/taskstats.c | 4 | ||||
-rw-r--r-- | kernel/tsacct.c | 19 |
5 files changed, 52 insertions, 0 deletions
diff --git a/include/linux/taskstats.h b/include/linux/taskstats.h index af93a63a5092..3d2c304886b0 100644 --- a/include/linux/taskstats.h +++ b/include/linux/taskstats.h | |||
@@ -107,6 +107,17 @@ struct taskstats { | |||
107 | __u64 ac_minflt; /* Minor Page Fault */ | 107 | __u64 ac_minflt; /* Minor Page Fault */ |
108 | __u64 ac_majflt; /* Major Page Fault */ | 108 | __u64 ac_majflt; /* Major Page Fault */ |
109 | /* Basic Accounting Fields end */ | 109 | /* Basic Accounting Fields end */ |
110 | |||
111 | /* Extended accounting fields start */ | ||
112 | __u64 acct_rss_mem1; /* accumulated rss usage */ | ||
113 | __u64 acct_vm_mem1; /* accumulated virtual memory usage */ | ||
114 | __u64 hiwater_rss; /* High-watermark of RSS usage */ | ||
115 | __u64 hiwater_vm; /* High-water virtual memory usage */ | ||
116 | __u64 read_char; /* bytes read */ | ||
117 | __u64 write_char; /* bytes written */ | ||
118 | __u64 read_syscalls; /* read syscalls */ | ||
119 | __u64 write_syscalls; /* write syscalls */ | ||
120 | /* Extended accounting fields end */ | ||
110 | }; | 121 | }; |
111 | 122 | ||
112 | 123 | ||
diff --git a/include/linux/tsacct_kern.h b/include/linux/tsacct_kern.h index 7e8196a02118..74102dcae67a 100644 --- a/include/linux/tsacct_kern.h +++ b/include/linux/tsacct_kern.h | |||
@@ -16,4 +16,13 @@ static inline void bacct_add_tsk(struct taskstats *stats, struct task_struct *ts | |||
16 | {} | 16 | {} |
17 | #endif /* CONFIG_TASKSTATS */ | 17 | #endif /* CONFIG_TASKSTATS */ |
18 | 18 | ||
19 | #ifdef CONFIG_TASK_XACCT | ||
20 | extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p); | ||
21 | #else | ||
22 | static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) | ||
23 | {} | ||
24 | #endif /* CONFIG_TASK_XACCT */ | ||
25 | |||
19 | #endif | 26 | #endif |
27 | |||
28 | |||
diff --git a/init/Kconfig b/init/Kconfig index d2d72704f875..f7a04d0daf07 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -257,6 +257,15 @@ config CC_OPTIMIZE_FOR_SIZE | |||
257 | 257 | ||
258 | If unsure, say N. | 258 | If unsure, say N. |
259 | 259 | ||
260 | config TASK_XACCT | ||
261 | bool "Enable extended accounting over taskstats (EXPERIMENTAL)" | ||
262 | depends on TASKSTATS | ||
263 | help | ||
264 | Collect extended task accounting data and send the data | ||
265 | to userland for processing over the taskstats interface. | ||
266 | |||
267 | Say N if unsure. | ||
268 | |||
260 | config SYSCTL | 269 | config SYSCTL |
261 | bool | 270 | bool |
262 | 271 | ||
diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 6c38dce88e8c..5d6a8c54ee85 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/taskstats_kern.h> | 20 | #include <linux/taskstats_kern.h> |
21 | #include <linux/tsacct_kern.h> | 21 | #include <linux/tsacct_kern.h> |
22 | #include <linux/delayacct.h> | 22 | #include <linux/delayacct.h> |
23 | #include <linux/tsacct_kern.h> | ||
23 | #include <linux/cpumask.h> | 24 | #include <linux/cpumask.h> |
24 | #include <linux/percpu.h> | 25 | #include <linux/percpu.h> |
25 | #include <net/genetlink.h> | 26 | #include <net/genetlink.h> |
@@ -204,6 +205,9 @@ static int fill_pid(pid_t pid, struct task_struct *pidtsk, | |||
204 | stats->version = TASKSTATS_VERSION; | 205 | stats->version = TASKSTATS_VERSION; |
205 | bacct_add_tsk(stats, tsk); | 206 | bacct_add_tsk(stats, tsk); |
206 | 207 | ||
208 | /* fill in extended acct fields */ | ||
209 | xacct_add_tsk(stats, tsk); | ||
210 | |||
207 | /* Define err: label here if needed */ | 211 | /* Define err: label here if needed */ |
208 | put_task_struct(tsk); | 212 | put_task_struct(tsk); |
209 | return rc; | 213 | return rc; |
diff --git a/kernel/tsacct.c b/kernel/tsacct.c index 899067950a88..410483490cf6 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c | |||
@@ -70,3 +70,22 @@ void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) | |||
70 | strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm)); | 70 | strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm)); |
71 | } | 71 | } |
72 | 72 | ||
73 | |||
74 | #ifdef CONFIG_TASK_XACCT | ||
75 | /* | ||
76 | * fill in extended accounting fields | ||
77 | */ | ||
78 | void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) | ||
79 | { | ||
80 | stats->acct_rss_mem1 = p->acct_rss_mem1; | ||
81 | stats->acct_vm_mem1 = p->acct_vm_mem1; | ||
82 | if (p->mm) { | ||
83 | stats->hiwater_rss = p->mm->hiwater_rss; | ||
84 | stats->hiwater_vm = p->mm->hiwater_vm; | ||
85 | } | ||
86 | stats->read_char = p->rchar; | ||
87 | stats->write_char = p->wchar; | ||
88 | stats->read_syscalls = p->syscr; | ||
89 | stats->write_syscalls = p->syscw; | ||
90 | } | ||
91 | #endif | ||