2006年4月28日

Gigabit Ethernet + NFSのスループット

100Base-T が高速イーサネットと言った昔の頃、100Base-Tで構築したLANでぶら下がっているマシン同士でNFSを使ってネット越しで共有を行っていた。ただし、正直ローカルディスクと比べると格段に落ちるもので、結局一種の諦めを必要とするものであった。

当時は原因を追及することは無かったがNetworkの最大帯域が100Mbps = 12MByte/Sec が足を引っ張っていたようだ。よくよく考えるとATA/33(33MByte/Sec)にも及ばないので当然である。

ふと最近1Gbps=120MByte/Secであればと、SATA/1.5のちょっと遅い程度で、物理IOのスループットはもっと低い(コンシューマ向けの安価なHDDならば)ので、普通のローカルディスクと同程度ぐらいには扱えるのでは?と思い実験。

NFSサーバのローカルHDDの帯域をhdparmで適当に計ると約53MByte/sec程度。なのでこれくらい、NFSクライアント側で出せれば良いかなぁ。

NFSサーバ

  • Debian/Linux sarge
  • Dothan 2.13GHz
  • Memory DDR2 2G Byte
  • RAID1 300G(Maxtor 6B300R0)x2 on Accordance ARAID99-1000
NFSクライアント
  • MacOSX 10.4.6
  • PowerMacG5 Quad
  • Memory DDR2 8G byte

運用時にはローカルのNetInfo?に /mounts 以下にエントリを追加するのが定石らしいが、テスト運用なので、mount コマンドを直に打つ。

sudo mount -t nfs -o resvport fsrv:/data /mnt

ゲッ。約2Mbyte/Secしかでない、、、何故に?NFSをチューニングするには、、、読み書きのサイズを大きくすれば良いのかぁ、、、。man mount_nfsを読めば、MacOSXではudpでは16Kbyteまでtcpでは32Kbyteまで設定できるらしい。

ここでは、サイズが大きくとれるtcpで再度トライしみる。

sudo mount -t nfs -o resvport,tcp,rwsize=32768 fsrv:/data /mnt

ふぅむ。約9Mbyte/Secしかでない、、、何故に?

調べてみると、Linux側のNFSサーバが同期モードから非同期モードにするとスループットがあがる。

/etc/exports

/data    *(rw,async,root_squash)

とすれば、取り敢えずNFSで約50MByte/Secまで!!出るようになった。ただ、非同期モードはNFSのプロとコール違反らしくどういう結果を生むのかが不明。というかNFSサーバが下回りのジャーナリングファイルシステムと協調して動かせれば要件を満たしつつ性能が上がりそうなものを、、、。 まぁ、結局一種の諦めが必要なので非同期モードで運用することにする。

で、NetInfoマネージャを使って/mounts以下にエントリを追加する。

name fsrv:/data
vfstype nfs
opts rw,rescport,net,intr,soft,tcp,rwsize=32768

うんで、再起動すると、/Network/Servers 以下に自動マウントされるようになる、、、 けっ、何でも設定を変更すると再起動しなくてはいけないとは○indowsっぽくださすぎ。

で、UnixではdaemonはシグナルSIGHUPを受けると設定を再読み込むするのが定石なので、下記の手順をとれば、ちょっとはMacOSXを小突いた感じになれる。

  • NetInfoマネージャで「管理>ローカルNetInfoドメインを再起動」を選択
  • automount プロセスにSIGHUPを送信
  • Finder で /Network/Servers 以下を参照
ちっとは、良い感じだが!! MacOSXのファイル名のUnicode正規化方法がNFDとかなのでどうしたもんかなぁ。これまでSamba経由で公開していたものは convmvコマンドでNFC->NFDに変換すれば良く。後は,glibc でUTF-8-MACエンコードがサポートされればSambaでの運用に支障は無くなるが、、、いつのことやら。気長に待ちますかぁ。

2006年4月19日

今更 Darwin/x86 のインストール

最近 Intel Mac が非常に欲しいモード全開なので、Meromが乗ったのが出た頃まで、ぐっと押さえられるかなぁと思い、Darwin/x86でもインストールしてお茶を濁すことにした。

Darwin/x86がAppleのサイトから落とせるので取り敢えず、最新でbinaryの8.0.1をCD-ROMに焼いてインストールを開始。特にCD bootableなシステムだとすんなり入るが以下の点に気をつけないと、HDDから直接起動できなくなる。

  1. プライマリパーティションにするべし。
  2. パーティションのタイプは 0xaf にするべし。
あとは、grubなりliloなりのチェーンで起動できるかなぁ。チェーンローダは/usr/standalone/i386以下の chain0かboot1h(HFS+用)/boot1u(UFS用)を使えば問題ない。

たぶん1の制約は真のDarwin用ブートローダ/usr/standalone/i386/boot (Darwin/x86 boot)の起動する要件らしく。何故ならば、Darwin 8.0.1 をプライマリパーティションと別の論理パーティションに入れた場合に、Darwin用ブートローダから別の論理パーティションから起動できるからだ。grub からこいつが呼び出せれば良いのだが、、、。

で、DarwinってCUIでどう管理するのかぁ?が問題。というかNetInfoで管理だって分からん。NICのアドレスとかDNSとかの設定よ。。。。

あれ、/Library/Preferences/SystemConfiguration/preferences.plist に書かれている。。。 それを書き換えるツールは無しかぁ。

MacOSXが動いてるのファイルを参考に書き換えて、反映させるコマンドは、、、分からないので再起動。おぉ、NICのアドレス・/etc/resolv.confが書き換わっている。。。

えっと、sshd はどうするのかぁ。。。

launchctl load -w /System/Library/LaunchDaemons/ssh.plist

でよし。

でも管理系のコマンドが分からないので常用できないなぁ。darwinportsでも入れるかぁ。

2006年4月17日

P4P800-VM でPATA/SATA混合時のLinux 2.6.x 挙動?

別のマシンで既にLinux配布群(RedHat,Debian,SUSE)がインストール済みのPATA HDDを、ASUSTek P4P800-VM に移して起動を繰り返してみてもイマイチ挙動がよろしくない。

マシンの構成は以下の通り

  1. ASUSTek P4P800-VM / Pentium 4 3GHz
  2. AMIBOIS 08.00.09
  3. PATA 160G HDD(ST3160023A) on primary master
  4. ATAPI CD/DVD-ROM (RW9200) on primary slave
  5. SATA 250G HDD(7Y250M0)
  6. IDE-RAID(PDC20270) & 40G HDD(ST340015A) x 4
で起動ディスクの構成(PATA 160G HDD)は下記の通り
  1. (hd0,6) Debian 3.1 sarge / 2.6.8-3-686
  2. (hd0,7) CentOS 4.x / 2.6.9-34.EL
  3. (hd0,8) Fedora Core 3 / 2.6.12-2.3.legacy_FC3
  4. (hd0,9) Fedora Core 4 / 2.6.16-1.2069_FC4
  5. (hd0,10) SUSE Linux 10.0 / 2.6.13-15.8-default
  6. (hd0,11) Debian testing / 2.6.15-1-686
で、何が起きるかと言うと

BIOSの設定でCompatible mode を選択した場合2種類のタイプに分かれる

  1. /dev/hdaXとして認識され問題なく起動するが約3MB/secの転送速度になる。たぶんジェネリックドライバが使われてPIOモードになっている。=> Debian sarge/CentOS4.X/Fedora Core 3,4
  2. /dev/sdaXとして認識され問題なく起動する、約26MB/secの転送速度になる。libata経由で認識されている。=> SUSE/Debian testing
どちらにしろ起動できるのだがHDDの転送速度が落ちるのは頂けない。またデバイスファイルがhdaだったりsdaだったり変わるのも頂けない。

次に、BIOSの設定でEnhance modeを選択した場合、2.6.13で追加されたirqpollオプションを付け非SMPカーネルでなければ正常には起動できない。なのでFedora Core4/SUSE/Debian testingしか起動しないが、PIIX用のIDEドライバで認識されているので約54MB/secの転送速度になっている。

ただし、dmesgには下記ようなの怪しげなメッセージが流れる。

hdb: cdrom_pc_intr: The drive appears confused (ireason = 0x01)

とか

irq 185: nobody cared (try booting with the "irqpoll" option)
[<c012f9a1>] __report_bad_irq+0x31/0x73
[<c012fa70>] note_interrupt+0x75/0x99
[<c012f570>] __do_IRQ+0x65/0x91
[<c0104985>] do_IRQ+0x1d/0x28
[<c01034ba>] common_interrupt+0x1a/0x20
[<c012007b>] sys_setreuid+0xe4/0x16d
[<c0118160>] wait_task_zombie+0x81/0x36e
[<c0118878>] do_wait+0x146/0x2e6
[<c0113708>] default_wake_function+0x0/0x12
[<c0118a93>] sys_wait4+0x28/0x2c
[<c0102a75>] syscall_call+0x7/0xb
handlers:
[<f8857d0c>] (usb_hcd_irq+0x0/0x54 [usbcore])
[<f88b31b4>] (ata_interrupt+0x0/0x112 [libata])
[<f8872f4b>] (ide_intr+0x0/0xed [ide_core])
Disabling IRQ #185

どっかの権威に聞けばわかるとは思うが、/proc/interruptsを見る限りide0とlibataがIRQを何故か共有しており、libata側かide側かどっちかか両方かのハンドラが共有した場合の対応が進んでないのでパニックってる。その対応オプションirqpollだと思う。「Disabling IRQ #XX」が出た後は、そのirqのカウントが止まっているのに正常の動作するのでいいんだと思う。

で、 IRQがPATAとSATAで共有されるように設定されてしまったが謎。Compatible modeだとIRQは別々に設定され機能しているので、Enhanced modeでも別々に割り振れば問題なく機能するハズ。IRQの割り当てとかはACPIのお仕事なのでこいつ(BIOS内のコード)がバグってるのかぁぁぁ。ASUSTekは昔はawardとかが入ってて安定してたのに、、、けぇ。

追記(2008/06/25)

ここらあたりの問題は 2.6.24 では既に解決済みのようで、ディストリビューションの最新安定版(Debianのetchは除く)を使えば良いようである。

2006年4月12日

VPC7で復帰直後にエラーが出てくる?

いつの間にか、Virual PC for Mac 7.0 でインストール済みのVirtual PC上のWindowsXを復帰させると「VMUSrvc.exe - ディスクがありません 」とダイアログが出てくるようになった。仕様が無いので Virtual Machine Addtions を入れ直してみたら、出てこなくなった。

うぅむ。何故に?、、、Windowsだからかぁ。

2006年4月11日

Linux 2.6.15 で3Comの10/100LAN+Modem が認識しない!?

かなり古くあるノートPC上のdebian/Linux をetch にアップデートしたところ、なんと3ComのLAN PC カード3CCFEM556Bが認識しなくなった!?

いにしえの頃より使えていて重宝していたので軽くショックを受けてしまった。。。

気を取りなして調べてみると pcmcia-cs パッケージが廃止寸前で、udev+pcmciautilsへの置き換えが進んでいるため、以前と同じ設定とかは通用しなくなったらしい。

カーネルからユーザ空間への置き換えが、進んでるすね。。。でも、まだ安定していないということなのか。。。

で、対処法はあって、pcmcia-cs が持っていた/etc/pcmica/cis/3CCFEM556.dat ファイルを/lib/firmwareに拡張子を.cis に変えてコピーすればいいらしい。

くわばら、くわばら。

X68k用の5inch フロッピーを読むには?

最初に購入したComputerは、かのツタンカーメンCMで有名なX68000無印でした。付属のグラデウスを1周もできずにズルしてクリアーしたのもよい思い出です。先日、実家に預けてある荷物の整理をしたところ、X68000で使っていた5inchフロッピーディスクが大量に出てきました。X68000本体は既に起動しなくなり(たぶんコンデンサの液漏れ)、処遇に困るフロッピーだけが残されてしまいました。

ダメもとで、X68000の実機を使わずに読み込む方法を探ってみると。。。

5inchフロッピーなんぞ製造中止になっており、ドライブもそう易々と入手は難しいかと思っていたら、よくよく調べるとバルク扱いだが新品ドライブFD-55GFR-7393がTEACの自販サイトから入手可能で、たぶんショップでも同じ型番のものが出回っていると思います。また、X68000で使われているFDDは同じ型番のFD-55GFRなので由緒正しいものなのでしょう。

次は接続ケーブル。普通3.5inchFDDと繋ぐ接続ケーブルとは異なり、コネクタ部分がカードエッジ型のものが必要。これはまだサンワサプライ等で製造されており、型番KB-FL341Kを指定して普通のショップで購入が可能です。

ついでに、5inchFDD用のクリーナもまだ製造されているらしく入手は可能。

これらの3点セットが揃ったところで、BIOS設定さえすれば普通のIBM PC-AT用の5inch 2HC はサクサク読めるようになる。しかし、X68000用のフロッピーとはディスク形式が異なるので読めません。基本的に、PC98用のフロッピーとディスク形式と同じなので、まずはPC98のMS-DOS用のフロッピーを読めるようにしなければならない。ここで運が良く1枚だけ書籍付録のフロッピーで、この形式のフロッピーがあったのでこれで検証。。。どうする?

実のところ、Windows95系列ではユーザが用意したドライバがVectorで公開されているので、こいつを使うと、PC-9800のMS-DOS用のフロッピーは読めるようになるらしい。が、Windows95系は用意するのが面倒で、できればWindows2000で使いたい。。。気がする。

まぁ色々調べると、とあるFDC/FDD用のNT用(2000用も用意されているがそれは避けるべし)のフロッピードライバFLOPPY.SYSを組み込めば、PC98のMS-DOS用のディスクが読めるようになる。

しかし、Human68kのFATはMS-DOSから拡張されたFATなのでWindowsは読んではくれない。。。

押しても駄目なら引いてみなー、の考えに従って、 Linux上でフロッピーのディスクイメージをファイルに書き出し、Windows上のX68kのエミュレータで読むようにしてみよう。プロテクトが掛かってるものはエミュレータでも動かないが、用は足りる。

Linux でも普通何もしないと、X68k/PC98用のフロッピーは呼んではくれない。ただし、3-mode フロッピーを読めるようにするパッチは存在している。だたし、Linux 2.2/2.4用らしい。ただし、5inchのフロッピーであれば、setfdprmでパラメータを指定すると素でも読めるらしい。これは、耳寄りな情報。

暫し、熟考の結果。次のようにすれば良いらしい。

  1. fdutilsパッケージをインストール
  2. /etc/fdprm に次の1行を追加
    1232/1232 2464 16 2 77 0 0x35 0x08 0xDF 0x74
  3. フロッピーを挿入後に、次のコマンドを実行
    setfdprm /dev/fd0 -p 1232/1232
  4. ddなりcatなりで読み込む
これでフロッピーのイメージが作れるので、あとはWindows上のX68kエミュレータで読めばお終い。

で、大量にあったフロッピーには何があったかは、、、、青春だなぁ。

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...