Mona/仮想化/04.virtio-net の変更点



 #setlinebreak(on)
 #topicpath
 *04.virtio-net [#vf58c400]
 以下の手順で進める
 + probe[done]
 + 適当な Ether パケットを送信する(Wireshark で確認)
 ++ PCI_STATUS を OK にセットしないとだめ
 ++ Wireshark は root 版を起動し、インターフェースを設定で選んでから覗く
 ++ Wireshark では見えないのが正解。
 ++ [[ARP Request - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090516/1242449170]]
 ++ [[ARP - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090516/1242467643]]
 ++ [[ARP - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090517/1242570174]]
 + IP パケット送信を試す
 --[[ICMP ECHO と QEMU - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090520/1242828376]]
 -- Wireshark で見られた
 -- qemu -virtioconsole stdio -net nic,model=virtio -cdrom /home/taro/mona/tool/mkimg/mona.iso -fda /home/taro/mona/tool/mkimg/mona.img -boot d
 + 現状は slirp モジュールがパケットを横取りして、プロトコル変換して動作している。これでは Mona が正しいパケットを出しているか確認できないので TAP を使うべき。
 + TAP = 仮想 NIC
 ++ 方法。(まだうまくいっていない)
 ++ cat /etc/qemu-ifup
 ++ #!/bin/sh
 ++ sudo /sbin/ifconfig tap0 192.168.50.2 up アドレスは HOST 側のtap0に指定したい IP アドレス
 ++ -net user の代わりに -net tap,if_name=tap0 で root で qemuを起動
 ++ Mona 側では Mona の ipaddress を 192.168.50.3 にする
 ++ ICMP の IP dest を 192.168.50.2
 ++ [[TAP ICMP 動いた - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090524/1243176335]]
 ++ TAP で ARP ping/応答ができた。が、vring->avail などの状態遷移が分からない。
 ++ vring->avail の謎が解けるまでがんばる。
 ++ ■特に受信時のバッファの使い回しが分からないので、実際に動かしてみるべき。
 ++ 見るべきは used と avail
 ++ 受信したいので外からパケットを送る必要がある。例えば ping 。そのためには arp にまず応答する必要がある。
 ++ ああ。そんなことないな。arp 登録すればいいのか。
  QEMU の MAC アドレスをあらかじめ登録しておく
  % sudo tunctl -t tap0
  % sudo arp -s 192.168.50.3 -i tap0 "52:54:00:12:34:56"
 こうしておけば、デバッグ時に Mona がわざわざ ARP 応答しなくて済む。
 + [[vring の仕組みを理解 - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090530/1243695834]] [done]
 + [[virtio-net で受信、送信の割り込みをどう区別するか? - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090614/1244969657]]  contrib r5349
 + [[割り込み関連のバグ - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090617/1245250344]]
 + [[割り込み調査 - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090620/1245480568]]
 +[[VirtioNet クラス完成 - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090620/1245508442]]
 + 効率的な設計案を作る[done]
 + uIP をのっける
 ++ [[uIP with virtio-net - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090623/1245765681]]
 + [[パケット遅延の場所を見つけたい - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090624/1245854450]]
 + [[パケット遅延調査 - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090629/1246287491]]
 + [[パケット遅延調査2 - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090630/1246374090]]
 + [[パケット遅延問題 3 - virtio - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090701/1246460049]]
 + [[パケット遅延問題 その4 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090707/1246979866]]
 + [[問題は TAP かも - パケット遅延問題 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090711/1247324008]]
 + [[TAP が遅い件調査中 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090714/1247583297]]
 + [[パケット遅延問題 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090721/1248188139]]
 + web server 動かす (revision 5361) 全てうまくいった
 +[[パケット遅延問題 原因判明 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090723/1248354169]]
 - 割り込み問題をコメントでしっかり書く
 - uIP main loop に sleep 10msec 入れる
 -- 問題 monadev_read 直後に 10msec 入れると httpd のリセットが多くなる。
 -- 問題 まじめに割り込みを 500msec 待って uIP に制御を返すと httpd の応答しなくなる
 -- bad checksum のせい?
 - ip not for us は何?
 -- NBNS プロトコルの broadcast なので無視するのが正解
 - invalid version or header length
 - tcp bad check sum がでる
 -- 192.168.50.2 からのパケット。パケットの sequence などから何が原因か調べる
 -- [[TCP bad checksum 問題 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090725/1248531865]]
 -- [[TCP bad checksum 問題 2 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090726/1248620439]] revsion 5363
 - 5363 で全てうまくいっている
 - ping が DUP する
 -- 5363 で出なくなった
 - uIP の指示通り 500 msec ポーリングを行う
 -- revision 5364 
 -- 正しく動いている
 -- 検証は
 --- ブラウザ
 --- ping
 --- ab -n 100 -c 10 http://192.168.50.3/
 - ab -n 1000 -c 10 http://192.168.50.3/ で落ちる場合がある
 -- 落ちるアドレスはまちまち
 -- tcp bad checksum が起きる
 -- eip は共通して a001174f
 -- 何回目のリクエストか?傾向があるか?
 -- 2分法で追い詰めた。 receive の
  uint32_t id = readVring_->used->ring[index].id;
 -- で id = 0 となるべきところで 13000 とかになる。最新版の QEMU でも同様。
 -- [[virtio-net ドライバがついに安定 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090801/1249132999]]
 -- rev5365
 - uIP のコードを最小限にする。不要コードは削除
 -- 不要ファイルの削除 revsion 5367
 -- 不要ログコードの削除
 -- デバッグの仕方のメモ
 -- プロトコルはヘッダにまとめる
 - uIP の動作方法 TAP + Linux の説明を書く(英語)
 - uIP を -net user でも動くようにする config で切り替え?
 -- net user は DHCP クライアントが必要
 -- TAP で DHCP クライアントをつくる(Wireshark でパケットを見られるから)
 -- [[今日の Mona - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090804/1249398133]]
 -- [[QEMU -net user 続き - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090805/1249484861]]
 -- http://d.hatena.ne.jp/higepon/20090808/1249743964
 - uIP -net user で動かす bat 作る[done]
 - uIP -net user 起動時に 「access http://localhost:8080」[done]
 - httpd のコンテンツを変える[done]
 - ためしに httpd 公開してみる[done]
 - 落ちるのを再現
 -- uip_chksum で落ちる
 --[[相変わらず落ちるポイントを調査中 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090822/1250952378]]
 - ab -n 500 -c 40 http://localhost:8080/cgi/tcp で落ちる
 - uip_chksum 中でデータ領域を指しているはずのポインタの一部(8bit)が書き換わっている
 - qemu 0.10.5 に入れ替えたがおなじ場所で落ちる
 - 判明 : uip_process の入り口で (uip_connr <= (&uip_conns[UIP_CONNS - 1])) が成り立たない場合に落ちる
 - uip_process 読んでいるやつ出てこい
 -     _logprintf("start uip_connr=%x uip_conn =%x &(uip_conns[UIP_CONNS - 1])=%x\n", uip_connr, uip_conn, &(uip_conns[UIP_CONNS - 1]));
 main.cpp:148 
 ここ 97 で終端をオーバーしている
 uip_periodic=97 UIP_CONNS=100start uip_connr=0xA000C778 uip_conn =0xA000C778 &(uip_conns[UIP_CONNS - 1])=0xA000C765
 ../uip-0.9/uip/uip.c:506 uip_appdata=0xA000B286
 start uip_connr=0xA000C778 uip_conn =0xA000C778
 start uip_connr=0xA000C778 uip_conn =0xA000C778
 start uip_connr=0xA000C778 uip_conn =0xA000C778
 start uip_connr=0xA000C778 uip_conn =0xA000C778
 ../uip-0.9/uip/uip.c:540 uip_appdata=0xA0FFB286
 ../uip-0.9/uip/uip.c:545 uip_appdata=0xA030B286 0xA000C778 160 0xA000C793
 ../uip-0.9/uip/uip.c:549 uip_appdata=0xA130B286 0xA000C778 161 0xA000C793
 - [[Re:C/C++ で構造体のサイズが違う - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090829/1251517084]]
 - 負荷スクリプト作る
 - [[QEMU 突然死を追う - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090901/1251817036]]
 - [[解決 : QEMU 突然死を追う - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090902/1251902335]] revision 5378
 - 修正&公開
 - コンテンツ変更を diff で revision 5379
 - リリース TODO こなす
 -- uIP が起動しなくなった gcc 4.0 対応
 -- [[nasm 2.07 - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090915/1253012985]]
 -- changelog 書こうね。
 + audio.exe が落ちる
 -- malloc の thread safe 問題かと思って対応したが違った。
 -- log を吐いてみよう。
 -- pci.isExist ノシヨウ変更が問題
 - ES1370音悪い
 -- [[ES1370 の音質が QEMU 0.8.2 と 10.0.5 で違う - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090916/1253110824]]
 -- 0.9.x を試す。
 -- -audio-help で調整。
 -- 先日調べたところ後二種類バイナリが提供されてます。
 -- http://homepage3.nifty.com/takeda-toshiya/qemu/
 -- http://www.bttr-software.de/qemu/
 -- virtionet もしくは uIP のせい。
 --- uIP 起動しなくても発生
 -- IRQ?
 ---net irq=11
 ---audio irq=9
 - uIP起動せずに割り込み見てみる。
 - [[続:ES1370 の音質が QEMU 0.8.2 と 0.10.5 で違う - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090919/1253366655]]
 - [[続2:ES1370 の音質が QEMU 0.8.2 と 0.10.5 で違う - ひげぽん OSとか作っちゃうかMona->http://d.hatena.ne.jp/higepon/20090922/1253589718]]
 - net user で何が起きるか調べる
 - 音質問題改善 http://d.hatena.ne.jp/higepon/20090926/1253976877
 - 起動して微調整項目を列挙する
 -- Happy にタイトル入れる
 -- uIP の標準出力調整 [done]
 -- squirrel 起動
 -- uIP の起動は Scheme から。 [done]
 -- terminal の名前は GUI Shell じゃない
 -- 0.3.0 シリーズの売りを列挙
 --- relnote
 --- applications
 --- roadmap
 - リリースへ
 -- KVM virtio 対応
 -- どこかへ投稿 (OS News)
 
 + tdd 読み終わったらテストフレームワーク
 // &pageのお尻に ; をつけるとページ名に展開されます。
 // ↓適宜コメントアウトして使いましょう
 //**経緯
 //**目的
 //**概要
 //**アクション
 //**未解決な問題
 //**関連ページ
 //#ls2
 
 *コメント [#m3c6e553]
 #pcomment(,1000,below,reply)

リロード   新規 編集 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.016 sec.