Table of Contents

2025.05.02 KVM ホットマイグレーション終わらない

KVMでメモリが大量でメモリが頻繁に利用している場合マイグレーションが終わらない事があります。

現在の状態確認

この状態だと、ダウンタイムが0.3秒に収まるまでメモリをコピーしてから、切り替える設定になってます。
つまり、メモリが頻繁に利用されている場合、0.3秒内に収まらないと最後の切り替えを行わない。

# virsh qemu-monitor-command [ドメインID] --hmp --cmd "info migrate_parameters"
announce-initial: 50 ms
announce-max: 550 ms
announce-rounds: 5
announce-step: 100 ms
compress-level: 1
compress-threads: 8
compress-wait-thread: on
decompress-threads: 2
throttle-trigger-threshold: 50
cpu-throttle-initial: 20
cpu-throttle-increment: 10
cpu-throttle-tailslow: off
max-cpu-throttle: 99
tls-creds: ''
tls-hostname: ''
max-bandwidth: 134217728 bytes/second
downtime-limit: 300 ms
x-checkpoint-delay: 20000 ms
block-incremental: off
multifd-channels: 2
multifd-compression: none
xbzrle-cache-size: 67108864 bytes
max-postcopy-bandwidth: 0
tls-authz: ''

終わらない場合の対応方法

下記のコマンドで、ダウンタイムを3秒まで伸ばしてやると、メモリが頻繁に書き換えられてても3秒に収まれば、最終切り替えが実施されます。

virsh migrate-setmaxdowntime [ドメインID] 3000

終わらない時のログ

remainingが減って増えてを繰り返す。

# tail -f /var/log/libvirt/qemu/instance.log
857616@1751158543.161471:qmp_exit_query_migrate {"expected-downtime": 23080, "cpu-throttle-percentage": 60, "status": "active", "setup-time": 18, "total-time": 630524, "ram": {"total": 34495348736, "postcopy-requests": 0, "dirty-sync-count": 13, "multifd-bytes": 0, "pages-per-second": 27914, "downtime-bytes": 0, "page-size": 4096, "remaining": 60735488, "postcopy-bytes": 0, "mbps": 916.49230769230758, "transferred": 66350721470, "dirty-sync-missed-zero-copy": 0, "precopy-bytes": 66350721470, "duplicate": 658769, "dirty-pages-rate": 31935, "skipped": 0, "normal-bytes": 66215378944, "normal": 16165864}} 1
857616@1751158543.665727:qmp_enter_query_migrate {}

857616@1751158543.665861:qmp_exit_query_migrate {"expected-downtime": 24748, "cpu-throttle-percentage": 60, "status": "active", "setup-time": 18, "total-time": 631028, "ram": {"total": 34495348736, "postcopy-requests": 0, "dirty-sync-count": 13, "multifd-bytes": 0, "pages-per-second": 26032, "downtime-bytes": 0, "page-size": 4096, "remaining": 5259264, "postcopy-bytes": 0, "mbps": 854.70204878048776, "transferred": 66406306110, "dirty-sync-missed-zero-copy": 0, "precopy-bytes": 66406306110, "duplicate": 658769, "dirty-pages-rate": 31935, "skipped": 0, "normal-bytes": 66270855168, "normal": 16179408}} 1
523067@1751158543.698388:migration_throttle guest CPU throttled by 70%
857616@1751158544.169761:qmp_enter_query_migrate {}
857616@1751158544.169871:qmp_exit_query_migrate {"expected-downtime": 22914, "cpu-throttle-percentage": 70, "status": "active", "setup-time": 18, "total-time": 631532, "ram": {"total": 34495348736, "postcopy-requests": 0, "dirty-sync-count": 14, "multifd-bytes": 0, "pages-per-second": 28527, "downtime-bytes": 0, "page-size": 4096, "remaining": 2569916416, "postcopy-bytes": 0, "mbps": 915.7639272727273, "transferred": 66457643081, "dirty-sync-missed-zero-copy": 0, "precopy-bytes": 66457643081, "duplicate": 659220, "dirty-pages-rate": 26953, "skipped": 0, "normal-bytes": 66322087936, "normal": 16191916}} 1
857616@1751158544.672753:qmp_enter_query_migrate {}