Messages in this thread | | | Date | Sun, 25 Jan 2004 19:29:30 +0100 | From | Lutz Vieweg <> | Subject | Is there a way to keep the 2.6 kjournald from writing to idle disks? (to allow spin-downs) |
| |
Hi everyone,
I run a server that usually doesn't have to do anything on the local filesystems, it just needs to answer some requests and perform some computations in RAM.
So I use the "hdparm -S 123" parameter setting to keep the (IDE) system disk from spinning unneccessarily.
Alas, since an upgrade to kernel 2.6 and ext3 filesystem, I cannot find a way to let the harddisk spin down - I found out that "kjournald" writes a few blocks every few seconds.
As I wouldn't like to downgrade to ext2: Is there any way to keep the 2.6 kjournald from writing to idle disks?
I cannot see a good reason why kjournald would write when there are no dirty buffers - but still it does.
Regards,
Lutz Vieweg
BTW: I used the following script to find the source of the write operations, just start it in one terminal, do a "sync" in another, then say "hdparm -y /dev/hda" and you can see that immediately or a few seconds later kjournald will enter the "D" state and wake up when the disk has spun up.
------------------------------------------------------------------------------------- #!/usr/bin/tclsh
cd /proc
set stat_arr { pid comm state ppid process_group, session tty_nr tty_pgrp flags min_flt cmin_flt maj_flt cmaj_flt utime stime cutime cstime priority nice num_threads it_real_value start_time vsize rss RLIMIT_RSS start_code end_code start_stack esp eip pending_signals blocked_sigs sigign sigcatch wchan nswap cnswap exit_signal task_cpu rt_priorit policy }
proc scan_stat {_pids _dat} { upvar $_dat dat upvar $_pids pids global stat_arr
set pids [lsort -integer [glob {[0-9]*}]]
foreach pid $pids { set in [open "$pid/stat" "r"] set l [gets $in] close $in
set a [split $l " "]
foreach x $a n $stat_arr { set dat($pid,$n) $x } } }
#puts [array get dat]
array set dat {} set pids {}
scan_stat pids dat
while {1} { after 1000
array set new_dat {} set new_pids {}
scan_stat new_pids new_dat
foreach pid $new_pids { if {$pid != [pid]} { if {![info exists dat($pid,pid)]} { puts "new process $pid $new_dat($pid,comm)" } else { set somechange 0 foreach a $stat_arr { if {$new_dat($pid,$a) != $dat($pid,$a)} { puts "$pid $new_dat($pid,comm) attribute '$a' from $dat($pid,$a) to $new_dat($pid,$a)" set somechange 1 } } if {$somechange} { puts "" } } } }
array set dat {} array set dat [array get new_dat] set pids $new_pids } -------------------------------------------------------------------------------------
- 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/
| |