FreeBSD on
ThinkPad i1620
〜 ThinkPad i1620 で、FreeBSD を使おう 〜
もっと、快適な環境を得るためのTips
FreeBSDの起動時に、Booting [kernel] in 9 secords ………などとメッセージが出ている間に、何かキーを押します。
すると、ok> というプロンプトが出るので、boot -s と入力して、シングルユーザモードにします。
その後で、
# tunefs -n enable /dev/ad0s3aと入力して、リブートします。( /dev/ad0s3a のところは、適宜インストールした領域に読み替える)
# rebootリブート後に、mount コマンドでマウント状況をチェックしましょう。
/dev/ad0s3a on / (usf, local, softupdate)のように表示されます。
まず、CPUが MTRR (Memory Type Range Register) とかいうのをサポートしていないとダメらしいので、それを確認します。dmesg で、起動時のメッセージを見てみましょう………
% dmesgなにやら、真中あたりにMTRRの文字が見えるので、多分大丈夫でしょう。
:
:
CPU: Pentium III/Pentium III Xeon/Celeron (312.55-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0x683 Stepping = 3
Features=0x383f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE>
:
:
次に、ビデオカードのメモリ領域を調べます。これには、Xの起動ログをみます。
% startx >& x.logとして、Xを起動し、x.log ファイルをじっくり見てみましょう………
% cat x.log使用しているメモリのベースアドレスは 0xf5000000 と 0xf4100000 (なんで2個もあるの?)、
:
(--) SVGA: PCI: ATI Mach64 Mobility rev 100, Memory @ 0xf5000000, 0xf4100000, I/O @ 0x3000
:
:
(--) SVGA: videoram: 4096k
:
では、ここで memcontrol コマンドを使用します。基本的な使い方は
/usr/sbin/memcontrol set -b ベースアドレス -l サイズ -o 識別子 write-combineです。ベースアドレス、サイズは先ほど調べたビデオカードのものを、識別子は7文字以内で適当な名前をつけます。こんな感じですね。
# memcontrol set -b 0xf5000000 -l 0x400000 -o SVGA write-combine実際に設定されたかどうか確認してみましょう。
# memcontrol list先ほどの設定が最後の行にでてきました。これでOKです。
:
:
f5000000/400000 SVGA write-combine active
早速、xengine などで速度UPを体感してみましょう。
ちなみに、i1620 の SVGAサーバ (16bpp) で 1400rpm ほどだったのが、3000rpm以上になりました。
なお、この設定を解除するには、
# memcontrol clear -o SVGAです。-o の後には、設定時につけた識別子を指定します。
では、起動時に自動的にこの設定を行なうようにしましょう。
FreeBSDでは、起動時に /usr/local/etc/rc.d/*.sh を実行するようになっているので、
rootになって、/usr/local/etc/rc.c/mtrr.sh などというような名前でファイルを作成します。
ファイルの内容は以下のような感じでいいでしょう。
なお、起動時にはこのコマンドに、引数 start が、シャットダウン時には引数
stop が与えられて実行されることになっているみたいです。なので、引数 start
で MTRRを有効に、引数 stop で MTRR を解除するようにしてみましょう。
(なお、わたしは、シェルスクリプトを知らないので、他のファイルを真似して、適当に書いてみました)。
あとは、このファイルに実行パーミッションをつけておきます。
#! /bin/sh case $1 in
start)
echo MTRR
memcontrol set -b 0xf5000000 -l 0x400000 -o SVGA write-combine
;;
stop)
memcontrol clear -o SVGA
;;
*)
echo "usage: `basename $0` {start|stop}"
exit 1;
;;
esac
#chmod +x /usr/local/etc/rc.c/mtrr.shこれでOK。再起動して確認してみましょう。
余談)
ところで、# memcontrol set -b 0xf5000000 -l 0x800000 -o SVGA write-combineのように、メモリサイズを倍の 8M 指定して見ました。これでも、エラーは出ません。
この時、なんと xengine の結果が、4200rpm 以上になるではありませんか。
早速、これをデフォルトの設定にしましょう。( 大丈夫かなあ???)