QCOWとCD-ROM

現状のCVSだと、ハードディスクのRAWイメージは動くのですが、QCOWイメージが動きません。それと、CD-ROMも\.d:とかで直接指定すると動かないようです。
振り返ってみると、小さい不具合はいっぱいありますよね。-snapshotとか。折に触れ、直していくしかないけど。

Disk I/O のスピード

Win98/Meホストのサポートは、続くことになりました。
Readの最初がエラーになるのも直りました。
RedHat 7.2ゲストを使って、ディスクI/Oのスピードを測ってみました。
hdparm -t /dev/hdaの結果。
QEMU-0.8.2
21.12MB/sec
25.20MB/sec
25.10MB/sec
25.20MB/sec
CVS
41.03MB/sec
57.14MB/sec
57.14MB/sec
57.14MB/sec
ほぼ倍のスピードになっています。OSの起動時間は変わらないですけどね。

スレッドを使ったシリアルとwindbg

シリアルの扱いをポーリングからスレッドに変えたパッチを作りました。名前つきパイプをクライアントモードで使うオプションも付け加えました。
-serial pipe_client:com_1
-serial pipe:com_1を別のQEMUで使ってサーバーを立て、もう1つで-serial pipe_client:com_1で接続すると、2つのQEMUで通信ができます。
QEMUを2つ使って名前つきパイプで通信してみると、ポーリングからスレッドに変えることで、通信速度が4倍くらい速くなっています。スレッドって効率がいいんだってことがわかった。
ただ、windbgが使えなくなってしまいました。調べてみると、CPUのロードが大きいときにmain_loop_waitのループの回転速度が遅くて、データが送受信されていないことが原因でした。
前回作ったwindbgのパッチを使うとちゃんと動きました。
windbgを使えるようにしたバイナリ。
http://www.h6.dion.ne.jp/~kazuw/qemu-win/qemu-0.8.2-windbg.zip
パッチ。
http://www.h7.dion.ne.jp/~qemu-win/download/qemu-20060730-host_alarm.patch
http://www.h7.dion.ne.jp/~qemu-win/download/qemu-20060730-serial-thread.patch
http://www.h7.dion.ne.jp/~qemu-win/download/qemu-20060730-windbg.patch
これでいいんだと思うけど。

ファイルの非同期I/O

ファイルの入出力にAIO(Asynchronous I/O 非同期I/O)を使った修正がCVSに取り込まれました。なんとかコンパイルはできたのですが、いろいろと悩ましい問題を発見。
まず、Win98/Meホストがサポートされなくなってしまいます。ソースのヘッダに変更を加えないといけないので、Win2k/XP系とどちらもサポートするバイナリが作れません。どうしても必要なときは、別のバイナリにしないといけないです。そうするには、パッチも作らないといけないし、どうしましょう。ホストは、Win2k/XPのみで困る人はいるかな。
手許にWin98/Meホストの環境がないので、作ろうとしても動くかどうかわからないし。QEMUの中で動かせばいいのかもしれないけど。でも、イマイチだけど。
もうひとつは、ドライブレターつきのハードディスクイメージを開こうとすると、最初のトライが失敗してしまいます。なぜかは不明。これは直さないと使えない。
AIOそのものも、今は使わないようになっています。これを動作させるのも大変そう。