lkml.org 
[lkml]   [2006]   [Jul]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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/

    \
     
     \ /
      Last update: 2006-08-01 00:07    [W:2.679 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site