SSブログ

Fedora Core 3 Configuring my kernel [ぱそ関係]

Kernel をコンパイルできる環境があるなら、自分だけの Kernel を作ってみたいと思うのが人情。 ということで、作ってみた。

といっても、ちょっとしたパッチをあてて Kernel Config をいじったぐらいなのであんまり期待しないでネ。
---------------------------
●check currently using kernel modules.
時代の流れとは逆行するが、loadable module を static link に変更すれば、insmod の時間を省略することができる。(RAM展開の時間は長くなるけど)

マザーボードに付いてて起動に必要なデバイスは全部 static にリンクして、全然関係ないデバイスドライバは module も作らないようにする。

まずは、現状把握から。

[root@localhost drivers]# /sbin/lsmod
Module                  Size  Used by
parport_pc             28421  1
lp                     12489  0
parport                40201  2 parport_pc,lp
autofs4                26181  0
sunrpc                164485  1
pcmcia                 26465  4
ipt_REJECT              7105  1
ipt_state               1857  4
ip_conntrack           40601  1 ipt_state
iptable_filter          2881  1
ip_tables              19777  3 ipt_REJECT,ipt_state,iptable_filter
dm_mod                 59221  0
video                  15813  0
button                  6609  0
battery                 9285  0
ac                      4805  0
md5                     4161  1
ipv6                  259201  8
ohci1394               39129  0
ieee1394              309145  1 ohci1394
yenta_socket           21065  3
rsrc_nonstatic         10433  1 yenta_socket
pcmcia_core            47993  3 pcmcia,yenta_socket,rsrc_nonstatic
uhci_hcd               33497  0
hw_random               6101  0
i2c_i801                8653  0
i2c_core               21953  1 i2c_i801
snd_intel8x0           34049  2
snd_ac97_codec         71097  1 snd_intel8x0
snd_pcm_oss            51953  0
snd_mixer_oss          18241  2 snd_pcm_oss
snd_pcm                99657  3 snd_intel8x0,snd_ac97_codec,snd_pcm_oss
snd_timer              33093  1 snd_pcm
snd                    56741  8 snd_intel8x0,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
soundcore              10785  2 snd
snd_page_alloc          9669  2 snd_intel8x0,snd_pcm
8139too                29505  0
mii                     4929  1 8139too
floppy                 64753  0
sr_mod                 18917  0
ext3                  131145  1
jbd                    82777  1 ext3
aic7xxx               175641  0
sd_mod                 19265  0
scsi_mod              139817  3 sr_mod,aic7xxx,sd_mod
[root@localhost drivers]#

各 module が何か(ソース上のどれか、Kernel Config のどのあたりに関係在りそうか)というのは /sbin/modinf <module name> コマンドで調べることができる。

基本的に、フロッピー、IDE、ネットワーク、サウンド関係を static にした。
こちらが Static にリンクした Kernel での lsmod。

[root@mx3gk ~]# /sbin/lsmod
Module                  Size  Used by
ohci1394               34584  0
ieee1394              305848  1 ohci1394
tsdev                   7616  0
aic7xxx               170680  0
sd_mod                 18576  0
scsi_mod               92388  2 aic7xxx,sd_mod
[root@mx3gk ~]#

---------------------------
●CPU の種類も調べておこう。
Fedora Core の設定は、intel のみではなく AMD をはじめとする互換CPUを全部サポートすることになっている。 この辺も絞れそう。

[root@localhost linux-2.6.11]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 3
cpu MHz         : 868.880
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips        : 1724.41

[root@localhost linux-2.6.11]#

いらないかも知れないけどPCIデバイスの一覧。

[root@mx3gk ~]# /sbin/lspci
00:00.0 Host bridge: Intel Corp. 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 02)
00:01.0 PCI bridge: Intel Corp. 82815 815 Chipset AGP Bridge (rev 02)
00:1e.0 PCI bridge: Intel Corp. 82801AA PCI Bridge (rev 02)
00:1f.0 ISA bridge: Intel Corp. 82801AA ISA Bridge (LPC) (rev 02)
00:1f.1 IDE interface: Intel Corp. 82801AA IDE (rev 02)
00:1f.2 USB Controller: Intel Corp. 82801AA USB (rev 02)
00:1f.3 SMBus: Intel Corp. 82801AA SMBus (rev 02)
00:1f.5 Multimedia audio controller: Intel Corp. 82801AA AC'97 Audio (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev a1)
02:09.0 SCSI storage controller: Adaptec AIC-7892A U160/m (rev 02)
02:0a.0 Multimedia video controller: Sony Corporation: Unknown device 8087 (rev 01)
02:0b.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 80)
02:0b.1 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 80)
02:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
02:0e.0 FireWire (IEEE 1394): Texas Instruments FireWire Controller (rev 01)
07:00.0 Communication controller: Agere Systems (former Lucent Microelectronics) LT WinModem
[root@mx3gk ~]#

もっといらないかもしれないけど、USBデバイスの一覧

[root@mx3gk ~]# /sbin/lsusb
Bus 001 Device 004: ID 046d:c030 Logitech, Inc. iFeel Mouse
Bus 001 Device 003: ID 054c:0036 Sony Corp.
Bus 001 Device 002: ID 050f:0003 KC Technology, Inc. KC82C160S Hub
Bus 001 Device 001: ID 0000:0000
[root@mx3gk ~]#


------------------------------
●ACPI の Disable
古いマシン(VAIO MX3GK)なので、Windows XP で ACPI 対応でうごくとはいえ、CPU の動作周波数が動的に切り替わるわけじゃないし、ACPI モードでも Suspend がうまく動かなかった(原因のひとつは AIC7xxx SCSI カードのドライバにあるらしい)ので、あまりACPI のメリットは感じられない。

一応、APM もサポートしてるっぽいので、APM + PnP に切り替えておこう。

------------------------------
●linux-tiny patch
http://www.selenic.com/tiny-about/
一応、組込み関係が発端らしいが、別にデスクトップマシンにあててもいいんじゃない? ということで、あんまり動作に悪影響を与えないと思われる範囲であててみた。

broken-out っていう、項目ごとにパッチが分れてる方をダウンロードして、series っていうファイルをみながら上から順番にパッチをあてていく。 最初に80個ぐらいあるパッチをみたときはどれからあてるのか途方に暮れたが、順番って英語で series なのさという閃きにより解決。

あてたのは
tiny stuff
Unconditional bits
build options
measurement bits
trimmed debugging support
のあたり。

[2.6.11-1.27FC での Update]
net 関係はなんかパフォーマンスがもの凄く落ちそうな気がしたのでパス。
あと Unconditional の 06-crypt もわけわからんのでパス。
trimmed debugging support の tiny-panic と no-panic も手パッチがめんどくさいのでパス。

  patch -p1 < 2.6.11-tiny1/core-small.patch
  patch -p1 < 2.6.11-tiny1/pid-max.patch
  patch -p1 < 2.6.11-tiny1/user-hash.patch
  patch -p1 < 2.6.11-tiny1/futex-queues.patch
  patch -p1 < 2.6.11-tiny1/tvec_bases.patch
  patch -p1 < 2.6.11-tiny1/con_buf.patch

  patch -p1 < 2.6.11-tiny1/small-8023.patch
  patch -p1 < 2.6.11-tiny1/tg3-oops.patch
  patch -p1 < 2.6.11-tiny1/namei-inlines.patch
  patch -p1 < 2.6.11-tiny1/buffer-inlines.patch
  patch -p1 < 2.6.11-tiny1/fs_open-inlines.patch
  patch -p1 < 2.6.11-tiny1/inode-inlines.patch
  patch -p1 < 2.6.11-tiny1/ext2namei-inlines.patch
  patch -p1 < 2.6.11-tiny1/fslocks-inline.patch

  patch -p1 < 2.6.11-tiny1/tiny-cflags.patch

  patch -p1 < 2.6.11-tiny1/kmalloc-accounting.patch
  patch -p1 < 2.6.11-tiny1/audit-bootmem.patch
  patch -p1 < 2.6.11-tiny1/bloat-o-meter.patch
  patch -p1 < 2.6.11-tiny1/deprecate-inline.patch
  patch -p1 < 2.6.11-tiny1/func-size.patch

  patch -p1 < 2.6.11-tiny1/no-doublefault.patch
  patch -p1 < 2.6.11-tiny1/kill-printk.patch
  patch -p1 < 2.6.11-tiny1/nobug.patch
  patch -p1 < 2.6.11-tiny1/no-elf-core.patch
  patch -p1 < 2.6.11-tiny1/no-kcore.patch

  patch -p1 < 2.6.11-tiny1/change-hz.patch
  patch -p1 < 2.6.11-tiny1/cpu-support.patch

といっても、遊びで enable にしてみたけど、遅くて Kernel としては問題ありな測定関係などは本番では disable。 printk を削除するヤツとか、HZ マクロを変更できるやつは便利ですな。

HZ マクロは kernel.org のソースは 100 (10msんごとにプロセスを切り替える)だけど、カジュアルOS でほとんど決まった少数のアプリしか動かさないのにそんなに頻繁にプロセスを切り替えるのって無駄じゃん? Windows だって 80ms ごとぐらいでしかプロセス切り替えてないんだし。 ということで、HZ を100より小さな値に設定する。

10 に設定しようとしたが、32 以上でないとコンパイル時にエラーが出るらしい。
50 だとゼロ割り算でカーネルパニックになる(コンパイル時にいっぱいワーニングが出る)。
40 だとコンパイルエラーが出るが、kernel/dump.c の udelay(1000000/HZ) の所のエラーは mdelay(1000/HZ)に変更。(そんなのでいいのか?)
ということで、とりあえず40にした。これでも25ms毎にプロセスを切りかえる。

そのほか、Undefined function が出たら基本的にからっぽの関数をついかして誤魔化す。

●/proc/config.gz をenable
忘れ易いので、どんな kernel config にしたかは、kernel さん本人におぼえておいてもらいましょう。

ちなみに、起動してる kernel の設定をみるときは、

zcat /proc/config.gz | less


------------------------------
●/boot/grub/grub.conf の設定#1 bootchart
ブートチャートっていう kernel の起動のようすを視覚化して把握しやすくしてくれるツールがある。
http://www.bootchart.org/
で、これをインストールしていろんなパターンでconfig した kernel の起動時間を測定。

bootchart の設定は、インストールスクリプトでインストールして、kernel のコマンドラインオプションにinit=/sbin/bootchartd を追加するだけなのでやってみそ。
/var/log/bootchart.tgz ファイルを http://www.bootchart.org/download.html で upload すると png ファイル(チャート)がダウンロードできる。

●grub の設定#2 rhgb
Fedora Core はデフォルトで rhgb(Redhat Graphical Boot)を使うようになっているが、別にそんなにゴージャスじゃなくてもいいので、disable。

------------------------------
●ファイルシステム側の設定変更

このへんも @ITとかを眺めながらいろいろいじってみた。

1. /etc/inittab
do not use virtual consoles. delete mingetty
@ITネタ。

2. application - settings - network
hostname を付ける。 別に最適化じゃないけど、いつまでも localhost っていうのも芸が無いかなと思って、mx3gk という名前をつけた。。。やっぱり芸がない。

3. disable services
acpid, cpuspeed, lm_sensors, mdmonitor, ntpd,
kudzu, mDNSResponder, irqbalance, isdn, etc.,...
kudzu の話は @ITにものってますな。

[root@mx3gk Desktop]# /sbin/chkconfig --list
kudzu           0:off   1:off   2:off   3:on    4:on    5:off   6:off
rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off
tux             0:off   1:off   2:off   3:off   4:off   5:off   6:off
psacct          0:off   1:off   2:off   3:off   4:off   5:off   6:off
cups-config-daemon      0:off   1:off   2:off   3:on    4:on    5:on    6:off
smartd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcsvcgssd      0:off   1:off   2:off   3:on    4:on    5:on    6:off
diskdump        0:off   1:off   2:off   3:off   4:off   5:off   6:off
netdump         0:off   1:off   2:off   3:off   4:off   5:off   6:off
snmpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
irda            0:off   1:off   2:off   3:off   4:off   5:off   6:off
nscd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off
canna           0:off   1:off   2:on    3:on    4:on    5:on    6:off
pcmcia          0:off   1:off   2:on    3:on    4:on    5:on    6:off
vncserver       0:off   1:off   2:off   3:off   4:off   5:off   6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
squid           0:off   1:off   2:off   3:off   4:off   5:off   6:off
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off
saslauthd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
vsftpd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
spamassassin    0:off   1:off   2:off   3:off   4:off   5:off   6:off
portmap         0:off   1:off   2:off   3:on    4:on    5:on    6:off
autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off
netplugd        0:off   1:off   2:off   3:off   4:off   5:off   6:off
ypbind          0:off   1:off   2:off   3:off   4:off   5:off   6:off
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
winbind         0:off   1:off   2:off   3:off   4:off   5:off   6:off
readahead_early 0:off   1:off   2:off   3:off   4:off   5:on    6:off
netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
lm_sensors      0:off   1:off   2:on    3:on    4:on    5:off   6:off
mdmonitor       0:off   1:off   2:on    3:on    4:on    5:off   6:off
xfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpd            0:off   1:off   2:off   3:on    4:off   5:off   6:off
yum             0:off   1:off   2:off   3:off   4:off   5:off   6:off
nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
snmptrapd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
mDNSResponder   0:off   1:off   2:off   3:on    4:on    5:off   6:off
nifd            0:off   1:off   2:off   3:on    4:on    5:on    6:off
acpid           0:off   1:off   2:off   3:on    4:on    5:off   6:off
iiim            0:off   1:off   2:on    3:on    4:on    5:on    6:off
dc_server       0:off   1:off   2:off   3:off   4:off   5:off   6:off
gpm             0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcidmapd       0:off   1:off   2:off   3:on    4:on    5:on    6:off
cups            0:off   1:off   2:on    3:on    4:on    5:on    6:off
isdn            0:off   1:off   2:on    3:on    4:on    5:off   6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
FreeWnn         0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
bluetooth       0:off   1:off   2:off   3:off   4:off   5:off   6:off
messagebus      0:off   1:off   2:off   3:on    4:on    5:on    6:off
rhnsd           0:off   1:off   2:off   3:on    4:on    5:on    6:off
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
cpuspeed        0:off   1:on    2:on    3:on    4:on    5:off   6:off
microcode_ctl   0:off   1:off   2:off   3:off   4:off   5:off   6:off
readahead       0:off   1:off   2:off   3:off   4:off   5:on    6:off
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:off   3:on    4:on    5:off   6:off
smb             0:off   1:off   2:off   3:off   4:off   5:off   6:off
apmd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
mdmpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
dc_client       0:off   1:off   2:off   3:off   4:off   5:off   6:off
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
xinetd based services:
        time-udp:       off
        daytime:        off
        daytime-udp:    off
        cups-lpd:       off
        echo:   off
        kshell: off
        klogin: off
        telnet: off
        tftp:   off
        rsync:  off
        time:   off
        chargen-udp:    off
        krb5-telnet:    off
        dbskkd-cdb:     off
        chargen:        off
        gssftp: off
        eklogin:        off
        echo-udp:       off


4. noauto option to /etc/fstab
必須のDisk は起動時にマウントしてもらわないと困るが、Windows が入ってる方の Disk とか、必要なときにマウントすればいいかなっていうドライブには noauto オプションを付けて、起動時にはマウントしないようにした。

5. rename klogd
top コマンドでみていると、klogd っていうやつがやたらと CPU パワーをくってるみたいなのでさくっと mv /sbin/klogd /sbin/klogd.bak した。
サーバーじゃないしログなんか見ないもん。

------------------------------
●ということで、Kernel config の結果

Kernel Config 20050519-4
http://blog.so-net.ne.jp/yoga/kc-20050519-4
大きいくてブログに一緒にでてくると邪魔なので別にしました。 下書き直リンでお楽しみ下さい。

起動時間が 1分50秒 → 49秒に短縮できたので、一応満足。
ちなみに、SELinux を Disable すると40秒。

こちらが、証拠 PNG。(っていうほどのものでもないけど)


nice!(0) 
共通テーマ:パソコン・インターネット

nice! 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。