昔、システム負荷について調べていたとき、
psコマンドのSTATがD(割り込み不可能なスリープ状態)のプロセスを
減らすことができれば、システム負荷を下げられるはず。
と考えて、いろいろやってました。
etchの頃は、
STAT が D のプロセスがあった場合、WCHANにどのカーネル関数でスリープ
しているか表示されていたと思います。
ところが、lennyでは STAT が D になっても WCHAN は
空白のままです。
# ps lax
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
:
4 0 29464 28860 20 0 4240 1280 - D+ pts/1 0:00 smartctl --all -d ata /dev/sdb
これはカーネルのバージョンがあがったからなのでしょうか?
それとも、私が WCHAN について誤解しているのでしょうか?
環境は以下の通り、lenny(stable)の最新にしているつもりです。
# uname -a
Linux dimension8300 2.6.26-2-686 #1 SMP Sun Jun 21 04:57:38 UTC 2009 i686 GNU/Linux
# dpkg -l linux-image-2.6.26-2-686
:
ii linux-image-2.6.26-2-686 2.6.26-17 Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
# dpkg --search `which ps`
procps: /bin/ps
# dpkg -l procps
:
ii procps 1:3.2.7-11 /proc file system utilities
--
goungoun <gou...@gmail.com>
http://goungoun.dip.jp/app/
以下に従って、
Measuring Linux Latency With LatencyTOP On Ubuntu 8.10 And Debian Lenny
http://www.howtoforge.org/measuring-linux-latency-with-latencytop-on-ubuntu-8.10-and-debian-lenny
CONFIG_LATENCYTOP=y でカーネル作り直しすると、
lsのWCHANにいろいろと表示されるようになりました。
config の違いを貼っておきます。
/boot$ diff config-2.6.26-2-686 config-2.6.26-custom
3,4c3,4
< # Linux kernel version: 2.6.26
< # Sun Jun 21 03:37:11 2009
---
> # Linux kernel version: 2.6.26-custom
> # Sun Jul 26 14:56:39 2009
112c112
< # CONFIG_KALLSYMS_ALL is not set
---
> CONFIG_KALLSYMS_ALL=y
4001c4001
< # CONFIG_SCHEDSTATS is not set
---
> CONFIG_SCHEDSTATS=y
4013a4014
> CONFIG_STACKTRACE=y
4022c4023
< # CONFIG_FRAME_POINTER is not set
---
> CONFIG_FRAME_POINTER=y
4027c4028
< # CONFIG_LATENCYTOP is not set
---
> CONFIG_LATENCYTOP=y