Messages in this thread | | | Date | Mon, 31 Jul 2006 15:03:54 -0700 | From | Jay Lan <> | Subject | Re: [patch 2/3] add CSA accounting to taskstats |
| |
Shailabh Nagar wrote: > Jay Lan wrote: > >>This patch add CSA accounting fields to the taskstats struct >>and a kernel/csa.c to fill the data on exit. >> >> >>Signed-off-by: Jay Lan <jlan@sgi.com> >> >> >>------------------------------------------------------------------------ >> >>Index: linux/include/linux/taskstats.h >>=================================================================== >>--- linux.orig/include/linux/taskstats.h 2006-07-31 11:42:10.000000000 -0700 >>+++ linux/include/linux/taskstats.h 2006-07-31 11:50:00.412433042 -0700 >>@@ -107,6 +107,21 @@ struct taskstats { >> __u64 ac_utime; /* User CPU time [usec] */ >> __u64 ac_stime; /* SYstem CPU time [usec] */ >> /* Basic Accounting Fields end */ >>+ >>+ /* CSA accounting fields start */ >>+ __u16 csa_revision; /* CSA Revision */ > > > May be helpful to add a note here that every time csa_revision is changed, > TASKSTATS_VERSION also needs to be bumped up.
Certainly! Thanks!
> > >>+ __u16 csa_pad[3]; /* Unused */ > > > >>+ __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 ac_minflt; /* Minor Page Fault */ >>+ __u64 ac_majflt; /* Major Page Fault */ > > > Can the number of prefixes be reduced ? In the space of a few fields, we have > ac_*, csa_*, acct_* and plain (for hiwater_rss/vm)
Will do better in next round. I will see if people like to do away the pre_ completely. Otherwise, i will keep ac_ for basic and plain for CSA specific fields.
> > > >>+ __u64 ac_chr; /* bytes read */ >>+ __u64 ac_chw; /* bytes written */ >>+ __u64 ac_scr; /* read syscalls */ >>+ __u64 ac_scw; /* write syscalls */ > > > read_char, > write_char, > read_syscalls, > write_syscalls,
Mmm, those are from task_struct.
Regards, - jay
> > perhaps (esp. if you're dropping the ac_ prefix) ? > > >>+ /* CSA accounting fields end */ >> }; > > > >> >> >>Index: linux/init/Kconfig >>=================================================================== >>--- linux.orig/init/Kconfig 2006-07-31 11:38:21.000000000 -0700 >>+++ linux/init/Kconfig 2006-07-31 11:47:23.214410140 -0700 >>@@ -182,6 +182,31 @@ config TASK_DELAY_ACCT >> >> Say N if unsure. >> >>+config CSA_ACCT >>+ bool "Enable CSA Job Accounting (EXPERIMENTAL)" >>+ depends on TASKSTATS >>+ help >>+ Comprehensive System Accounting (CSA) provides job level >>+ accounting of resource usage. The accounting records are >>+ written by the kernel into a file. CSA user level scripts >>+ and commands process the binary accounting records and >>+ combine them by job identifier within system boot uptime >>+ periods. These accounting records are then used to produce >>+ reports and charge fees to users. >>+ >>+ Say Y here if you want job level accounting to be compiled >>+ into the kernel. Say M here if you want the writing of >>+ accounting records portion of this feature to be a loadable >>+ module. Say N here if you do not want job level accounting >>+ (the default). > > > The description above is tied to jobs which don't exist in the kernel. > There's no dependency of CSA on kernel-visible jobs anymore, right ? > Perhaps the blurb can clarify that jobs are defined in user space. > > >>+ >>+ The CSA commands and scripts package needs to be installed >>+ to process the CSA accounting records. See >>+ http://oss.sgi.com/projects/csa for further information >>+ about CSA and download instructions for the CSA commands >>+ package and documentation. >>+ >>+ >> config SYSCTL >> bool "Sysctl support" if EMBEDDED >> default y >>Index: linux/kernel/Makefile >>=================================================================== >>--- linux.orig/kernel/Makefile 2006-07-31 11:38:21.000000000 -0700 >>+++ linux/kernel/Makefile 2006-07-31 11:47:23.218410191 -0700 >>@@ -50,6 +50,7 @@ obj-$(CONFIG_RCU_TORTURE_TEST) += rcutor >> obj-$(CONFIG_RELAY) += relay.o >> obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o >> obj-$(CONFIG_TASKSTATS) += taskstats.o >>+obj-$(CONFIG_CSA_ACCT) += csa.o >> >> ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y) >> # According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is >>Index: linux/kernel/csa.c >>=================================================================== >>--- /dev/null 1970-01-01 00:00:00.000000000 +0000 >>+++ linux/kernel/csa.c 2006-07-31 11:47:23.218410191 -0700 >>@@ -0,0 +1,46 @@ >>+/* >>+ * This file is subject to the terms and conditions of the GNU General Public >>+ * License. See the file "COPYING" in the main directory of this archive >>+ * for more details. >>+ * >>+ * Copyright (c) 2006 Silicon Graphics, Inc All Rights Reserved. >>+ */ >>+ >>+ >>+/* >>+ * CSA (Comprehensive System Accounting) >>+ * Job Accounting for Linux >>+ * >>+ * This header file contains the definitions needed for job >>+ * accounting. The kernel CSA accounting module code and all >>+ * user-level programs that try to write or process the binary job >>+ * accounting data must include this file. > > > Again, job dependency might need some clarification. > > >>+ * >>+ * This kernel header file and the csa.h in the csa userland source >>+ * rpm share same data struct declaration and #define's. Do not modify >>+ * one without modify the other one as well. The compatibility between >>+ * userland and the kernel is ensured by using the 'ah_revision' field >>+ * of struct achead. > > > Leftover from older documentation ? > > >>+ * >>+ */ >>+ >>+#include <linux/taskstats.h> >>+#include <linux/csa_kern.h> >>+#include <linux/sched.h> >>+ >>+void csa_add_tsk(struct taskstats *stats, struct task_struct *p) >>+{ >>+ stats->csa_revision = REV_CSA; >>+ 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->ac_minflt = p->min_flt; >>+ stats->ac_majflt = p->maj_flt; >>+ stats->ac_chr = p->rchar; >>+ stats->ac_chw = p->wchar; >>+ stats->ac_scr = p->syscr; >>+ stats->ac_scw = p->syscw; >>+} >>Index: linux/kernel/taskstats.c >>=================================================================== >>--- linux.orig/kernel/taskstats.c 2006-07-31 11:44:54.000000000 -0700 >>+++ linux/kernel/taskstats.c 2006-07-31 11:47:23.218410191 -0700 >>@@ -21,6 +21,7 @@ >> #include <linux/taskstats_kern.h> >> #include <linux/acct.h> >> #include <linux/delayacct.h> >>+#include <linux/csa_kern.h> >> #include <linux/cpumask.h> >> #include <linux/percpu.h> >> #include <net/genetlink.h> >>@@ -252,6 +253,9 @@ static int fill_pid(pid_t pid, struct ta >> /* fill in basic acct fields */ >> bacct_add_tsk(stats, tsk); >> >>+ /* fill in csa fields */ >>+ csa_add_tsk(stats, tsk); >>+ >> /* Define err: label here if needed */ >> put_task_struct(tsk); >> return rc; >>Index: linux/include/linux/csa_kern.h >>=================================================================== >>--- /dev/null 1970-01-01 00:00:00.000000000 +0000 >>+++ linux/include/linux/csa_kern.h 2006-07-31 11:47:23.218410191 -0700 >>@@ -0,0 +1,31 @@ >>+/* >>+ * This file is subject to the terms and conditions of the GNU General Public >>+ * License. See the file "COPYING" in the main directory of this archive >>+ * for more details. >>+ * >>+ * Copyright (c) 2006 Silicon Graphics, Inc All Rights Reserved. >>+ */ >>+ >>+#ifndef _CSA_KERN_H >>+#define _CSA_KERN_H >>+ >>+#ifdef CONFIG_CSA_ACCT >>+extern void csa_add_tsk(struct taskstats *, struct task_struct *); >>+#else >>+#define csa_add_tsk(x) do { } while (0) > > > This won't compile right...number of args differ. > > >>+#endif >>+ >>+/* >>+ * Record revision levels. >>+ * >>+ * These are incremented to indicate that a record's format has changed since >>+ * a previous release. >>+ * >>+ * History: 05000 The first rev in Linux >>+ * 06000 Major rework to clean up unused fields and features. >>+ * No binary compatibility with earlier rev. >>+ * 07000 Convert to taskstats interface >>+ */ >>+#define REV_CSA 07000 /* Kernel: CSA base record */ >>+ >>+#endif /* _CSA_KERN_H */ >> > >
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |