Re: [patch 2/3] add CSA accounting to taskstats

From: Jay Lan
Date: Mon Jul 31 2006 - 18:11:11 EST


Shailabh Nagar wrote:
Jay Lan wrote:

Sorry, my last reply was not complete.



<snip>



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.

Will redo this part.



+
+ 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@xxxxxxxxxxxxxxxx>, 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 ?

Will redo the above two sections.



+ *
+ */
+
+#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.

Sorry i did not catch this one. Thanks!

Regards,
- jay




+#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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/