aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/taskstats.h11
-rw-r--r--include/linux/tsacct_kern.h9
-rw-r--r--init/Kconfig9
-rw-r--r--kernel/taskstats.c4
-rw-r--r--kernel/tsacct.c19
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
20extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p);
21#else
22static 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
260config 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
260config SYSCTL 269config 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 */
78void 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