From: Jay Lan <jlan@sgi.com>
To: Andrew Morton <akpm@osdl.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
Shailabh Nagar <nagar@watson.ibm.com>,
Balbir Singh <balbir@in.ibm.com>, Jes Sorensen <jes@sgi.com>,
Chris Sturtivant <csturtiv@sgi.com>, Tony Ernst <tee@sgi.com>
Subject: [patch 1/3] add basic accounting fields to taskstats
Date: Mon, 31 Jul 2006 12:20:15 -0700 [thread overview]
Message-ID: <44CE57EF.2090409@sgi.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 166 bytes --]
This patch adds a few basic accounting fields to the taskstat
struct and a bacct_add_tsk() routine to fill the data on
exit.
Signed-off-by: Jay Lan <jlan@sgi.com>
[-- Attachment #2: taskstats-acct.patch --]
[-- Type: text/plain, Size: 4560 bytes --]
Index: linux/include/linux/taskstats.h
===================================================================
--- linux.orig/include/linux/taskstats.h 2006-07-31 11:38:54.132326042 -0700
+++ linux/include/linux/taskstats.h 2006-07-31 11:42:10.634609610 -0700
@@ -2,6 +2,7 @@
*
* Copyright (C) Shailabh Nagar, IBM Corp. 2006
* (C) Balbir Singh, IBM Corp. 2006
+ * (C) Jay Lan, SGI, 2006
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2.1 of the GNU Lesser General Public License
@@ -29,13 +30,18 @@
* c) add new fields after version comment; maintain 64-bit alignment
*/
-#define TASKSTATS_VERSION 1
+#define TASKSTATS_VERSION 2
+#define TASK_COMM_LEN 16
struct taskstats {
/* Version 1 */
__u16 version;
- __u16 padding[3]; /* Userspace should not interpret the padding
+ __u8 ac_flag; /* Record flags */
+ __u8 ac_nice; /* task_nice */
+ __u8 ac_sched; /* Scheduling discipline */
+ __u8 ac_pad;
+ __u16 padding; /* Userspace should not interpret the padding
* field which can be replaced by useful
* fields if struct taskstats is extended.
*/
@@ -88,6 +94,19 @@ struct taskstats {
__u64 cpu_run_virtual_total;
/* Delay accounting fields end */
/* version 1 ends here */
+
+ /* Basic Accounting Fields start */
+ char ac_comm[TASK_COMM_LEN]; /* Command name */
+ __u32 ac_exitcode; /* Exit status */
+ __u32 ac_uid; /* User ID */
+ __u32 ac_gid; /* Group ID */
+ __u32 ac_pid; /* Process ID */
+ __u32 ac_ppid; /* Parent process ID */
+ __u32 ac_btime; /* Begin time [sec sinec 1970] */
+ __u64 ac_etime; /* Elapsed time [usec] */
+ __u64 ac_utime; /* User CPU time [usec] */
+ __u64 ac_stime; /* SYstem CPU time [usec] */
+ /* Basic Accounting Fields end */
};
Index: linux/kernel/taskstats.c
===================================================================
--- linux.orig/kernel/taskstats.c 2006-07-31 11:38:54.160326367 -0700
+++ linux/kernel/taskstats.c 2006-07-31 11:44:54.952523699 -0700
@@ -3,6 +3,7 @@
*
* Copyright (C) Shailabh Nagar, IBM Corp. 2006
* (C) Balbir Singh, IBM Corp. 2006
+ * (C) Jay Lan, SGI, 2006
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,6 +19,7 @@
#include <linux/kernel.h>
#include <linux/taskstats_kern.h>
+#include <linux/acct.h>
#include <linux/delayacct.h>
#include <linux/cpumask.h>
#include <linux/percpu.h>
@@ -172,6 +174,53 @@ static void send_cpu_listeners(struct sk
up_write(&listeners->sem);
}
+
+#define USEC_PER_TICK (USEC_PER_SEC/HZ)
+/*
+ * fill in basic accounting fields
+ */
+static void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk)
+{
+ u64 run_time;
+ struct timespec uptime;
+
+ /* calculate run_time in nsec */
+ do_posix_clock_monotonic_gettime(&uptime);
+ run_time = (u64)uptime.tv_sec*NSEC_PER_SEC + uptime.tv_nsec;
+ run_time -= (u64)current->group_leader->start_time.tv_sec * NSEC_PER_SEC
+ + current->group_leader->start_time.tv_nsec;
+ do_div(run_time, NSEC_PER_USEC); /* rebase run_time to usec */
+ stats->ac_etime = run_time;
+ do_div(run_time, USEC_PER_SEC); /* rebase run_time to sec */
+ stats->ac_btime = xtime.tv_sec - run_time;
+ if (thread_group_leader(tsk)) {
+ stats->ac_exitcode = tsk->exit_code;
+ if (tsk->flags & PF_FORKNOEXEC)
+ stats->ac_flag |= AFORK;
+ }
+ if (tsk->flags & PF_SUPERPRIV)
+ stats->ac_flag |= ASU;
+ if (tsk->flags & PF_DUMPCORE)
+ stats->ac_flag |= ACORE;
+ if (tsk->flags & PF_SIGNALED)
+ stats->ac_flag |= AXSIG;
+ stats->ac_nice = task_nice(tsk);
+ stats->ac_sched = tsk->policy;
+ stats->ac_uid = tsk->uid;
+ stats->ac_gid = tsk->gid;
+ stats->ac_pid = tsk->pid;
+ stats->ac_ppid = (tsk->parent) ? tsk->parent->pid : 0;
+ stats->ac_utime = tsk->utime * USEC_PER_TICK;
+ stats->ac_stime = tsk->stime * USEC_PER_TICK;
+ /* Each process gets a minimum of a half tick cpu time */
+ if ((stats->ac_utime == 0) && (stats->ac_stime == 0)) {
+ stats->ac_stime = USEC_PER_TICK/2;
+ }
+
+ strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm));
+}
+
+
static int fill_pid(pid_t pid, struct task_struct *pidtsk,
struct taskstats *stats)
{
@@ -200,6 +249,9 @@ static int fill_pid(pid_t pid, struct ta
delayacct_add_tsk(stats, tsk);
stats->version = TASKSTATS_VERSION;
+ /* fill in basic acct fields */
+ bacct_add_tsk(stats, tsk);
+
/* Define err: label here if needed */
put_task_struct(tsk);
return rc;
next reply other threads:[~2006-07-31 19:20 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-31 19:20 Jay Lan [this message]
2006-07-31 20:23 ` [patch 1/3] add basic accounting fields to taskstats Shailabh Nagar
2006-07-31 21:50 ` Jay Lan
2006-08-01 14:24 ` Balbir Singh
2006-08-01 21:51 ` Jay Lan
2006-08-02 15:31 ` Shailabh Nagar
2006-08-02 17:17 ` Balbir Singh
2006-08-02 17:37 ` Shailabh Nagar
2006-08-02 21:09 ` Andrew Morton
2006-08-02 23:47 ` Jay Lan
2006-08-03 3:02 ` Balbir Singh
2006-08-07 21:23 ` Jay Lan
2006-08-08 5:22 ` Balbir Singh
2006-08-08 16:40 ` Jay Lan
-- strict thread matches above, loose matches on Subject: below --
2006-08-08 14:57 Al Boldi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44CE57EF.2090409@sgi.com \
--to=jlan@sgi.com \
--cc=akpm@osdl.org \
--cc=balbir@in.ibm.com \
--cc=csturtiv@sgi.com \
--cc=jes@sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nagar@watson.ibm.com \
--cc=tee@sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).