SMP iowait stats
Subsystems (3)
PATCH 1/7 SMP iowait stats
This patch provides qualitatively correct iowait time accounting on SMP by using per-cpu counters. Detailed dumps of how the reports have been improved by this patch can be found in prior postings.
drivers/block/ll_rw_blk.c | 22 ------------------- fs/proc/proc_misc.c | 6 ++--- include/linux/blkdev.h | 5 ---- include/linux/sched.h | 3 ++ kernel/sched.c | 51 ++++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 53 insertions(+), 34 deletions(-)
drivers/block/ll_rw_blk.c renamed from drivers/block/ll_rw_blk.c~iowait-accounting-fix +0 -22
@@ -56,7 +56,6 @@ static int queue_nr_requests;static int batch_requests;unsigned long blk_max_low_pfn, blk_max_pfn; -atomic_t nr_iowait_tasks =ATOMIC_INIT (0 );int blk_nohighio =0 ; static struct congestion_state {
@@ -115,27 +114,6 @@ static void set_queue_congested(request_atomic_inc (&congestion_states[rw].nr_congested_queues); } -/* -* This task is about to go to sleep on IO. Increment nr_iowait_tasks so -* that process accounting knows that this is a task in IO wait state. -* -* But don't do that if it is a deliberate, throttling IO wait (this task -* has set its backing_dev_info: the queue against which it should throttle) -*/ -void io_schedule (void ) -{ -atomic_inc (&nr_iowait_tasks); -schedule (); -atomic_dec (&nr_iowait_tasks); -} - -void io_schedule_timeout (long timeout) -{ -atomic_inc (&nr_iowait_tasks); -schedule_timeout (timeout); -atomic_dec (&nr_iowait_tasks); -} -/** * blk_get_backing_dev_info - get the address of a queue's backing_dev_info * @dev: device
fs/proc/proc_misc.c renamed from fs/proc/proc_misc.c~iowait-accounting-fix +3 -3
@@ -372,7 +372,7 @@ static int kstat_read_proc(char *page, cjiffies_to_clock_t (kstat_cpu (i).cpustat.nice),jiffies_to_clock_t (kstat_cpu (i).cpustat.system),jiffies_to_clock_t (kstat_cpu (i).cpustat.idle), - jiffies_to_clock_t(kstat_cpu(i).cpustat.idle)); + jiffies_to_clock_t(kstat_cpu(i).cpustat.iowait)); } len +=sprintf (page + len,"intr %u" , sum);
@@ -406,12 +406,12 @@ static int kstat_read_proc(char *page, c"btime %lu\n" "processes %lu\n" "procs_running %lu\n" -"procs_blocked %u\n" , +"procs_blocked %lu\n" ,nr_context_switches (), xtime.tv_sec - jif /HZ , total_forks,nr_running (), - atomic_read(&nr_iowait_tasks)); + nr_iowait());return proc_calc_metrics (page, start, off, count, eof, len); }
include/linux/blkdev.h renamed from include/linux/blkdev.h~iowait-accounting-fix +0 -5
@@ -467,9 +467,4 @@ static inline void put_dev_sector(Sector#endif - -extern atomic_t nr_iowait_tasks; -void io_schedule (void ); -void io_schedule_timeout (long timeout); -#endif
include/linux/sched.h renamed from include/linux/sched.h~iowait-accounting-fix +3 -0
@@ -90,6 +90,7 @@ extern int nr_threads;extern int last_pid;extern unsigned long nr_running (void );extern unsigned long nr_uninterruptible (void ); +extern unsigned long nr_iowait (void );#include <linux/time.h> #include <linux/param.h>
@@ -149,6 +150,8 @@ extern void show_trace(unsigned long *stextern void show_stack (unsigned long *stack);extern void show_regs (struct pt_regs *); +void io_schedule (void ); +void io_schedule_timeout (long timeout);extern void cpu_init (void );extern void trap_init (void );
kernel/sched.c renamed from kernel/sched.c~iowait-accounting-fix +47 -4
90 lines not on this page · raw message
.