QEMU 突然死を追う

現象

QEMU 異常終了。

Guest moved used index from 278 to 1532

再現方法

% ~/mona/tool/qemu/start.sh
% ab -n 30000 -c 20 http://localhost:8080/

調査

  • virtio.c で breakpoint
  • virio_net_receive で起きている
    • これは Mona から見ると受信
  • 2カ所でログをとる
    • Mona の VirtioNet.h の receive で available idx ++部分。
    • QEMU の virtio.c の virtqueue_num_heads。
  • QEMU から見ると
    • <1304 1129>
    • <1305 1130>
    • <1306 1131>
    • <1839 1132>
    • のように推移。idx は現在データがある idx は vq->last_avail_idx。
    • つまり Mona が vring->num 以上にバッファに余裕があるよといってしまっている
  • Mona から見ると
    • 1832
    • 1833
    • 1834
    • 1835
    • 1836
    • 1837
    • 1838
    • あれ。ずっと間違った available_idx を指定している?

今日はここまで。