task IO accounting: improve code readability
Put all i/o statistics in struct proc_io_accounting and use inline functions to initialize and increment statistics, removing a lot of single variable assignments. This also reduces the kernel size as following (with CONFIG_TASK_XACCT=y and CONFIG_TASK_IO_ACCOUNTING=y). text data bss dec hex filename 11651 0 0 11651 2d83 kernel/exit.o.before 11619 0 0 11619 2d63 kernel/exit.o.after 10886 132 136 11154 2b92 kernel/fork.o.before 10758 132 136 11026 2b12 kernel/fork.o.after 3082029 807968 4818600 8708597 84e1f5 vmlinux.o.before 3081869 807968 4818600 8708437 84e155 vmlinux.o.after Signed-off-by: Andrea Righi <righi.andrea@gmail.com> Acked-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
605ccb73f6
commit
5995477ab7
@@ -505,10 +505,7 @@ struct signal_struct {
|
||||
unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
|
||||
unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
|
||||
unsigned long inblock, oublock, cinblock, coublock;
|
||||
#ifdef CONFIG_TASK_XACCT
|
||||
u64 rchar, wchar, syscr, syscw;
|
||||
#endif
|
||||
struct task_io_accounting ioac;
|
||||
struct proc_io_accounting ioac;
|
||||
|
||||
/*
|
||||
* Cumulative ns of scheduled CPU time for dead threads in the
|
||||
@@ -1256,11 +1253,7 @@ struct task_struct {
|
||||
|
||||
unsigned long ptrace_message;
|
||||
siginfo_t *last_siginfo; /* For ptrace use. */
|
||||
#ifdef CONFIG_TASK_XACCT
|
||||
/* i/o counters(bytes read/written, #syscalls */
|
||||
u64 rchar, wchar, syscr, syscw;
|
||||
#endif
|
||||
struct task_io_accounting ioac;
|
||||
struct proc_io_accounting ioac;
|
||||
#if defined(CONFIG_TASK_XACCT)
|
||||
u64 acct_rss_mem1; /* accumulated rss usage */
|
||||
u64 acct_vm_mem1; /* accumulated virtual memory usage */
|
||||
@@ -2190,22 +2183,22 @@ extern long sched_group_rt_period(struct task_group *tg);
|
||||
#ifdef CONFIG_TASK_XACCT
|
||||
static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
|
||||
{
|
||||
tsk->rchar += amt;
|
||||
tsk->ioac.chr.rchar += amt;
|
||||
}
|
||||
|
||||
static inline void add_wchar(struct task_struct *tsk, ssize_t amt)
|
||||
{
|
||||
tsk->wchar += amt;
|
||||
tsk->ioac.chr.wchar += amt;
|
||||
}
|
||||
|
||||
static inline void inc_syscr(struct task_struct *tsk)
|
||||
{
|
||||
tsk->syscr++;
|
||||
tsk->ioac.chr.syscr++;
|
||||
}
|
||||
|
||||
static inline void inc_syscw(struct task_struct *tsk)
|
||||
{
|
||||
tsk->syscw++;
|
||||
tsk->ioac.chr.syscw++;
|
||||
}
|
||||
#else
|
||||
static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
|
||||
|
Reference in New Issue
Block a user