日経SYSTEMS - 遠隔KVMマイグレーション


今月の日経SYSTEM(3月号)でOSを動かしながら東京から大阪に遠隔KVMライブマイグレーションする検証記事を書きました。

http://ec.nikkeibp.co.jp/item/backno/OS0227.html

日経SYSTEMS2012年3月号

記事書いている時に1G NICを使ってるわりに遅くて、この調査に手こずってしまった。 その時、QEMUのmigrate_set_speedついて調べたので補足。

QEMUにはマイグレーションの帯域を制御できそうなコマンド、migrate_set_speedが用意されている。

これは、migration.cの

static int64_t max_throttle = (32 << 20);

で定義されていて、デフォルトで32MByte/secになっているのでこれを増やせば早くなるかな、と思いきやそういう訳でもなかった。という話も記事に書いたので気になる人は読んでみてね。

この現代になんで32MByte/secがデフォルトなのか不思議に思ってたら、ML上のみんなも不思議がってた。

https://www.redhat.com/archives/libvir-list/2011-August/msg00168.html

詳しく調べてみるとこのmigrate_set_speedは仮想マシンの動作と密接に絡んでいて、ゲストOSが動作しているクロックの合間を縫ってマイグレーションの処理を行うという実装になっている。

だから、デフォルトで正確に32MByte/secに制限されているというわけでもないし、増やした所で指定した通りの速度が出るわけではない。

詳しくはbuffered_file.cのbuffered_rate_tick()あたりが参考になる。

それよりも、移行先でのディスクのsync(2)がネックになってたのでこっちを工夫したほうが良い、という結論でした。