11月 152007
 

さて、ASUS M2A-VM HDMI で FreeBSD を楽しむスレッドのそのさんです。前回は acpi_ppc.ko で Cool’n’Quiet を有効にするお話でした。

今回は IXP SB600 Serial ATA Controller のお話です。ちょっと google していたら、以下の URL を発見。

http://lists.freebsd.org/pipermail/freebsd-bugs/2007-May/024410.html

今まで ASUS M2A-VM HDMI マザーボードと言うか、AMD690G チップセットは UDMA33 で HDD を認識して忌んだけど、上のパッチを適用すると ATA150 で認識するようになってくれた。

こっちがパッチ適用前のメッセージ。

ad4: 239372MB  at ata2-master UDMA33

 
こっちがパッチ適用後のメッセージ。

ad4: 239372MB  at ata2-master SATA150

 
S-ATA なので ad4 と認識されてしまうんだけど、それにしても ようやっと SATA150 になった。僕の 環境は FreeBSD/amd64 6.3-PRERELEASE なんだけど、まだ、CURRENT から降ってきていないみたい。なので、STABLE で利用したい人は上記のパッチを手バッチで自分のソースに当てましょう;-)。

まぁ、一応パッチを書いておきましたけど・・。

http://www.icmpv6.org/Prog/FreeBSD_patches/IXP_SB600SATA-6.3-PRERELEASE.patch

けど、すぐに STABLE に降ってくるんだろうねぇ。

後は、グラフィックチップだなぁ。

11月 082007
 

MacOSX 10.5、Darwin9.0.0。別の名を Leopard と言うんですけど、10/26 に秋葉ヨドバシに 18:20 位に行って、並んで買って来てしまった。この時に貰ったモノは T シャツ・iTMS の 1,500yen 分のクーポン券。後、ポイントも 700ポイント位ついたかなぁ。

でもって、こないだの週末に、バックアップして一旦全部消してからサラでインストールしてみた。現在利用ている最中ですけど・・。

・Safari が emacs のキーバインドを捨てたのはちょっとショックが大きい。
・ターミナルはせっかくタブに対応したんだけど、タブを移動するショートカットが無い。
・Space の使い方がいまいち解らない。アプリケーションを別のスペースに移動できないし・・。
・Doc は下にないとけっこうつまらないもの。

などなど、ちょっといじっただけでこれだけの不満が・・。まだ使い込んでないので本当は上記の問題は解決できるのかもしれないけどねぇ。今後の課題と言うことで。

で、今回の本題。

http://ranger.users.finkproject.org/kde/index.php/Home

MacOSX で KDE4 がネーテブに動作する。と言うもの。 FreeBSD で KDE3 を使っている僕にとっては素晴らしいことなんだけど、これの凄いのが、qt/Mac を利用しているので X11 が必要無い。なので MacOSX ネーテブに動作する。と言う点。

ターミナル・ブラウザ・オフィスアプリ・ゲームなどが利用できるようになる。凄いねぇー。

僕はまだインストールしてないんだけどね(^^;;。今晩早速試してみることにするですよー。

ってか、もっと MacOSX をたくさん触らないとなぁ。sendmail-8.14.2 はもうインストールしたんだけどねー。

11月 062007
 

前回、「SMP カーネルと uptime と CPU クロック。」で書いたことの続き。

SMPカーネルで acpi_ppc を利用した場合、CPU速度が上がらないと言う状態になっていた。ちょっとまとめてみると大体以下のような感じ。

・OS は FreeBSD/amd64 6.2-STABLE。
・cpufreq.ko を使わないで acpi_ppc.ko のみを kldload した場合。
・CPU が DualCore な環境。SMP カーネルであるのだが、 DualCPU ではない環境。

上記の状態の時に発生する現象。

1.make buildworld したとき CPU クロックが Cool’n’Quiet の一番低い速度で動作する。
2.make -j2 buldworld したとき CPU クロックは Cool’n’Quiet の一番高い速度で動作する。

つまり、上の場合はどんなに速い CPU を買って来ても全くもって CPU のフルスペックが利用できない状態に陥る。

ちなみに、シングルプロセスの非常に重いプログラムを動作させた場合も 1. の動作となる。しかし、マルチタスク・マルチスレッドな非常に重いプログラムを実行すると二つの Core を使ってくれるので 2. の状態になる。

これらの情報をもとに acpi_ppc.ko の作者である 福田さん にお伺いしてみました。そしたらその回答として以下の情報を頂きました。

・acpi_ppc.ko はマルチコアな環境に対応していない。
・acpi_ppc は top(1) と同じ動作をする。

との事でした。「top(1) と同じ動作」について少し書いてみたいと思います。

acpi_ppc は cp_time[] という kernel 変数から CPU 使用率を算出しクロックの制御を行なっているそうです。acpi_ppc における Cool’n’Quiet の CPU 速度のアップは CPU 使用率が 98% を超えたら一つ上のクロック設定に上げるようにしているそうなので、シングルプロセッサの場合は特に問題なく Cool’n’Quiet の機能が動作します。

しかし、マルチプロセッサの場合、シングルプロセスの重いプログラムを実行しても top で見る CPU 使用率は 50% のため、いつまで経っても Cool’n’Quiet の一つ上のクロック設定に上がることは無いそうです。当然シングルプロセスの重いプログラムを二つ実行した場合は一つ上のクロック設定に上がるようになります。

以上により acpi_ppc は SMP 環境ではちょっともったいないと言うことになります。しかし、まぁ、言われてみればその通りだなぁ。と言う気はしますが・・。

と、言うことで、僕は色々な場面で make -j2 を付けるようにしました。後、シングルプロセスの重いプログラムを実行する場合は kldunload acpi_ppc することにしました。kldunload acpi_ppc すると CPU 速度は最高速で動作するのでシングルプロセスの場合でも最高速で利用できます;-)。

ちなみに cpufreq.ko はマルチコアに対応していてシングルプロセスの重いプログラムを実行しても CPU 速度は変わるらしいです。まぁ、今回は cpufreq.ko が動作しないマザーボードを買ってしまったのでしょーがないですけど・・。

最後にですが、色々教えてくださった 福田さん。有り難うございました。

10月 192007
 

FreeBSD/amd64 6.2-STABLE で cvsup した後に make buildkernel するんだけど、その時に掛かった時間を /usr/bin/time で計ってみた。

Athlon X2 な CPU なので make buildkernel と make -j2 buildkernel の結果を比べてみた。結果は以下の通り。まぁ、2CPU で処理すると大体 1.5 倍の速度と言うことか・・。ちなみにこの時に利用したカーネルは SCHED_4BSD なスケジューラを利用。

1CPU 1380.26 real / 1006.97 user / 362.58 sys
2CPU 864.76 real / 708.34 user / 348.38 sys

で、なんで、こんなことをしたかと言うと、以下の疑問が出てきたから。

・2CPU で make した時の CPU ロードアベレージはちゃんと上がるの?
・1CPU で make しても Cool’n’Quiet の CPU 速度上がらないんだけど・・。

で、これらの疑問を持ちつつ、make 時に -j2 有り、無しを試してみました。その結果、解ったこと。

・2CPU で make -j2 したときの CPU 速度は大体いつも 2GHz 出ている。1CPU の場合は make に時間が掛かるけど Cool’n’Quiet の下の方の CPU 速度で make している。
・2CPU で make -j2 した時の CPU ロードアベレージは 2.6 辺りなんだけど、1CPU での make 時は1.4 位。

ふむぅ・・。つまり、デアルコアな CPU を買って来た場合 SMP カーネル作るけど、何かしらを make する時には -j2 オプション付けないと CPU の能力は半分しか使われていないと言うことがすごーーく良く分かった。

make buildworld や portupgrade の場合、CPU のフルパワーを使って早く終わって欲しいと思うものです。けど、実際には CPU の半分のパワーで make してたんですねぇ。

この件について /etc/make.conf 内に何かしらの設定をすれば 2CPU で make してくれると言う話を聞いたことがあるんだけど、make 時のスケジューリングの問題で make が途中で止まってしまう ports がある。と、話を聞いたこともあるし・・。まだまだ手動で -j2 と付けるしか手が無さそうですなぁ。

ちなみに、今回利用した FreeBSD は本来はデスクトップとして利用されており、KDE3 が起動しています。今回はテストのために X11、hald を停止しての実行でした。

make のために CPU のフルパワーは使っていただけたのでしょうか・・。

10月 172007
 

僕は Core2Duo 2GMHz な MacBook を持っている。人に教えていただいたのだが SpeedIt なるものが存在するみたい。

どんなものかと言うと、FreeBSD で言う所の cpufreq.ko みたいな感じ。そもそも Core2Duo は SpeedStep に対応しているはずなんだけど MacOSX 自体はこの機能を積んでないみたい。なので、外部から拾って来たカーネルモジュール(MacOSX 風に言うと「カーネルエクステンション」です)を kldload (MacOSX 風に言うと「kextload」です)してしまいましょう。と言う感じ。

さて、実際に MacOSX に SppedIt をインストールしてみましょう。以下の URL から SpeeditOSX10.4.10.zip をダウンロードしてどっかに展開します。

http://www.increw.com/en/downloads/index.php

展開した時にできた speedit.kext と言うディレクトリを root 権限で、/boot/modules/ が無いのでしょーがない。/Applications/ 辺りにコピーします。

FreeBSD ユーザは kextload に慣れていないので、.tcshrc 辺りに以下の設定を書いてしまいましょう;-)。で、source ~/.tcshrc を実行。うひひ。

alias  a       alias
a       kldload 'kextload \!*'
a       kldunload 'kextunload \!*'
a       kldstat 'kextstat \!*'

 
これで設定完了。後は以下のようにすれば良いでしょう;-)。実際にロードされたかは kldstat、カーネルモジュールを外す時は kldunload。おー。FreeBSD と一緒だ;-)。

# kldload /Applications/speedit.kext

 
さて、 speedit.kext を kextload すると新しい sysctl MIB が増えます。

speedit.currentfreq: 1000
speedit.minfreq: 1000
speedit.maxfreq: 2000
speedit.temp_is_valid: 1
speedit.temp: 58

 
Intel の SpeedStep が有効になっていたならば speedit.currentfreq の値が変わってもよさそうなものなのに変わらないねぇ・・。困ったよ。このカーネルモジュールが本当に有効になって、CPU 速度が可変になっているのかちょっと解らない・・。まぁ、けど、取り敢えずは動いているみたい。あぁ・・。

で、しばらく運用してみたけど、どうも動いているっぽいけど、やはりちゃんと CPU 速度は知りたいものだ。で、僕はハタと考えた。ここいら辺りに書いた日記では FreeBSD/amd64 において Cool’n’Quiet を有効にするための FreeBSD 謹製ではないカーネルモジュールがあるんだけど acpi_ppc と言うのね。この中に chkfreq と言うコマンドがあって、これが MacOSX で使えるのではないか。と。

と、言うとこで早速 acpi_ppc をダウンロードしてきて、ソースを展開。すかさず chkfreq のディレクトリに移って bsdmake と叩いてみました。おーー。make までちゃんと通るじゃん;-)。できたバイナリはこんな感じ。

Makefile:  ASCII text
chkfreq:   Mach-O executable i386
chkfreq.c: ASCII C program text
chkfreq.o: Mach-O object i386

 
さて、バイナリができたので早速使ってみましょう。 chkfreq 200 とかしてコマンドを実行すれば一秒置きに 200 回、 CPU 速度を表示してくれます。FreeBSD/amd64 上で正しく動作していたのですが、なんとなーーっ!! MacOSX 上でも正常に動作するじゃないのさーーーっ!!

僕の MacBook で試した所一番遅いクロックで 435851232 で約 435MHz でしょうか。で、大きなプログラムを make している時に計測したら 1994984316 で約 2GHz と言う値を示してくれました。

いやぁ。MacOSX って UNIX なんだなぁ。そして FreeBSD なんだなぁ。と再確認した瞬間なのでした;-)。

まぁ、どーでも良いのだけど、今回の発見は FreeBSD/amd64 と MacOSX の両方を使っている人でないと発見できないワザだったかもしれんですねぇ。これで CPU 速度が SNMP で取れるようになるぞぉー。

10月 162007
 

前回は BIOS で Cool’n’Quiet を Enable にしたら FreeBSD はブートしませんよ。って所まで書きました。今回はその続編です。

ASUS のウェブサイトを見ていたら、新しい BIOS が出ていたようなので試してみました。今回試したバージョンは 1301 と 1401。しかし、どちらも Cool’n’Quiet を Enable した場合、やありブートしませんでした。あれま・・。

で、前にも書いた通り、僕は Cool’n’Quiet を有効にするために二つのカーネルモジュールをロードしているのだけど、もしかしたら、カーネルモジュールとの相性かが悪いのかと思い、試してみました。そしたら cpufreq.ko のほうをロードすると FreeBSD がピタっと止まる(つまり凍りつく)ということが解りました。

acpi_ppc.ko のほうは特に問題も無く正常に動作して Cool’n’Quiet が有効になっているような気がします。と、言うことで cpufreq.ko は使わず acpi_ppc.koのみをロードすると無事に FreeBSD は動作します。

ちなみに cpufreq.ko を利用した場合は以下の sysctl MIB で CPU 速度が取れます。

dev.cpu.0.freq: 995
dev.cpu.0.freq_levels: 1791/59000 995/21000

 
しかし、今回は cpufreq.ko はロードせず acpi_cpp.ko をロードするので必要な sysctl MIB は以下になります。

hw.acpi.cpu.px_supported: 2100 2000 1800 1000

 
これだと、実際に動作しているクロックが表示されないので、その場合は acpi_cpp.ko に付属の chkfreq コマンドで実クロックを知ることができます。

いやぁ、それにしても一個問題解決して良かった。後は AMD の 690G が X11 で使えるようになるだけだなぁ。あ、後もう一個あった・・。hw.acpi.thermal.tz0.temperature がいつも同じ値しか返さない所もなんとかせねばならんのだった・・。

10月 052007
 

NotePC にインストールしてある FreeBSD にシリアルコンソールから入りたいな。と思った。自宅のサーバはシリアルコンソールを有効にするために /boot.config を置き、その中に「-Dh」と記述してあるので、NotePC でも同じことをやった。ちなみにこの NotePC には FreeBSD/i386 6.2-STABLE がインストールしてある。

さて、NotePC に /dev/ulpcom 対応な USB のシリアルポートを接続し /boot.config を用意してからリブートしてみた。所が「|」がくるくる回る所でピタッと止まってしまい、FreeBSD がブートすることは無かった・・X-(。10 分待っても 20 分まってもログインプロンプトが表示されることは無かったのである・・。

/dev/ulpcom で認識されるシリアルポートはカーネルがブートしてロードモジュールが認識してから tty が有効になるのだが、ブート直後ではデバイスも認識してくれないのでコンソールに表示された情報がどっかに行ってしまったんでしょうな。

と、言うことで良い子の皆さんは「NotePC に USB シリアルを付けてコンソールにしよう。」など言うことをまねしては行けません。

で、話はここで終わると良いのですが、起動しなくなった FreeBSD をどうやって復旧しようか。と言うことになるわけです。多分、/dev/ad0s1a の /boot.config を削除するだけでブートしてくれるようになるであろうとは思うわけです。ふむぅ。

まずはインストール用の CD-ROM で起動します。起動後の sysinstall 画面で Fixit と言うメニューを選択します。すると以下のようなメニュー画面が出るので 2 CDROM/DVD を選択します。すると /mnt2 に HDD の中身を mount してくれます。後は rm /boot.config してから再起動すれば良いでしょう。

X Exit       Exit this menu (returning to previous)
2 CDROM/DVD  Use the "live" filesystem CDROM/DVD
3 Floppy     Use a floppy generated from the fixit image
4 Shell      Start an Emergency Holographic Shell

 
ちなみにこの時 4 Shell を選択すると Alt-F4 を押した tty4 にプロンプトが現れます。しかし、ls(1) とか mount(8) は無いので随分と難儀します。 ls(1) のかわりに echo * とか echo /bin/* とかすれば ls(1) の代用にはなります。

2 CDROM/DVD を選んで Alt-F4 した後に cd /mnt2 すれば良いでしょう。

しかし、復旧には随分と手間取りました・・(^^;;。うんとふるーーい情報なのに以下の URL がそこはかとなく役に立ちました。

http://www.jp.freebsd.org/QandA/HTML/464.html

10月 042007
 

僕はカーネルモジュール大好き人間なので、色々なものを kldload しているのだけど、大体 50 個位のモジュールを利用している。

ata.ko と atadisk.ko。この二つはびみょ~。今まで kldload していたのだけど、S-ATA を使ったときや、6.2-STABLE から 7-CURRENT にバージョンアップした時に / パーティションを認識してくれない事態が発生した。

S-ATA を使っている時は /dev/ad0s2a と /dev/ad4s2a を行ったり来たりしているし、cvsup で 7-CURRENT にしたときは全く、どのデバイスを利用すれば良いの?状態になってしまった。

後、注意点としては /boot/kernel.old/kernel をロードしたときは合せて、忘れないで ata.ko と atadisk.ko もロードしないとならないので・・。

と、言うことで ata.ko と atadisk.ko の二つはカーネルに組み込んでおいたほうが便利だなぁ。と最近、思いつつある・・。

9月 282007
 

前回、「新しい PC を組み立ててみた。」において、新しいマザーボードと Athlon X2 4000+ を購入して FreeBSD で SMP カーネルを利用してみた。

みたいな所まで書いたんだけど、その後、BIOS を最新の 1101 にしたら突然動作が不安定になった。メモリが不良っぽい動作だったのでメモリチェックしてみてもメモリ自体には特に問題が無いのでふむぅ・・。と言う感じだった。ちなみに WindowsXP x64 は特に問題なく起動する。まぁ、使い込んでないんだけどね。

だけど、FreeBSD はブートもしないで以下のメッセージを出力しつつ panic する。

Kernel panics: failed to create swap_zone

ふむぅ・・。ブート時のメニュー画面で ACPI disable を選択するとなんとかマルチユーザでブートすることを発見。 ACPI 無いし シングルプロセッサだし、UDMA33 な状態のマルチユーザモード。けど、ブートしてくれただけでもありがたいことで options SCHED_4BSD を SCHED_ULE に変更したしりてカーネルの再構築自体はなんとか行える・・。

で、 Google で色々調べてみると

・BIOS で AMD Live! を enable にしていると凍りつく。
・BIOS で Cool’n’Quiet を enable にしていると凍りつく。

などの情報があったのでその二つを disable にしたら無事に起動するようになった。僕の場合、 loader.conf で cpufreq_load=”YES” と acpi_ppc_load=”YES” を書いているのでその影響かなぁ・・。

マルチユーザモードでバリバリと問題無く動くうにはなったのだけど、それにしても Cool’n’Quiet が動かなくなったのは非常に悲しいものがあります。ASUS が悪いのか、はたまた AMD690G が悪いのか・・。

しかし、Socket7 の T2P4、P5A 以来久々に ASUS のマザーボード買ったのだけど、やっぱり外れた部類に入るかなぁ・・。このマザーボード・・。

9月 272007
 

自宅の FreeBSD は amd64 アーキテクチャが随分と多くなってきた。その場合、日本語入力や日本語変換に苦労するわけである。

NEC の EWS-4800 を利用し始めた僕にとって、カナ漢字変換システムは Canna しか考えられないのだけど、 FreeBSD/amd64 を利用した場合バイナリ的には Canna を使うしか手が無い。以前 FreeBSD/i386 を利用していた時は vje-2.5 のデーモンを利用していたのだけど、FreeBSD/amd64 では aout.ko が無いので vjed が起動できなくなってしまった。

で、どうしたかと言うと、うちで動作している唯一の FreeBSD/i386 はサーバなのだが、ここに vjed を起動して esecanna 経由で利用する手があることに気がついた;-)。

emacs や環境変数で canna サーバを指定できる点を思い出した。で、早速試してみたのだが、あれま・・。esecanna ってローカルホストからの接続しか許可していないのね・・。ガビーーン。

と、言うことで開発の終わった eseccana は自分でソースを修正するしかないのである。と、言うことでパッチを書いてみた;-)。

patch-zz-esecanna-all-ip-connect.patch



このパッチを /usr/ports/japanese/esecanna/files/ 辺りに入れて make するとリモートホストから接続できる esecanna ができます。めでたしめでたし。

しかし、どのホストからも接続を許してしまうので ipfw などでフィルタを掛けることはお忘れなく;-)。