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 */ + __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 */ + __u64 ac_chr; /* bytes read */ + __u64 ac_chw; /* bytes written */ + __u64 ac_scr; /* read syscalls */ + __u64 ac_scw; /* write syscalls */ + /* 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 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 , 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. + * + * 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. + * + */ + +#include +#include +#include + +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 #include #include +#include #include #include #include @@ -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) +#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 */