ページへ戻る

− Links

 印刷 

Linux2.6で悩む :: Nest Of Hawk

xpwiki:Linux2.6で悩む

Gentoo Linuxな生活​/システム管理関連[1]

ページ内コンテンツ
  • 今更ねー
  • それではいってみましょう
    • 手順を確認
    • カーネルだけ実験君
    • 音源をALSAドライバに変更
  • 全システム2.6化にチャレンジ
    • ではその手順を
  • さて、効果の程は?

今更ねー anchor.png[2]

Linuxもバージョンは今や2.6。多分、このページも必要はなくなったと思うのですが…ま、Linux2.6の知識ということで残しておきますですよ。

Page Top

それではいってみましょう anchor.png[3]

実はGentoo Linux 2.6完全移行ガイド[4]という便利なページがあります。このページの翻訳が完了したために踏み切ることと至ったわけで。ということで逝って行ってみましょう。

Page Top

手順を確認 anchor.png[5]

  • 基本システムを最新にしておく
     # emerge sync;emerge -ua world
  • PCM音源を有効にしたい場合はalsa関連をインストールしておく
     # emerge -a alsa-lib alsa-utils alsa-tools alsa-headers alsa-oss
  • udevをインストールしておく
     # emerge udev
     # mkdir /mnt/tmp
     # mount -o bind / /mnt/tmp
     # ls /mnt/tmp/dev/null /mnt/tmp/dev/console
        ここでどちらかが無い!と言われたら mkdevしましょう
     # mknod -m 660 console c 5 1
     # mknod -m 660 null c 1 3
         確認できたら/をアンマウント
     # umount /mnt/tmp
  • Linux2.6ソースをインストール
     # emerge gentoo-dev-sources
  • Linux2.6ソースをコンパイルする  # cd /usr/src; ln -sfn linux-2.6.X-XXXXX linux
     # cd linux
    
    udevを有効にするように
    File systems  ---> 
      Pseudo filesystems  --->
         [*] /proc file system support
         [*] /dev file system support (OBSOLETE) 
         [ ]   Automatically mount at boot 
         [*] Virtual memory file system support (former shm fs) 

と、オプションをONにしてやるです。/dev file system supportはON/OFFどっちでもいいけど、Automatically mount at bootはONにしたらいけません。

  • 出来上がったらブート可能なようにgrubを設定してやって再起動
  • さて、あがりましたかね??
Page Top

カーネルだけ実験君 anchor.png[6]

一応ノートPCの方ではカーネルだけはうまく行っているので、次はサーバー君の方。実はこのサーバー君。過去にカーネルだけ2.6化しようと思って、やってみたらブート後フリーズしやがるので、2.6化をあきらめていたのですが、もう一度だけ実験してみようと思って、最新stableの2.6.9をインストールしてみたら…うまく動くじゃん。なんだよもぅ。と、確認が済んだので、元の2.4に戻して、ノートPCで実験しようと思ったら。思ったら。。。2.4のEthernetモジュールがinsmodできなくなった。ということはネットワークにつながらない。最悪…強制的に2.6にあげさせることになってしまいましたとさ。

Page Top

音源をALSAドライバに変更 anchor.png[7]

ALSAドライバにするためには、カーネルのSoundDriverのAdvanced Linux Sound Architectureを有効にして、全てモジュールコンパイルしてやります。
このあと、/etc/module.d/alsaを編集してやります。 このときに以下のコマンドを実行

# lspci | grep audio
0000:00:02.7 Multimedia audio controller: Silicon Integrated Systems [SiS] Sound Controller (rev a0)

これはうちのマシンですね。で、ALSAドライバ適合調査ページ[8]にいって、適合性を調査してやります。トップページのプルダウンメニューから、うちの場合だとSiSを選んでやります。するてーと、うちのマシンの場合はSiS740て石をつかってるので、intel8x0ドライバだと分かりました。
そこで、先の/etc/modules.d/alsaを開いて

##
## IMPORTANT:
## You need to customise this section for your specific sound card(s)
## and then run `update-modules' command.
## Read alsa-driver's INSTALL file in /usr/share/doc for more info.
##
##  ALSA portion
alias snd-card-0 snd-intel8x0
## alias snd-card-1 snd-ens1371
##  OSS/Free portion
alias sound-slot-0 snd-card-0
## alias sound-slot-1 snd-card-1
##

こんな風にコメントアウトされている部分を埋めてやります。さらに

# cd /etc
# touch asound.state

とやっときます。これが無いとMixer情報を保存できんと後々怒られてしまいます。準備ができましたら

# /etc/init.d/alsasound start

うまく行けば、ドライバがロードされます。あとはalsamixerというコマンドでミュート解除、ボリューム設定を行ってやります。

# amixer /usr/share/soundのどれか

を実行してみて、音が鳴りましたか?鳴れば問題なし。うまく動いてます。うまく行かなければ、/etc/module.d/alsaの設定が間違ってますな。さらに

# rc-update add alsasound default

をやって、自動機動するようにしてやります。おっけ♪

Page Top

全システム2.6化にチャレンジ anchor.png[9]

はて?全システムとはなんじゃらほい?といいますのは、カーネルだけでは本当の機能が発揮されておりません。それってば

  1. Linux2.4カーネルヘッダでアプリケーションがコンパイルされている
  2. Native Posix Threadを使用していない

なぜいけないかというと、2.4用バイナリよりも2.6バイナリの方が高速そうだから(笑)あとは、音源を使用するアプリケーションがALSA対応では無く、OSS対応でコンパイルされているから音が鳴らんとです。それと、ただのlibc threadだと、スレッドをプロセスに擬似って動かしているので、コンテキストスイッチ(実行タスクを切り替える操作)が重い。NativeThreadにするとこの操作が軽くなるので、スレッドを使用しているプロセスの有効実行速度が上がるという寸法ですね。

Page Top

ではその手順を anchor.png[10]

  • まずはコンパイル用linuxヘッダを入れ替えます
     # emerge unmerge linux-headers; emerge linux26-headers
  • /etc/make.confを編集して、USEフラグを追加します。nptlとalsa。あとは-ossを追加して、ossを禁止してやります
  • glibcを再コンパイルします
     #emerge -a glibc
  • 全てのアプリケーションを再コンパイルしてやります
     #emerge -e world

全部コンパイルし尽くしたら完全移行終了。これが長い!うちの例だと490パッケージあったのだ。

Page Top

さて、効果の程は? anchor.png[11]

一番分かること。psコマンドで実行プロセスの一覧を見てみてください。プロセス数が減っていませんか?特にapacheとか。複数タスクの起動にスレッドを使っているやつは、Native Threadに変えるとpsで見えなくなります。お陰でps表示がすっきりします。この効果と、2.6カーネルのパワーのお陰で、応答性が良くなります。ディスクI/Oやタスク切り替え時のコンテキストスイッチのオーバーヘッド改善など。これによって、I/O待ちの時間とOSが消費するCPUパワーが減ると言うわけですね。特に高速なCPUであれば、このI/O待ちによって実行速度ががっくんと低下しますので、早いCPUであればあるほど速度改善が確認できるでしょう。うちですと、サーバー君はCeleron2.6GHz,ノート君はPentiumⅢM800MHz。圧倒的にサーバーのほうが早くなりました。ノート君はちょっと早くなった、ような気がする…

で、コンパイルスピードも上がったか!!と思いましたが、コンパイル時間は大して早くならんかった。コンパイルは一時的にCPUパワーを占有するから、それ以上早くならんのでしょうね。CPUが持ってるパワー以上は早くならんと。当たり前か。


Last-modified: 2009-10-04 (日) 17:13:54 (JST) (5311d) by maruo