![]() |
running-dog.net。しかし、自分が一番落ち着かない。かけまわっている子犬のような状態。そんな毎日をブログで綴ってみました。 FreeBSD・PC・UNIX・プログラム・MacOSX・iPhone3G ネタなど技術的・趣味的なネタについて色々書いてみたいと思います。 また、最近は Microsoft Windows ネタも増えてきたかなぁ。などとも思っておりますが、併せて宜しくお願いします。 |
|
« 2007年09月 | メイン | 2007年11月 »
2007年10月のアーカイブ
検索
カテゴリー
フィードを取得
Special Thanks.
Please click now!!
SMP カーネルと uptime と CPU クロック。
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 のフルパワーは使っていただけたのでしょうか・・。
SpeedIt と chkfreq。
僕は 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 で取れるようになるぞぉー。
ASUS M2A-VM HDMI の続き。そのに。
前回は 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 がいつも同じ値しか返さない所もなんとかせねばならんのだった・・。
NotePC でコンソールを使ってはいけません。
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 |
2 CDROM/DVD を選んで Alt-F4 した後に cd /mnt2 すれば良いでしょう。
しかし、復旧には随分と手間取りました・・(^^;;。うんとふるーーい情報なのに以下の URL がそこはかとなく役に立ちました。
http://www.jp.freebsd.org/QandA/HTML/464.html
ata.ko と atadisk.ko。
僕はカーネルモジュール大好き人間なので、色々なものを 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 の二つはカーネルに組み込んでおいたほうが便利だなぁ。と最近、思いつつある・・。