diff options
author | Jay Lan <jlan@sgi.com> | 2006-10-01 02:29:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-01 03:39:29 -0400 |
commit | db5fed26b2e0beed939b773dd5896077a1794d65 (patch) | |
tree | be7630821744aae53b2431383ef0b304a87f1268 /kernel/tsacct.c | |
parent | 8f0ab5147951267134612570604cf8341901a80c (diff) |
[PATCH] csa accounting taskstats update
ChangeLog:
Feedbacks from Andrew Morton:
- define TS_COMM_LEN to 32
- change acct_stimexpd field of task_struct to be of
cputime_t, which is to be used to save the tsk->stime
of last timer interrupt update.
- a new Documentation/accounting/taskstats-struct.txt
to describe fields of taskstats struct.
Feedback from Balbir Singh:
- keep the stime of a task to be zero when both stime
and utime are zero as recoreded in task_struct.
Misc:
- convert accumulated RSS/VM from platform dependent
pages-ticks to MBytes-usecs in the kernel
Cc: Shailabh Nagar <nagar@watson.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Jes Sorensen <jes@sgi.com>
Cc: Chris Sturtivant <csturtiv@sgi.com>
Cc: Tony Ernst <tee@sgi.com>
Cc: Guillaume Thouvenin <guillaume.thouvenin@bull.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/tsacct.c')
-rw-r--r-- | kernel/tsacct.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/kernel/tsacct.c b/kernel/tsacct.c index 47c71daa416f..db443221ba5b 100644 --- a/kernel/tsacct.c +++ b/kernel/tsacct.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/tsacct_kern.h> | 21 | #include <linux/tsacct_kern.h> |
22 | #include <linux/acct.h> | 22 | #include <linux/acct.h> |
23 | #include <linux/jiffies.h> | ||
23 | 24 | ||
24 | 25 | ||
25 | #define USEC_PER_TICK (USEC_PER_SEC/HZ) | 26 | #define USEC_PER_TICK (USEC_PER_SEC/HZ) |
@@ -62,33 +63,35 @@ void bacct_add_tsk(struct taskstats *stats, struct task_struct *tsk) | |||
62 | stats->ac_stime = cputime_to_msecs(tsk->stime) * USEC_PER_MSEC; | 63 | stats->ac_stime = cputime_to_msecs(tsk->stime) * USEC_PER_MSEC; |
63 | stats->ac_minflt = tsk->min_flt; | 64 | stats->ac_minflt = tsk->min_flt; |
64 | stats->ac_majflt = tsk->maj_flt; | 65 | stats->ac_majflt = tsk->maj_flt; |
65 | /* Each process gets a minimum of one usec cpu time */ | ||
66 | if ((stats->ac_utime == 0) && (stats->ac_stime == 0)) { | ||
67 | stats->ac_stime = 1; | ||
68 | } | ||
69 | 66 | ||
70 | strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm)); | 67 | strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm)); |
71 | } | 68 | } |
72 | 69 | ||
73 | 70 | ||
74 | #ifdef CONFIG_TASK_XACCT | 71 | #ifdef CONFIG_TASK_XACCT |
72 | |||
73 | #define KB 1024 | ||
74 | #define MB (1024*KB) | ||
75 | /* | 75 | /* |
76 | * fill in extended accounting fields | 76 | * fill in extended accounting fields |
77 | */ | 77 | */ |
78 | void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) | 78 | void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) |
79 | { | 79 | { |
80 | stats->acct_rss_mem1 = p->acct_rss_mem1; | 80 | /* convert pages-jiffies to Mbyte-usec */ |
81 | stats->acct_vm_mem1 = p->acct_vm_mem1; | 81 | stats->coremem = jiffies_to_usecs(p->acct_rss_mem1) * PAGE_SIZE / MB; |
82 | stats->virtmem = jiffies_to_usecs(p->acct_vm_mem1) * PAGE_SIZE / MB; | ||
82 | if (p->mm) { | 83 | if (p->mm) { |
83 | stats->hiwater_rss = p->mm->hiwater_rss; | 84 | /* adjust to KB unit */ |
84 | stats->hiwater_vm = p->mm->hiwater_vm; | 85 | stats->hiwater_rss = p->mm->hiwater_rss * PAGE_SIZE / KB; |
86 | stats->hiwater_vm = p->mm->hiwater_vm * PAGE_SIZE / KB; | ||
85 | } | 87 | } |
86 | stats->read_char = p->rchar; | 88 | stats->read_char = p->rchar; |
87 | stats->write_char = p->wchar; | 89 | stats->write_char = p->wchar; |
88 | stats->read_syscalls = p->syscr; | 90 | stats->read_syscalls = p->syscr; |
89 | stats->write_syscalls = p->syscw; | 91 | stats->write_syscalls = p->syscw; |
90 | } | 92 | } |
91 | 93 | #undef KB | |
94 | #undef MB | ||
92 | 95 | ||
93 | /** | 96 | /** |
94 | * acct_update_integrals - update mm integral fields in task_struct | 97 | * acct_update_integrals - update mm integral fields in task_struct |
@@ -97,8 +100,8 @@ void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) | |||
97 | void acct_update_integrals(struct task_struct *tsk) | 100 | void acct_update_integrals(struct task_struct *tsk) |
98 | { | 101 | { |
99 | if (likely(tsk->mm)) { | 102 | if (likely(tsk->mm)) { |
100 | long delta = | 103 | long delta = cputime_to_jiffies( |
101 | cputime_to_jiffies(tsk->stime) - tsk->acct_stimexpd; | 104 | cputime_sub(tsk->stime, tsk->acct_stimexpd)); |
102 | 105 | ||
103 | if (delta == 0) | 106 | if (delta == 0) |
104 | return; | 107 | return; |