Mona 上で uIP を動かす。 5555ポートで listen して受信したら内容を鸚鵡返しという作りにしてある。 外部から、Mona上の uIP に向けて送信しまくる。 ↓な感じ。 require "socket" print("start\n"); s = TCPSocket.open("localhost", 5555) (1..10).each {|i| s.write("Hello I'm packet #{i}") print("sent packet #{i}") print(s.gets) } s.close こんなのを動かすと、期待する動作が得られるし、パケットも確実にやりとりれている。 ただ、ひとつだけ問題があって i が大きくなるにつれて極端にパケットのやりとりが遅くなる。 10秒とか待たされたりする。 現在確実に分かっていること * Ethereal で見てみると Mona 側から送るべきパケットの送信が遅れている場合がほとんど * Monaのコンソールで観察していると、割り込みと割り込みの間隔が極端に長い場合がある 登場人物は * NE2000ドライバ@Mona * uIP@Mona * カーネルの割り込みハンドラ@Mona * Qemuの中のNE2000 * 上のrubyプログラム と多くデバッグに苦労してる。 どこで誰がパケットを遅延させているのかを調べたいのだけど テストするたびにEthereal上で見える現象が違ったりと難しい。 という状況。
ユーザーランドで、割り込み禁止区間が長いので取りこぼしているのではないか。
カーネルに割り込み処理を移動してみれば問題を切り分けられる。
Nicドライバをカーネル側に置いて直接割り込みを受け付けるというのをやった。
コメントはありません。 コメント/mones2/22.ネットワークサーバ/21.パケットが遅い?