Extended system accounting over taskstats
PATCH 2/3 Extended system accounting over taskstats
This patch is to replace "[patch 2/3] add CSA accounting to taskstats" posted on 7/31.
This patch adds 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 <[email protected]>
include/linux/taskstats.h +11 -0
@@ -107,6 +107,17 @@ struct taskstats {__u64 ac_minflt;/* Minor Page Fault */ __u64 ac_majflt;/* Major Page Fault */ /* Basic Accounting Fields end */ + +/* Extended accounting fields start */ +__u64 acct_rss_mem1;/* accumulated rss usage */ +__u64 acct_vm_mem1;/* accumulated virtual memory usage */ +__u64 hiwater_rss;/* High-watermark of RSS usage */ +__u64 hiwater_vm;/* High-water virtual memory usage */ +__u64 read_char;/* bytes read */ +__u64 write_char;/* bytes written */ +__u64 read_syscalls;/* read syscalls */ +__u64 write_syscalls;/* write syscalls */ +/* Extended accounting fields end */ };
init/Kconfig +9 -0
@@ -182,6 +182,15 @@ config TASK_DELAY_ACCT Say N if unsure. +config TASK_XACCT + bool "Enable extended accounting over taskstats (EXPERIMENTAL)" + depends on TASKSTATS + help + Collect extended task accounting data and send the data + to userland for processing over the taskstats interface. + + Say N if unsure. + config SYSCTL bool "Sysctl support" if EMBEDDED default y
kernel/taskstats.c +4 -0
@@ -20,6 +20,7 @@#include <linux/taskstats_kern.h> #include <linux/tsacct_kern.h> #include <linux/delayacct.h> +#include <linux/tsacct_kern.h> #include <linux/cpumask.h> #include <linux/percpu.h> #include <net/genetlink.h>
@@ -204,6 +205,9 @@ static int fill_pid(pid_t pid, struct ta stats->version =TASKSTATS_VERSION ;bacct_add_tsk (stats, tsk); +/* fill in extended acct fields */ +xacct_add_tsk (stats, tsk); +/* Define err: label here if needed */ put_task_struct (tsk);return rc;
include/linux/tsacct_kern.h +9 -0
@@ -16,4 +16,13 @@ static inline void bacct_add_tsk(struct {}#endif /* CONFIG_TASKSTATS */ +#ifdef CONFIG_TASK_XACCT +extern void xacct_add_tsk (struct taskstats *stats,struct task_struct *p); +#else +static inline void xacct_add_tsk (struct taskstats *stats,struct task_struct *p) +{} +#endif /* CONFIG_TASK_XACCT */ +#endif + +
kernel/tsacct.c +19 -0
@@ -67,3 +67,22 @@ void bacct_add_tsk(struct taskstats *stastrncpy (stats->ac_comm, tsk->comm,sizeof (stats->ac_comm)); } + +#ifdef CONFIG_TASK_XACCT +/* +* fill in extended accounting fields +*/ +void xacct_add_tsk (struct taskstats *stats,struct task_struct *p) +{ + stats->acct_rss_mem1 = p->acct_rss_mem1; + stats->acct_vm_mem1 = p->acct_vm_mem1; +if (p->mm) { + stats->hiwater_rss = p->mm->hiwater_rss; + stats->hiwater_vm = p->mm->hiwater_vm; + } + stats->read_char = p->rchar; + stats->write_char = p->wchar; + stats->read_syscalls = p->syscr; + stats->write_syscalls = p->syscw; +} +#endif