148685a8eSMarkus Armbruster# -*- Mode: Python -*- 2f7160f32SAndrea Bolognani# vim: filetype=python 348685a8eSMarkus Armbruster# 448685a8eSMarkus Armbruster 548685a8eSMarkus Armbruster## 648685a8eSMarkus Armbruster# = Migration 748685a8eSMarkus Armbruster## 848685a8eSMarkus Armbruster 948685a8eSMarkus Armbruster{ 'include': 'common.json' } 109aca82baSJuan Quintela{ 'include': 'sockets.json' } 1148685a8eSMarkus Armbruster 1248685a8eSMarkus Armbruster## 1348685a8eSMarkus Armbruster# @MigrationStats: 1448685a8eSMarkus Armbruster# 1548685a8eSMarkus Armbruster# Detailed migration status. 1648685a8eSMarkus Armbruster# 1748685a8eSMarkus Armbruster# @transferred: amount of bytes already transferred to the target VM 1848685a8eSMarkus Armbruster# 19a937b6aaSMarkus Armbruster# @remaining: amount of bytes remaining to be transferred to the 20a937b6aaSMarkus Armbruster# target VM 2148685a8eSMarkus Armbruster# 2248685a8eSMarkus Armbruster# @total: total amount of bytes involved in the migration process 2348685a8eSMarkus Armbruster# 2448685a8eSMarkus Armbruster# @duplicate: number of duplicate (zero) pages (since 1.2) 2548685a8eSMarkus Armbruster# 2648685a8eSMarkus Armbruster# @normal: number of normal pages (since 1.2) 2748685a8eSMarkus Armbruster# 2848685a8eSMarkus Armbruster# @normal-bytes: number of normal bytes sent (since 1.2) 2948685a8eSMarkus Armbruster# 30a937b6aaSMarkus Armbruster# @dirty-pages-rate: number of pages dirtied by second by the guest 31a937b6aaSMarkus Armbruster# (since 1.3) 3248685a8eSMarkus Armbruster# 3348685a8eSMarkus Armbruster# @mbps: throughput in megabits/sec. (since 1.6) 3448685a8eSMarkus Armbruster# 35a937b6aaSMarkus Armbruster# @dirty-sync-count: number of times that dirty ram was synchronized 36a937b6aaSMarkus Armbruster# (since 2.1) 3748685a8eSMarkus Armbruster# 38a937b6aaSMarkus Armbruster# @postcopy-requests: The number of page requests received from the 39a937b6aaSMarkus Armbruster# destination (since 2.7) 4048685a8eSMarkus Armbruster# 4148685a8eSMarkus Armbruster# @page-size: The number of bytes per page for the various page-based 4248685a8eSMarkus Armbruster# statistics (since 2.10) 4348685a8eSMarkus Armbruster# 44a61c45bdSJuan Quintela# @multifd-bytes: The number of bytes sent through multifd (since 3.0) 45a61c45bdSJuan Quintela# 46aecbfe9cSXiao Guangrong# @pages-per-second: the number of memory pages transferred per second 47aecbfe9cSXiao Guangrong# (Since 4.0) 48aecbfe9cSXiao Guangrong# 49ae680668SDavid Edmondson# @precopy-bytes: The number of bytes sent in the pre-copy phase 50ae680668SDavid Edmondson# (since 7.0). 51ae680668SDavid Edmondson# 52ae680668SDavid Edmondson# @downtime-bytes: The number of bytes sent while the guest is paused 53ae680668SDavid Edmondson# (since 7.0). 54ae680668SDavid Edmondson# 55ae680668SDavid Edmondson# @postcopy-bytes: The number of bytes sent during the post-copy phase 56ae680668SDavid Edmondson# (since 7.0). 57ae680668SDavid Edmondson# 58a937b6aaSMarkus Armbruster# @dirty-sync-missed-zero-copy: Number of times dirty RAM 59a937b6aaSMarkus Armbruster# synchronization could not avoid copying dirty pages. This is 60a937b6aaSMarkus Armbruster# between 0 and @dirty-sync-count * @multifd-channels. (since 61a937b6aaSMarkus Armbruster# 7.1) 62a937b6aaSMarkus Armbruster# 639bc6e893SMarkus Armbruster# Since: 0.14 6448685a8eSMarkus Armbruster## 6548685a8eSMarkus Armbruster{ 'struct': 'MigrationStats', 6648685a8eSMarkus Armbruster 'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' , 677b24d326SJuan Quintela 'duplicate': 'int', 687b24d326SJuan Quintela 'normal': 'int', 6948685a8eSMarkus Armbruster 'normal-bytes': 'int', 'dirty-pages-rate': 'int', 7048685a8eSMarkus Armbruster 'mbps': 'number', 'dirty-sync-count': 'int', 71a61c45bdSJuan Quintela 'postcopy-requests': 'int', 'page-size': 'int', 72ae680668SDavid Edmondson 'multifd-bytes': 'uint64', 'pages-per-second': 'uint64', 73ae680668SDavid Edmondson 'precopy-bytes': 'uint64', 'downtime-bytes': 'uint64', 74cf20c897SLeonardo Bras 'postcopy-bytes': 'uint64', 75cf20c897SLeonardo Bras 'dirty-sync-missed-zero-copy': 'uint64' } } 7648685a8eSMarkus Armbruster 7748685a8eSMarkus Armbruster## 7848685a8eSMarkus Armbruster# @XBZRLECacheStats: 7948685a8eSMarkus Armbruster# 8048685a8eSMarkus Armbruster# Detailed XBZRLE migration cache statistics 8148685a8eSMarkus Armbruster# 8248685a8eSMarkus Armbruster# @cache-size: XBZRLE cache size 8348685a8eSMarkus Armbruster# 8448685a8eSMarkus Armbruster# @bytes: amount of bytes already transferred to the target VM 8548685a8eSMarkus Armbruster# 8648685a8eSMarkus Armbruster# @pages: amount of pages transferred to the target VM 8748685a8eSMarkus Armbruster# 8848685a8eSMarkus Armbruster# @cache-miss: number of cache miss 8948685a8eSMarkus Armbruster# 9048685a8eSMarkus Armbruster# @cache-miss-rate: rate of cache miss (since 2.1) 9148685a8eSMarkus Armbruster# 92e460a4b1SWei Wang# @encoding-rate: rate of encoded bytes (since 5.1) 93e460a4b1SWei Wang# 9448685a8eSMarkus Armbruster# @overflow: number of overflows 9548685a8eSMarkus Armbruster# 9648685a8eSMarkus Armbruster# Since: 1.2 9748685a8eSMarkus Armbruster## 9848685a8eSMarkus Armbruster{ 'struct': 'XBZRLECacheStats', 998b9407a0SMarkus Armbruster 'data': {'cache-size': 'size', 'bytes': 'int', 'pages': 'int', 10048685a8eSMarkus Armbruster 'cache-miss': 'int', 'cache-miss-rate': 'number', 101e460a4b1SWei Wang 'encoding-rate': 'number', 'overflow': 'int' } } 10248685a8eSMarkus Armbruster 10348685a8eSMarkus Armbruster## 10476e03000SXiao Guangrong# @CompressionStats: 10576e03000SXiao Guangrong# 10676e03000SXiao Guangrong# Detailed migration compression statistics 10776e03000SXiao Guangrong# 10876e03000SXiao Guangrong# @pages: amount of pages compressed and transferred to the target VM 10976e03000SXiao Guangrong# 110a937b6aaSMarkus Armbruster# @busy: count of times that no free thread was available to compress 111a937b6aaSMarkus Armbruster# data 11276e03000SXiao Guangrong# 11376e03000SXiao Guangrong# @busy-rate: rate of thread busy 11476e03000SXiao Guangrong# 11576e03000SXiao Guangrong# @compressed-size: amount of bytes after compression 11676e03000SXiao Guangrong# 11776e03000SXiao Guangrong# @compression-rate: rate of compressed size 11876e03000SXiao Guangrong# 11976e03000SXiao Guangrong# Since: 3.1 12076e03000SXiao Guangrong## 12176e03000SXiao Guangrong{ 'struct': 'CompressionStats', 12276e03000SXiao Guangrong 'data': {'pages': 'int', 'busy': 'int', 'busy-rate': 'number', 12376e03000SXiao Guangrong 'compressed-size': 'int', 'compression-rate': 'number' } } 12476e03000SXiao Guangrong 12576e03000SXiao Guangrong## 12648685a8eSMarkus Armbruster# @MigrationStatus: 12748685a8eSMarkus Armbruster# 12848685a8eSMarkus Armbruster# An enumeration of migration status. 12948685a8eSMarkus Armbruster# 13048685a8eSMarkus Armbruster# @none: no migration has ever happened. 13148685a8eSMarkus Armbruster# 13248685a8eSMarkus Armbruster# @setup: migration process has been initiated. 13348685a8eSMarkus Armbruster# 13448685a8eSMarkus Armbruster# @cancelling: in the process of cancelling migration. 13548685a8eSMarkus Armbruster# 13648685a8eSMarkus Armbruster# @cancelled: cancelling migration is finished. 13748685a8eSMarkus Armbruster# 13848685a8eSMarkus Armbruster# @active: in the process of doing migration. 13948685a8eSMarkus Armbruster# 140a937b6aaSMarkus Armbruster# @postcopy-active: like active, but now in postcopy mode. (since 141a937b6aaSMarkus Armbruster# 2.5) 14248685a8eSMarkus Armbruster# 14351f63ec7SPeter Maydell# @postcopy-paused: during postcopy but paused. (since 3.0) 144a688d2c1SPeter Xu# 14501bed0ffSMarkus Armbruster# @postcopy-recover-setup: setup phase for a postcopy recovery 14601bed0ffSMarkus Armbruster# process, preparing for a recovery phase to start. (since 9.1) 1474146b77eSPeter Xu# 148a937b6aaSMarkus Armbruster# @postcopy-recover: trying to recover from a paused postcopy. (since 149a937b6aaSMarkus Armbruster# 3.0) 150135b87b4SPeter Xu# 15148685a8eSMarkus Armbruster# @completed: migration is finished. 15248685a8eSMarkus Armbruster# 15348685a8eSMarkus Armbruster# @failed: some error occurred during migration process. 15448685a8eSMarkus Armbruster# 155a937b6aaSMarkus Armbruster# @colo: VM is in the process of fault tolerance, VM can not get into 156a937b6aaSMarkus Armbruster# this state unless colo capability is enabled for migration. 157a937b6aaSMarkus Armbruster# (since 2.8) 15848685a8eSMarkus Armbruster# 15931e06077SDr. David Alan Gilbert# @pre-switchover: Paused before device serialisation. (since 2.11) 16031e06077SDr. David Alan Gilbert# 161a937b6aaSMarkus Armbruster# @device: During device serialisation when pause-before-switchover is 162a937b6aaSMarkus Armbruster# enabled (since 2.11) 16331e06077SDr. David Alan Gilbert# 164a937b6aaSMarkus Armbruster# @wait-unplug: wait for device unplug request by guest OS to be 165a937b6aaSMarkus Armbruster# completed. (since 4.2) 166c7e0acd5SJens Freimann# 16748685a8eSMarkus Armbruster# Since: 2.3 16848685a8eSMarkus Armbruster## 16948685a8eSMarkus Armbruster{ 'enum': 'MigrationStatus', 17048685a8eSMarkus Armbruster 'data': [ 'none', 'setup', 'cancelling', 'cancelled', 171a688d2c1SPeter Xu 'active', 'postcopy-active', 'postcopy-paused', 1724146b77eSPeter Xu 'postcopy-recover-setup', 173135b87b4SPeter Xu 'postcopy-recover', 'completed', 'failed', 'colo', 174c7e0acd5SJens Freimann 'pre-switchover', 'device', 'wait-unplug' ] } 1753710586cSKirti Wankhede## 1763710586cSKirti Wankhede# @VfioStats: 1773710586cSKirti Wankhede# 1783710586cSKirti Wankhede# Detailed VFIO devices migration statistics 1793710586cSKirti Wankhede# 180a937b6aaSMarkus Armbruster# @transferred: amount of bytes transferred to the target VM by VFIO 181a937b6aaSMarkus Armbruster# devices 1823710586cSKirti Wankhede# 1833710586cSKirti Wankhede# Since: 5.2 1843710586cSKirti Wankhede## 1853710586cSKirti Wankhede{ 'struct': 'VfioStats', 1863710586cSKirti Wankhede 'data': {'transferred': 'int' } } 18748685a8eSMarkus Armbruster 18848685a8eSMarkus Armbruster## 18948685a8eSMarkus Armbruster# @MigrationInfo: 19048685a8eSMarkus Armbruster# 19148685a8eSMarkus Armbruster# Information about current migration process. 19248685a8eSMarkus Armbruster# 19348685a8eSMarkus Armbruster# @status: @MigrationStatus describing the current migration status. 194a937b6aaSMarkus Armbruster# If this field is not returned, no migration process has been 195a937b6aaSMarkus Armbruster# initiated 19648685a8eSMarkus Armbruster# 197a937b6aaSMarkus Armbruster# @ram: @MigrationStats containing detailed migration status, only 198a937b6aaSMarkus Armbruster# returned if status is 'active' or 'completed'(since 1.2) 19948685a8eSMarkus Armbruster# 20048685a8eSMarkus Armbruster# @xbzrle-cache: @XBZRLECacheStats containing detailed XBZRLE 20148685a8eSMarkus Armbruster# migration statistics, only returned if XBZRLE feature is on and 20248685a8eSMarkus Armbruster# status is 'active' or 'completed' (since 1.2) 20348685a8eSMarkus Armbruster# 20448685a8eSMarkus Armbruster# @total-time: total amount of milliseconds since migration started. 205a937b6aaSMarkus Armbruster# If migration has ended, it returns the total migration time. 206a937b6aaSMarkus Armbruster# (since 1.2) 20748685a8eSMarkus Armbruster# 208a937b6aaSMarkus Armbruster# @downtime: only present when migration finishes correctly total 209a937b6aaSMarkus Armbruster# downtime in milliseconds for the guest. (since 1.3) 21048685a8eSMarkus Armbruster# 211a937b6aaSMarkus Armbruster# @expected-downtime: only present while migration is active expected 212a937b6aaSMarkus Armbruster# downtime in milliseconds for the guest in last walk of the dirty 213a937b6aaSMarkus Armbruster# bitmap. (since 1.3) 21448685a8eSMarkus Armbruster# 215a660eed4SPeter Maydell# @setup-time: amount of setup time in milliseconds *before* the 216a937b6aaSMarkus Armbruster# iterations begin but *after* the QMP command is issued. This is 217a937b6aaSMarkus Armbruster# designed to provide an accounting of any activities (such as 218a937b6aaSMarkus Armbruster# RDMA pinning) which may be expensive, but do not actually occur 219a937b6aaSMarkus Armbruster# during the iterative migration rounds themselves. (since 1.6) 22048685a8eSMarkus Armbruster# 22148685a8eSMarkus Armbruster# @cpu-throttle-percentage: percentage of time guest cpus are being 222a937b6aaSMarkus Armbruster# throttled during auto-converge. This is only present when 223a937b6aaSMarkus Armbruster# auto-converge has started throttling guest cpus. (Since 2.7) 22448685a8eSMarkus Armbruster# 225c94143e5SPeter Xu# @error-desc: the human readable error description string. Clients 226c94143e5SPeter Xu# should not attempt to parse the error strings. (Since 2.7) 22748685a8eSMarkus Armbruster# 228a937b6aaSMarkus Armbruster# @postcopy-blocktime: total time when all vCPU were blocked during 229a937b6aaSMarkus Armbruster# postcopy live migration. This is only present when the 230a937b6aaSMarkus Armbruster# postcopy-blocktime migration capability is enabled. (Since 3.0) 23165ace060SAlexey Perevalov# 232a937b6aaSMarkus Armbruster# @postcopy-vcpu-blocktime: list of the postcopy blocktime per vCPU. 233a937b6aaSMarkus Armbruster# This is only present when the postcopy-blocktime migration 234a937b6aaSMarkus Armbruster# capability is enabled. (Since 3.0) 23565ace060SAlexey Perevalov# 236a937b6aaSMarkus Armbruster# @socket-address: Only used for tcp, to know what the real port is 237a937b6aaSMarkus Armbruster# (Since 4.0) 2389aca82baSJuan Quintela# 239a937b6aaSMarkus Armbruster# @vfio: @VfioStats containing detailed VFIO devices migration 240a937b6aaSMarkus Armbruster# statistics, only returned if VFIO device is present, migration 241a937b6aaSMarkus Armbruster# is supported by all VFIO devices and status is 'active' or 242a937b6aaSMarkus Armbruster# 'completed' (since 5.2) 2433710586cSKirti Wankhede# 244a937b6aaSMarkus Armbruster# @blocked-reasons: A list of reasons an outgoing migration is 245a937b6aaSMarkus Armbruster# blocked. Present and non-empty when migration is blocked. 246e11ce6c0SMarkus Armbruster# (since 6.0) 247e11ce6c0SMarkus Armbruster# 24801bed0ffSMarkus Armbruster# @dirty-limit-throttle-time-per-round: Maximum throttle time (in 24901bed0ffSMarkus Armbruster# microseconds) of virtual CPUs each dirty ring full round, which 25001bed0ffSMarkus Armbruster# shows how MigrationCapability dirty-limit affects the guest 25101bed0ffSMarkus Armbruster# during live migration. (Since 8.1) 25215699cf5SHyman Huang(黄勇)# 2538abc8115SHyman Huang(黄勇)# @dirty-limit-ring-full-time: Estimated average dirty ring full time 2548abc8115SHyman Huang(黄勇)# (in microseconds) for each dirty ring full round. The value 2558abc8115SHyman Huang(黄勇)# equals the dirty ring memory size divided by the average dirty 2568abc8115SHyman Huang(黄勇)# page rate of the virtual CPU, which can be used to observe the 2578abc8115SHyman Huang(黄勇)# average memory load of the virtual CPU indirectly. Note that 2588abc8115SHyman Huang(黄勇)# zero means guest doesn't dirty memory. (Since 8.1) 25915699cf5SHyman Huang(黄勇)# 2609bc6e893SMarkus Armbruster# Since: 0.14 26148685a8eSMarkus Armbruster## 26248685a8eSMarkus Armbruster{ 'struct': 'MigrationInfo', 26348685a8eSMarkus Armbruster 'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats', 2643710586cSKirti Wankhede '*vfio': 'VfioStats', 26548685a8eSMarkus Armbruster '*xbzrle-cache': 'XBZRLECacheStats', 26648685a8eSMarkus Armbruster '*total-time': 'int', 26748685a8eSMarkus Armbruster '*expected-downtime': 'int', 26848685a8eSMarkus Armbruster '*downtime': 'int', 26948685a8eSMarkus Armbruster '*setup-time': 'int', 27048685a8eSMarkus Armbruster '*cpu-throttle-percentage': 'int', 27165ace060SAlexey Perevalov '*error-desc': 'str', 2723af8554bSDr. David Alan Gilbert '*blocked-reasons': ['str'], 27365ace060SAlexey Perevalov '*postcopy-blocktime': 'uint32', 27476e03000SXiao Guangrong '*postcopy-vcpu-blocktime': ['uint32'], 27515699cf5SHyman Huang(黄勇) '*socket-address': ['SocketAddress'], 27615699cf5SHyman Huang(黄勇) '*dirty-limit-throttle-time-per-round': 'uint64', 27715699cf5SHyman Huang(黄勇) '*dirty-limit-ring-full-time': 'uint64'} } 27848685a8eSMarkus Armbruster 27948685a8eSMarkus Armbruster## 28048685a8eSMarkus Armbruster# @query-migrate: 28148685a8eSMarkus Armbruster# 28248685a8eSMarkus Armbruster# Returns information about current migration process. If migration 28348685a8eSMarkus Armbruster# is active there will be another json-object with RAM migration 284eef0bae3SFabiano Rosas# status. 28548685a8eSMarkus Armbruster# 28648685a8eSMarkus Armbruster# Returns: @MigrationInfo 28748685a8eSMarkus Armbruster# 2889bc6e893SMarkus Armbruster# Since: 0.14 28948685a8eSMarkus Armbruster# 290a9eab6e2SJohn Snow# .. qmp-example:: 291a9eab6e2SJohn Snow# :title: Before the first migration 29248685a8eSMarkus Armbruster# 29348685a8eSMarkus Armbruster# -> { "execute": "query-migrate" } 29448685a8eSMarkus Armbruster# <- { "return": {} } 29548685a8eSMarkus Armbruster# 296a9eab6e2SJohn Snow# .. qmp-example:: 297a9eab6e2SJohn Snow# :title: Migration is done and has succeeded 29848685a8eSMarkus Armbruster# 29948685a8eSMarkus Armbruster# -> { "execute": "query-migrate" } 30048685a8eSMarkus Armbruster# <- { "return": { 30148685a8eSMarkus Armbruster# "status": "completed", 302be1d2c49Sjialina01# "total-time":12345, 303be1d2c49Sjialina01# "setup-time":12345, 304be1d2c49Sjialina01# "downtime":12345, 30548685a8eSMarkus Armbruster# "ram":{ 30648685a8eSMarkus Armbruster# "transferred":123, 30748685a8eSMarkus Armbruster# "remaining":123, 30848685a8eSMarkus Armbruster# "total":246, 30948685a8eSMarkus Armbruster# "duplicate":123, 31048685a8eSMarkus Armbruster# "normal":123, 31148685a8eSMarkus Armbruster# "normal-bytes":123456, 31248685a8eSMarkus Armbruster# "dirty-sync-count":15 31348685a8eSMarkus Armbruster# } 31448685a8eSMarkus Armbruster# } 31548685a8eSMarkus Armbruster# } 31648685a8eSMarkus Armbruster# 317a9eab6e2SJohn Snow# .. qmp-example:: 318a9eab6e2SJohn Snow# :title: Migration is done and has failed 31948685a8eSMarkus Armbruster# 32048685a8eSMarkus Armbruster# -> { "execute": "query-migrate" } 32148685a8eSMarkus Armbruster# <- { "return": { "status": "failed" } } 32248685a8eSMarkus Armbruster# 323a9eab6e2SJohn Snow# .. qmp-example:: 324a9eab6e2SJohn Snow# :title: Migration is being performed 32548685a8eSMarkus Armbruster# 32648685a8eSMarkus Armbruster# -> { "execute": "query-migrate" } 32748685a8eSMarkus Armbruster# <- { 32848685a8eSMarkus Armbruster# "return":{ 32948685a8eSMarkus Armbruster# "status":"active", 330be1d2c49Sjialina01# "total-time":12345, 331be1d2c49Sjialina01# "setup-time":12345, 332be1d2c49Sjialina01# "expected-downtime":12345, 33348685a8eSMarkus Armbruster# "ram":{ 33448685a8eSMarkus Armbruster# "transferred":123, 33548685a8eSMarkus Armbruster# "remaining":123, 33648685a8eSMarkus Armbruster# "total":246, 33748685a8eSMarkus Armbruster# "duplicate":123, 33848685a8eSMarkus Armbruster# "normal":123, 33948685a8eSMarkus Armbruster# "normal-bytes":123456, 34048685a8eSMarkus Armbruster# "dirty-sync-count":15 34148685a8eSMarkus Armbruster# } 34248685a8eSMarkus Armbruster# } 34348685a8eSMarkus Armbruster# } 34448685a8eSMarkus Armbruster# 345a9eab6e2SJohn Snow# .. qmp-example:: 346a9eab6e2SJohn Snow# :title: Migration is being performed and XBZRLE is active 34748685a8eSMarkus Armbruster# 34848685a8eSMarkus Armbruster# -> { "execute": "query-migrate" } 34948685a8eSMarkus Armbruster# <- { 35048685a8eSMarkus Armbruster# "return":{ 35148685a8eSMarkus Armbruster# "status":"active", 352be1d2c49Sjialina01# "total-time":12345, 353be1d2c49Sjialina01# "setup-time":12345, 354be1d2c49Sjialina01# "expected-downtime":12345, 35548685a8eSMarkus Armbruster# "ram":{ 35648685a8eSMarkus Armbruster# "total":1057024, 35748685a8eSMarkus Armbruster# "remaining":1053304, 35848685a8eSMarkus Armbruster# "transferred":3720, 35948685a8eSMarkus Armbruster# "duplicate":10, 36048685a8eSMarkus Armbruster# "normal":3333, 36148685a8eSMarkus Armbruster# "normal-bytes":3412992, 36248685a8eSMarkus Armbruster# "dirty-sync-count":15 36348685a8eSMarkus Armbruster# }, 36448685a8eSMarkus Armbruster# "xbzrle-cache":{ 36548685a8eSMarkus Armbruster# "cache-size":67108864, 36648685a8eSMarkus Armbruster# "bytes":20971520, 36748685a8eSMarkus Armbruster# "pages":2444343, 36848685a8eSMarkus Armbruster# "cache-miss":2244, 36948685a8eSMarkus Armbruster# "cache-miss-rate":0.123, 370e460a4b1SWei Wang# "encoding-rate":80.1, 37148685a8eSMarkus Armbruster# "overflow":34434 37248685a8eSMarkus Armbruster# } 37348685a8eSMarkus Armbruster# } 37448685a8eSMarkus Armbruster# } 37548685a8eSMarkus Armbruster## 37648685a8eSMarkus Armbruster{ 'command': 'query-migrate', 'returns': 'MigrationInfo' } 37748685a8eSMarkus Armbruster 37848685a8eSMarkus Armbruster## 37948685a8eSMarkus Armbruster# @MigrationCapability: 38048685a8eSMarkus Armbruster# 38148685a8eSMarkus Armbruster# Migration capabilities enumeration 38248685a8eSMarkus Armbruster# 383a937b6aaSMarkus Armbruster# @xbzrle: Migration supports xbzrle (Xor Based Zero Run Length 384a937b6aaSMarkus Armbruster# Encoding). This feature allows us to minimize migration traffic 385a937b6aaSMarkus Armbruster# for certain work loads, by sending compressed difference of the 386a937b6aaSMarkus Armbruster# pages 38748685a8eSMarkus Armbruster# 388a937b6aaSMarkus Armbruster# @rdma-pin-all: Controls whether or not the entire VM memory 389a937b6aaSMarkus Armbruster# footprint is mlock()'d on demand or all at once. Refer to 390a937b6aaSMarkus Armbruster# docs/rdma.txt for usage. Disabled by default. (since 2.0) 39148685a8eSMarkus Armbruster# 392a937b6aaSMarkus Armbruster# @zero-blocks: During storage migration encode blocks of zeroes 393a937b6aaSMarkus Armbruster# efficiently. This essentially saves 1MB of zeroes per block on 394a937b6aaSMarkus Armbruster# the wire. Enabling requires source and target VM to support 395a937b6aaSMarkus Armbruster# this feature. To enable it is sufficient to enable the 39601bed0ffSMarkus Armbruster# capability on the source VM. The feature is disabled by 39701bed0ffSMarkus Armbruster# default. (since 1.6) 39848685a8eSMarkus Armbruster# 399e4ceec29SJuan Quintela# @events: generate events for each migration state change (since 2.4) 40048685a8eSMarkus Armbruster# 401a937b6aaSMarkus Armbruster# @auto-converge: If enabled, QEMU will automatically throttle down 402a937b6aaSMarkus Armbruster# the guest to speed up convergence of RAM migration. (since 1.6) 40348685a8eSMarkus Armbruster# 404a937b6aaSMarkus Armbruster# @postcopy-ram: Start executing on the migration target before all of 405a937b6aaSMarkus Armbruster# RAM has been migrated, pulling the remaining pages along as 406a937b6aaSMarkus Armbruster# needed. The capacity must have the same setting on both source 407a937b6aaSMarkus Armbruster# and target or migration will not even start. NOTE: If the 408a937b6aaSMarkus Armbruster# migration fails during postcopy the VM will fail. (since 2.6) 40948685a8eSMarkus Armbruster# 410a937b6aaSMarkus Armbruster# @x-colo: If enabled, migration will never end, and the state of the 411a937b6aaSMarkus Armbruster# VM on the primary side will be migrated continuously to the VM 412a937b6aaSMarkus Armbruster# on secondary side, this process is called COarse-Grain LOck 413a937b6aaSMarkus Armbruster# Stepping (COLO) for Non-stop Service. (since 2.8) 41448685a8eSMarkus Armbruster# 415a937b6aaSMarkus Armbruster# @release-ram: if enabled, qemu will free the migrated ram pages on 416a937b6aaSMarkus Armbruster# the source during postcopy-ram migration. (since 2.9) 41748685a8eSMarkus Armbruster# 41848685a8eSMarkus Armbruster# @return-path: If enabled, migration will use the return path even 41948685a8eSMarkus Armbruster# for precopy. (since 2.10) 42048685a8eSMarkus Armbruster# 421a937b6aaSMarkus Armbruster# @pause-before-switchover: Pause outgoing migration before 422a937b6aaSMarkus Armbruster# serialising device state and before disabling block IO (since 423a937b6aaSMarkus Armbruster# 2.11) 42493fbd031SDr. David Alan Gilbert# 425cbfd6c95SJuan Quintela# @multifd: Use more than one fd for migration (since 4.0) 42630126bbfSJuan Quintela# 42755efc8c2SVladimir Sementsov-Ogievskiy# @dirty-bitmaps: If enabled, QEMU will migrate named dirty bitmaps. 42855efc8c2SVladimir Sementsov-Ogievskiy# (since 2.12) 42955efc8c2SVladimir Sementsov-Ogievskiy# 430f22f928eSAlexey Perevalov# @postcopy-blocktime: Calculate downtime for postcopy live migration 43151f63ec7SPeter Maydell# (since 3.0) 432f22f928eSAlexey Perevalov# 433a937b6aaSMarkus Armbruster# @late-block-activate: If enabled, the destination will not activate 434a937b6aaSMarkus Armbruster# block devices (and thus take locks) immediately at the end of 435a937b6aaSMarkus Armbruster# migration. (since 3.0) 4360f073f44SDr. David Alan Gilbert# 4379e272073SMarkus Armbruster# @x-ignore-shared: If enabled, QEMU will not migrate shared memory 4389e272073SMarkus Armbruster# that is accessible on the destination machine. (since 4.0) 43918269069SYury Kotov# 440b9d68df6SYury Kotov# @validate-uuid: Send the UUID of the source to allow the destination 441b9d68df6SYury Kotov# to ensure it is the same. (since 4.2) 442b9d68df6SYury Kotov# 443a937b6aaSMarkus Armbruster# @background-snapshot: If enabled, the migration stream will be a 444a937b6aaSMarkus Armbruster# snapshot of the VM exactly at the point when the migration 445209e64d9SMarkus Armbruster# procedure starts. The VM RAM is saved with running VM. 446209e64d9SMarkus Armbruster# (since 6.0) 4476e8c25b4SAndrey Gruzdev# 448a937b6aaSMarkus Armbruster# @zero-copy-send: Controls behavior on sending memory pages on 449a937b6aaSMarkus Armbruster# migration. When true, enables a zero-copy mechanism for sending 450a937b6aaSMarkus Armbruster# memory pages, if host supports it. Requires that QEMU be 451a937b6aaSMarkus Armbruster# permitted to use locked memory for guest RAM pages. (since 7.1) 452a937b6aaSMarkus Armbruster# 453a937b6aaSMarkus Armbruster# @postcopy-preempt: If enabled, the migration process will allow 454a937b6aaSMarkus Armbruster# postcopy requests to preempt precopy stream, so postcopy 455a937b6aaSMarkus Armbruster# requests will be handled faster. This is a performance feature 456a937b6aaSMarkus Armbruster# and should not affect the correctness of postcopy migration. 457ce5b0f4aSPeter Xu# (since 7.1) 4581abaec9aSLeonardo Bras# 4596574232fSAvihai Horon# @switchover-ack: If enabled, migration will not stop the source VM 4606574232fSAvihai Horon# and complete the migration until an ACK is received from the 4616574232fSAvihai Horon# destination that it's OK to do so. Exactly when this ACK is 4629e272073SMarkus Armbruster# sent depends on the migrated devices that use this feature. For 4639e272073SMarkus Armbruster# example, a device can use it to make sure some of its data is 4649e272073SMarkus Armbruster# sent and loaded in the destination before doing switchover. 4656574232fSAvihai Horon# This can reduce downtime if devices that support this capability 4666574232fSAvihai Horon# are present. 'return-path' capability must be enabled to use 4676574232fSAvihai Horon# it. (since 8.1) 4686574232fSAvihai Horon# 469ef965377SHyman Huang(黄勇)# @dirty-limit: If enabled, migration will throttle vCPUs as needed to 470ef965377SHyman Huang(黄勇)# keep their dirty page rate within @vcpu-dirty-limit. This can 471ef965377SHyman Huang(黄勇)# improve responsiveness of large guests during live migration, 472ef965377SHyman Huang(黄勇)# and can result in more stable read performance. Requires KVM 473ef965377SHyman Huang(黄勇)# with accelerator property "dirty-ring-size" set. (Since 8.1) 474dc623955SHyman Huang(黄勇)# 4754ed49febSFabiano Rosas# @mapped-ram: Migrate using fixed offsets in the migration file for 4764ed49febSFabiano Rosas# each RAM page. Requires a migration URI that supports seeking, 4774ed49febSFabiano Rosas# such as a file. (since 9.0) 4784ed49febSFabiano Rosas# 4799fb49daaSMarkus Armbruster# Features: 480a937b6aaSMarkus Armbruster# 4819fb49daaSMarkus Armbruster# @unstable: Members @x-colo and @x-ignore-shared are experimental. 48273581a04SFabiano Rosas# @deprecated: Member @zero-blocks is deprecated as being part of 48373581a04SFabiano Rosas# block migration which was already removed. 4849fb49daaSMarkus Armbruster# 48548685a8eSMarkus Armbruster# Since: 1.2 48648685a8eSMarkus Armbruster## 48748685a8eSMarkus Armbruster{ 'enum': 'MigrationCapability', 48873581a04SFabiano Rosas 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 48973581a04SFabiano Rosas { 'name': 'zero-blocks', 'features': [ 'deprecated' ] }, 490864128dfSJuan Quintela 'events', 'postcopy-ram', 4919fb49daaSMarkus Armbruster { 'name': 'x-colo', 'features': [ 'unstable' ] }, 4929fb49daaSMarkus Armbruster 'release-ram', 49366db46caSJuan Quintela 'return-path', 'pause-before-switchover', 'multifd', 49418269069SYury Kotov 'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate', 4959fb49daaSMarkus Armbruster { 'name': 'x-ignore-shared', 'features': [ 'unstable' ] }, 4961abaec9aSLeonardo Bras 'validate-uuid', 'background-snapshot', 497dc623955SHyman Huang(黄勇) 'zero-copy-send', 'postcopy-preempt', 'switchover-ack', 4984ed49febSFabiano Rosas 'dirty-limit', 'mapped-ram'] } 49948685a8eSMarkus Armbruster 50048685a8eSMarkus Armbruster## 50148685a8eSMarkus Armbruster# @MigrationCapabilityStatus: 50248685a8eSMarkus Armbruster# 50348685a8eSMarkus Armbruster# Migration capability information 50448685a8eSMarkus Armbruster# 50548685a8eSMarkus Armbruster# @capability: capability enum 50648685a8eSMarkus Armbruster# 50748685a8eSMarkus Armbruster# @state: capability state bool 50848685a8eSMarkus Armbruster# 50948685a8eSMarkus Armbruster# Since: 1.2 51048685a8eSMarkus Armbruster## 51148685a8eSMarkus Armbruster{ 'struct': 'MigrationCapabilityStatus', 51248685a8eSMarkus Armbruster 'data': { 'capability': 'MigrationCapability', 'state': 'bool' } } 51348685a8eSMarkus Armbruster 51448685a8eSMarkus Armbruster## 51548685a8eSMarkus Armbruster# @migrate-set-capabilities: 51648685a8eSMarkus Armbruster# 51748685a8eSMarkus Armbruster# Enable/Disable the following migration capabilities (like xbzrle) 51848685a8eSMarkus Armbruster# 51948685a8eSMarkus Armbruster# @capabilities: json array of capability modifications to make 52048685a8eSMarkus Armbruster# 52148685a8eSMarkus Armbruster# Since: 1.2 52248685a8eSMarkus Armbruster# 52314b48aaaSJohn Snow# .. qmp-example:: 52448685a8eSMarkus Armbruster# 52548685a8eSMarkus Armbruster# -> { "execute": "migrate-set-capabilities" , "arguments": 52648685a8eSMarkus Armbruster# { "capabilities": [ { "capability": "xbzrle", "state": true } ] } } 52737fa48a4SMarkus Armbruster# <- { "return": {} } 52848685a8eSMarkus Armbruster## 52948685a8eSMarkus Armbruster{ 'command': 'migrate-set-capabilities', 53048685a8eSMarkus Armbruster 'data': { 'capabilities': ['MigrationCapabilityStatus'] } } 53148685a8eSMarkus Armbruster 53248685a8eSMarkus Armbruster## 53348685a8eSMarkus Armbruster# @query-migrate-capabilities: 53448685a8eSMarkus Armbruster# 53548685a8eSMarkus Armbruster# Returns information about the current migration capabilities status 53648685a8eSMarkus Armbruster# 537d93ed1bdSMarkus Armbruster# Returns: @MigrationCapabilityStatus 53848685a8eSMarkus Armbruster# 53948685a8eSMarkus Armbruster# Since: 1.2 54048685a8eSMarkus Armbruster# 54114b48aaaSJohn Snow# .. qmp-example:: 54248685a8eSMarkus Armbruster# 54348685a8eSMarkus Armbruster# -> { "execute": "query-migrate-capabilities" } 54448685a8eSMarkus Armbruster# <- { "return": [ 54548685a8eSMarkus Armbruster# {"state": false, "capability": "xbzrle"}, 54648685a8eSMarkus Armbruster# {"state": false, "capability": "rdma-pin-all"}, 54748685a8eSMarkus Armbruster# {"state": false, "capability": "auto-converge"}, 54848685a8eSMarkus Armbruster# {"state": false, "capability": "zero-blocks"}, 54948685a8eSMarkus Armbruster# {"state": true, "capability": "events"}, 55048685a8eSMarkus Armbruster# {"state": false, "capability": "postcopy-ram"}, 55148685a8eSMarkus Armbruster# {"state": false, "capability": "x-colo"} 55248685a8eSMarkus Armbruster# ]} 55348685a8eSMarkus Armbruster## 55448685a8eSMarkus Armbruster{ 'command': 'query-migrate-capabilities', 'returns': ['MigrationCapabilityStatus']} 55548685a8eSMarkus Armbruster 55648685a8eSMarkus Armbruster## 55796eef042SJuan Quintela# @MultiFDCompression: 55896eef042SJuan Quintela# 55996eef042SJuan Quintela# An enumeration of multifd compression methods. 56096eef042SJuan Quintela# 56196eef042SJuan Quintela# @none: no compression. 562a937b6aaSMarkus Armbruster# 5637ec2c2b3SJuan Quintela# @zlib: use zlib compression method. 564a937b6aaSMarkus Armbruster# 56587dc6f5fSJuan Quintela# @zstd: use zstd compression method. 56696eef042SJuan Quintela# 56780484f94SBryan Zhang# @qatzip: use qatzip compression method. (Since 9.2) 56880484f94SBryan Zhang# 569354cac28SYuan Liu# @qpl: use qpl compression method. Query Processing Library(qpl) is 570354cac28SYuan Liu# based on the deflate compression algorithm and use the Intel 57101bed0ffSMarkus Armbruster# In-Memory Analytics Accelerator(IAA) accelerated compression and 57201bed0ffSMarkus Armbruster# decompression. (Since 9.1) 573354cac28SYuan Liu# 574f3d8bb75SShameer Kolothum# @uadk: use UADK library compression method. (Since 9.1) 575f3d8bb75SShameer Kolothum# 57696eef042SJuan Quintela# Since: 5.0 57796eef042SJuan Quintela## 57896eef042SJuan Quintela{ 'enum': 'MultiFDCompression', 5797b29353fSMarkus Armbruster 'prefix': 'MULTIFD_COMPRESSION', 58087dc6f5fSJuan Quintela 'data': [ 'none', 'zlib', 581354cac28SYuan Liu { 'name': 'zstd', 'if': 'CONFIG_ZSTD' }, 58280484f94SBryan Zhang { 'name': 'qatzip', 'if': 'CONFIG_QATZIP'}, 583f3d8bb75SShameer Kolothum { 'name': 'qpl', 'if': 'CONFIG_QPL' }, 584f3d8bb75SShameer Kolothum { 'name': 'uadk', 'if': 'CONFIG_UADK' } ] } 58596eef042SJuan Quintela 58696eef042SJuan Quintela## 587eea1e5c9SSteve Sistare# @MigMode: 588eea1e5c9SSteve Sistare# 589eea1e5c9SSteve Sistare# @normal: the original form of migration. (since 8.2) 590eea1e5c9SSteve Sistare# 591209e64d9SMarkus Armbruster# @cpr-reboot: The migrate command stops the VM and saves state to the 592209e64d9SMarkus Armbruster# URI. After quitting QEMU, the user resumes by running QEMU 593209e64d9SMarkus Armbruster# -incoming. 594ce5db1cbSSteve Sistare# 59587a28487SSteve Sistare# This mode allows the user to quit QEMU, optionally update and 59687a28487SSteve Sistare# reboot the OS, and restart QEMU. If the user reboots, the URI 59787a28487SSteve Sistare# must persist across the reboot, such as by using a file. 598ce5db1cbSSteve Sistare# 59987a28487SSteve Sistare# Unlike normal mode, the use of certain local storage options 60087a28487SSteve Sistare# does not block the migration, but the user must not modify the 60187a28487SSteve Sistare# contents of guest block devices between the quit and restart. 602ce5db1cbSSteve Sistare# 603209e64d9SMarkus Armbruster# This mode supports VFIO devices provided the user first puts the 604209e64d9SMarkus Armbruster# guest in the suspended runstate, such as by issuing 60587a28487SSteve Sistare# guest-suspend-ram to the QEMU guest agent. 606ce5db1cbSSteve Sistare# 60787a28487SSteve Sistare# Best performance is achieved when the memory backend is shared 60887a28487SSteve Sistare# and the @x-ignore-shared migration capability is set, but this 60987a28487SSteve Sistare# is not required. Further, if the user reboots before restarting 61087a28487SSteve Sistare# such a configuration, the shared memory must persist across the 61187a28487SSteve Sistare# reboot, such as by backing it with a dax device. 612ce5db1cbSSteve Sistare# 61387a28487SSteve Sistare# @cpr-reboot may not be used with postcopy, background-snapshot, 61487a28487SSteve Sistare# or COLO. 615cbdafc1bSSteve Sistare# 616a87e6451SSteve Sistare# (since 8.2) 617eea1e5c9SSteve Sistare## 618eea1e5c9SSteve Sistare{ 'enum': 'MigMode', 619a87e6451SSteve Sistare 'data': [ 'normal', 'cpr-reboot' ] } 620eea1e5c9SSteve Sistare 621eea1e5c9SSteve Sistare## 6225fdbb1dfSHao Xiang# @ZeroPageDetection: 6235fdbb1dfSHao Xiang# 6245fdbb1dfSHao Xiang# @none: Do not perform zero page checking. 6255fdbb1dfSHao Xiang# 6265fdbb1dfSHao Xiang# @legacy: Perform zero page checking in main migration thread. 6275fdbb1dfSHao Xiang# 628303e6f54SHao Xiang# @multifd: Perform zero page checking in multifd sender thread if 629209e64d9SMarkus Armbruster# multifd migration is enabled, else in the main migration thread 630209e64d9SMarkus Armbruster# as for @legacy. 631303e6f54SHao Xiang# 6325fdbb1dfSHao Xiang# Since: 9.0 6335fdbb1dfSHao Xiang## 6345fdbb1dfSHao Xiang{ 'enum': 'ZeroPageDetection', 635303e6f54SHao Xiang 'data': [ 'none', 'legacy', 'multifd' ] } 6365fdbb1dfSHao Xiang 6375fdbb1dfSHao Xiang## 6386e9f21a2SPeter Krempa# @BitmapMigrationBitmapAliasTransform: 6396e9f21a2SPeter Krempa# 640a937b6aaSMarkus Armbruster# @persistent: If present, the bitmap will be made persistent or 641a937b6aaSMarkus Armbruster# transient depending on this parameter. 6426e9f21a2SPeter Krempa# 6436e9f21a2SPeter Krempa# Since: 6.0 6446e9f21a2SPeter Krempa## 6456e9f21a2SPeter Krempa{ 'struct': 'BitmapMigrationBitmapAliasTransform', 6466e9f21a2SPeter Krempa 'data': { 6476e9f21a2SPeter Krempa '*persistent': 'bool' 6486e9f21a2SPeter Krempa } } 6496e9f21a2SPeter Krempa 6506e9f21a2SPeter Krempa## 65131e4c354SMax Reitz# @BitmapMigrationBitmapAlias: 65231e4c354SMax Reitz# 65331e4c354SMax Reitz# @name: The name of the bitmap. 65431e4c354SMax Reitz# 65531e4c354SMax Reitz# @alias: An alias name for migration (for example the bitmap name on 65631e4c354SMax Reitz# the opposite site). 65731e4c354SMax Reitz# 658a937b6aaSMarkus Armbruster# @transform: Allows the modification of the migrated bitmap. (since 659a937b6aaSMarkus Armbruster# 6.0) 6606e9f21a2SPeter Krempa# 66131e4c354SMax Reitz# Since: 5.2 66231e4c354SMax Reitz## 66331e4c354SMax Reitz{ 'struct': 'BitmapMigrationBitmapAlias', 66431e4c354SMax Reitz 'data': { 66531e4c354SMax Reitz 'name': 'str', 6666e9f21a2SPeter Krempa 'alias': 'str', 6676e9f21a2SPeter Krempa '*transform': 'BitmapMigrationBitmapAliasTransform' 66831e4c354SMax Reitz } } 66931e4c354SMax Reitz 67031e4c354SMax Reitz## 67131e4c354SMax Reitz# @BitmapMigrationNodeAlias: 67231e4c354SMax Reitz# 67331e4c354SMax Reitz# Maps a block node name and the bitmaps it has to aliases for dirty 67431e4c354SMax Reitz# bitmap migration. 67531e4c354SMax Reitz# 67631e4c354SMax Reitz# @node-name: A block node name. 67731e4c354SMax Reitz# 678a937b6aaSMarkus Armbruster# @alias: An alias block node name for migration (for example the node 679a937b6aaSMarkus Armbruster# name on the opposite site). 68031e4c354SMax Reitz# 68131e4c354SMax Reitz# @bitmaps: Mappings for the bitmaps on this node. 68231e4c354SMax Reitz# 68331e4c354SMax Reitz# Since: 5.2 68431e4c354SMax Reitz## 68531e4c354SMax Reitz{ 'struct': 'BitmapMigrationNodeAlias', 68631e4c354SMax Reitz 'data': { 68731e4c354SMax Reitz 'node-name': 'str', 68831e4c354SMax Reitz 'alias': 'str', 68931e4c354SMax Reitz 'bitmaps': [ 'BitmapMigrationBitmapAlias' ] 69031e4c354SMax Reitz } } 69131e4c354SMax Reitz 69231e4c354SMax Reitz## 69348685a8eSMarkus Armbruster# @MigrationParameter: 69448685a8eSMarkus Armbruster# 69548685a8eSMarkus Armbruster# Migration parameters enumeration 69648685a8eSMarkus Armbruster# 697a937b6aaSMarkus Armbruster# @announce-initial: Initial delay (in milliseconds) before sending 698a937b6aaSMarkus Armbruster# the first announce (Since 4.0) 699ee3d96baSDr. David Alan Gilbert# 700a937b6aaSMarkus Armbruster# @announce-max: Maximum delay (in milliseconds) between packets in 701a937b6aaSMarkus Armbruster# the announcement (Since 4.0) 702ee3d96baSDr. David Alan Gilbert# 703a937b6aaSMarkus Armbruster# @announce-rounds: Number of self-announce packets sent after 704a937b6aaSMarkus Armbruster# migration (Since 4.0) 705ee3d96baSDr. David Alan Gilbert# 706a937b6aaSMarkus Armbruster# @announce-step: Increase in delay (in milliseconds) between 707a937b6aaSMarkus Armbruster# subsequent packets in the announcement (Since 4.0) 708ee3d96baSDr. David Alan Gilbert# 709a937b6aaSMarkus Armbruster# @throttle-trigger-threshold: The ratio of bytes_dirty_period and 710a937b6aaSMarkus Armbruster# bytes_xfer_period to trigger throttling. It is expressed as 711a937b6aaSMarkus Armbruster# percentage. The default value is 50. (Since 5.0) 712dc14a470SKeqian Zhu# 713a937b6aaSMarkus Armbruster# @cpu-throttle-initial: Initial percentage of time guest cpus are 714a937b6aaSMarkus Armbruster# throttled when migration auto-converge is activated. The 71548685a8eSMarkus Armbruster# default value is 20. (Since 2.7) 71648685a8eSMarkus Armbruster# 71748685a8eSMarkus Armbruster# @cpu-throttle-increment: throttle percentage increase each time 718a937b6aaSMarkus Armbruster# auto-converge detects that migration is not making progress. 719a937b6aaSMarkus Armbruster# The default value is 10. (Since 2.7) 72048685a8eSMarkus Armbruster# 721a937b6aaSMarkus Armbruster# @cpu-throttle-tailslow: Make CPU throttling slower at tail stage At 722a937b6aaSMarkus Armbruster# the tail stage of throttling, the Guest is very sensitive to CPU 723a937b6aaSMarkus Armbruster# percentage while the @cpu-throttle -increment is excessive 724a937b6aaSMarkus Armbruster# usually at tail stage. If this parameter is true, we will 725a937b6aaSMarkus Armbruster# compute the ideal CPU percentage used by the Guest, which may 726a937b6aaSMarkus Armbruster# exactly make the dirty rate match the dirty rate threshold. 727a937b6aaSMarkus Armbruster# Then we will choose a smaller throttle increment between the one 728a937b6aaSMarkus Armbruster# specified by @cpu-throttle-increment and the one generated by 729a937b6aaSMarkus Armbruster# ideal CPU percentage. Therefore, it is compatible to 730a937b6aaSMarkus Armbruster# traditional throttling, meanwhile the throttle increment won't 731a937b6aaSMarkus Armbruster# be excessive at tail stage. The default value is false. (Since 732a937b6aaSMarkus Armbruster# 5.1) 733cbbf8182SKeqian Zhu# 734a937b6aaSMarkus Armbruster# @tls-creds: ID of the 'tls-creds' object that provides credentials 735a937b6aaSMarkus Armbruster# for establishing a TLS connection over the migration data 736a937b6aaSMarkus Armbruster# channel. On the outgoing side of the migration, the credentials 737a937b6aaSMarkus Armbruster# must be for a 'client' endpoint, while for the incoming side the 738e8c5503aSMarkus Armbruster# credentials must be for a 'server' endpoint. Setting this to a 739e8c5503aSMarkus Armbruster# non-empty string enables TLS for all migrations. An empty 740e8c5503aSMarkus Armbruster# string means that QEMU will use plain text mode for migration, 741e8c5503aSMarkus Armbruster# rather than TLS. (Since 2.7) 74248685a8eSMarkus Armbruster# 743e8c5503aSMarkus Armbruster# @tls-hostname: migration target's hostname for validating the 744e8c5503aSMarkus Armbruster# server's x509 certificate identity. If empty, QEMU will use the 745e8c5503aSMarkus Armbruster# hostname from the migration URI, if any. A non-empty value is 746e8c5503aSMarkus Armbruster# required when using x509 based TLS credentials and the migration 747e8c5503aSMarkus Armbruster# URI does not include a hostname, such as fd: or exec: based 748e8c5503aSMarkus Armbruster# migration. (Since 2.7) 749e8c5503aSMarkus Armbruster# 750e8c5503aSMarkus Armbruster# Note: empty value works only since 2.9. 75148685a8eSMarkus Armbruster# 752a937b6aaSMarkus Armbruster# @tls-authz: ID of the 'authz' object subclass that provides access 753a937b6aaSMarkus Armbruster# control checking of the TLS x509 certificate distinguished name. 754d2f1d29bSDaniel P. Berrange# This object is only resolved at time of use, so can be deleted 755d2f1d29bSDaniel P. Berrange# and recreated on the fly while the migration server is active. 756d2f1d29bSDaniel P. Berrange# If missing, it will default to denying access (Since 4.0) 757d2f1d29bSDaniel P. Berrange# 75873c67f38SMarkus Armbruster# @max-bandwidth: maximum speed for migration, in bytes per second. 75973c67f38SMarkus Armbruster# (Since 2.8) 76048685a8eSMarkus Armbruster# 7618b239597SPeter Xu# @avail-switchover-bandwidth: to set the available bandwidth that 7628b239597SPeter Xu# migration can use during switchover phase. NOTE! This does not 763209e64d9SMarkus Armbruster# limit the bandwidth during switchover, but only for calculations 764209e64d9SMarkus Armbruster# when making decisions to switchover. By default, this value is 765209e64d9SMarkus Armbruster# zero, which means QEMU will estimate the bandwidth 766209e64d9SMarkus Armbruster# automatically. This can be set when the estimated value is not 767209e64d9SMarkus Armbruster# accurate, while the user is able to guarantee such bandwidth is 768209e64d9SMarkus Armbruster# available when switching over. When specified correctly, this 769209e64d9SMarkus Armbruster# can make the switchover decision much more accurate. 770209e64d9SMarkus Armbruster# (Since 8.2) 7718b239597SPeter Xu# 772a937b6aaSMarkus Armbruster# @downtime-limit: set maximum tolerated downtime for migration. 773a937b6aaSMarkus Armbruster# maximum downtime in milliseconds (Since 2.8) 77448685a8eSMarkus Armbruster# 775a937b6aaSMarkus Armbruster# @x-checkpoint-delay: The delay time (in ms) between two COLO 776a937b6aaSMarkus Armbruster# checkpoints in periodic mode. (Since 2.8) 77748685a8eSMarkus Armbruster# 778cbfd6c95SJuan Quintela# @multifd-channels: Number of channels used to migrate data in 779a937b6aaSMarkus Armbruster# parallel. This is the same number that the number of sockets 780a937b6aaSMarkus Armbruster# used for migration. The default value is 2 (since 4.0) 7814075fb1cSJuan Quintela# 78273af8dd8SJuan Quintela# @xbzrle-cache-size: cache size to be used by XBZRLE migration. It 783a937b6aaSMarkus Armbruster# needs to be a multiple of the target page size and a power of 2 78473af8dd8SJuan Quintela# (Since 2.11) 78573af8dd8SJuan Quintela# 786a937b6aaSMarkus Armbruster# @max-postcopy-bandwidth: Background transfer bandwidth during 787a937b6aaSMarkus Armbruster# postcopy. Defaults to 0 (unlimited). In bytes per second. 7887e555c6cSDr. David Alan Gilbert# (Since 3.0) 7894cbc9c7fSLi Qiang# 790a937b6aaSMarkus Armbruster# @max-cpu-throttle: maximum cpu throttle percentage. Defaults to 99. 791a937b6aaSMarkus Armbruster# (Since 3.1) 792ee3d96baSDr. David Alan Gilbert# 793a937b6aaSMarkus Armbruster# @multifd-compression: Which compression method to use. Defaults to 794a937b6aaSMarkus Armbruster# none. (Since 5.0) 79596eef042SJuan Quintela# 7969004db48SJuan Quintela# @multifd-zlib-level: Set the compression level to be used in live 797a937b6aaSMarkus Armbruster# migration, the compression level is an integer between 0 and 9, 798a937b6aaSMarkus Armbruster# where 0 means no compression, 1 means the best compression 799a937b6aaSMarkus Armbruster# speed, and 9 means best compression ratio which will consume 800a937b6aaSMarkus Armbruster# more CPU. Defaults to 1. (Since 5.0) 8019004db48SJuan Quintela# 80286c6eb1fSBryan Zhang# @multifd-qatzip-level: Set the compression level to be used in live 80386c6eb1fSBryan Zhang# migration. The level is an integer between 1 and 9, where 1 means 80486c6eb1fSBryan Zhang# the best compression speed, and 9 means the best compression 80586c6eb1fSBryan Zhang# ratio which will consume more CPU. Defaults to 1. (Since 9.2) 80686c6eb1fSBryan Zhang# 8076a9ad154SJuan Quintela# @multifd-zstd-level: Set the compression level to be used in live 808a937b6aaSMarkus Armbruster# migration, the compression level is an integer between 0 and 20, 809a937b6aaSMarkus Armbruster# where 0 means no compression, 1 means the best compression 810a937b6aaSMarkus Armbruster# speed, and 20 means best compression ratio which will consume 811a937b6aaSMarkus Armbruster# more CPU. Defaults to 1. (Since 5.0) 812abb6295bSLeonardo Bras# 81331e4c354SMax Reitz# @block-bitmap-mapping: Maps block nodes and bitmaps on them to 814a937b6aaSMarkus Armbruster# aliases for the purpose of dirty bitmap migration. Such aliases 815a937b6aaSMarkus Armbruster# may for example be the corresponding names on the opposite site. 816a937b6aaSMarkus Armbruster# The mapping must be one-to-one, but not necessarily complete: On 817a937b6aaSMarkus Armbruster# the source, unmapped bitmaps and all bitmaps on unmapped nodes 818a937b6aaSMarkus Armbruster# will be ignored. On the destination, encountering an unmapped 819a937b6aaSMarkus Armbruster# alias in the incoming migration stream will result in a report, 820a937b6aaSMarkus Armbruster# and all further bitmap migration data will then be discarded. 821a937b6aaSMarkus Armbruster# Note that the destination does not know about bitmaps it does 822a937b6aaSMarkus Armbruster# not receive, so there is no limitation or requirement regarding 823a937b6aaSMarkus Armbruster# the number of bitmaps received, or how they are named, or on 824a937b6aaSMarkus Armbruster# which nodes they are placed. By default (when this parameter 825a937b6aaSMarkus Armbruster# has never been set), bitmap names are mapped to themselves. 826a937b6aaSMarkus Armbruster# Nodes are mapped to their block device name if there is one, and 827a937b6aaSMarkus Armbruster# to their node name otherwise. (Since 5.2) 82831e4c354SMax Reitz# 8298abc8115SHyman Huang(黄勇)# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty 830209e64d9SMarkus Armbruster# limit during live migration. Should be in the range 1 to 831209e64d9SMarkus Armbruster# 1000ms. Defaults to 1000ms. (Since 8.1) 8324d807857SHyman Huang(黄勇)# 83309f9ec99SHyman Huang(黄勇)# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration. 83409f9ec99SHyman Huang(黄勇)# Defaults to 1. (Since 8.1) 83509f9ec99SHyman Huang(黄勇)# 836209e64d9SMarkus Armbruster# @mode: Migration mode. See description in @MigMode. Default is 837209e64d9SMarkus Armbruster# 'normal'. (Since 8.2) 838eea1e5c9SSteve Sistare# 8395fdbb1dfSHao Xiang# @zero-page-detection: Whether and how to detect zero pages. 84070c25c92SHao Xiang# See description in @ZeroPageDetection. Default is 'multifd'. 8415fdbb1dfSHao Xiang# (since 9.0) 8425fdbb1dfSHao Xiang# 843b43b61d5SFabiano Rosas# @direct-io: Open migration files with O_DIRECT when possible. This 844b43b61d5SFabiano Rosas# only has effect if the @mapped-ram capability is enabled. 845b43b61d5SFabiano Rosas# (Since 9.1) 846b43b61d5SFabiano Rosas# 8479fb49daaSMarkus Armbruster# Features: 848a937b6aaSMarkus Armbruster# 849209e64d9SMarkus Armbruster# @unstable: Members @x-checkpoint-delay and 850209e64d9SMarkus Armbruster# @x-vcpu-dirty-limit-period are experimental. 8519fb49daaSMarkus Armbruster# 85248685a8eSMarkus Armbruster# Since: 2.4 85348685a8eSMarkus Armbruster## 85448685a8eSMarkus Armbruster{ 'enum': 'MigrationParameter', 855ee3d96baSDr. David Alan Gilbert 'data': ['announce-initial', 'announce-max', 856ee3d96baSDr. David Alan Gilbert 'announce-rounds', 'announce-step', 857864128dfSJuan Quintela 'throttle-trigger-threshold', 85848685a8eSMarkus Armbruster 'cpu-throttle-initial', 'cpu-throttle-increment', 859cbbf8182SKeqian Zhu 'cpu-throttle-tailslow', 860d2f1d29bSDaniel P. Berrange 'tls-creds', 'tls-hostname', 'tls-authz', 'max-bandwidth', 8618b239597SPeter Xu 'avail-switchover-bandwidth', 'downtime-limit', 8629fb49daaSMarkus Armbruster { 'name': 'x-checkpoint-delay', 'features': [ 'unstable' ] }, 863cbfd6c95SJuan Quintela 'multifd-channels', 8644cbc9c7fSLi Qiang 'xbzrle-cache-size', 'max-postcopy-bandwidth', 8659004db48SJuan Quintela 'max-cpu-throttle', 'multifd-compression', 86631e4c354SMax Reitz 'multifd-zlib-level', 'multifd-zstd-level', 86786c6eb1fSBryan Zhang 'multifd-qatzip-level', 8684d807857SHyman Huang(黄勇) 'block-bitmap-mapping', 86909f9ec99SHyman Huang(黄勇) { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] }, 870eea1e5c9SSteve Sistare 'vcpu-dirty-limit', 8715fdbb1dfSHao Xiang 'mode', 872b43b61d5SFabiano Rosas 'zero-page-detection', 873b43b61d5SFabiano Rosas 'direct-io'] } 87448685a8eSMarkus Armbruster 87548685a8eSMarkus Armbruster## 87648685a8eSMarkus Armbruster# @MigrateSetParameters: 87748685a8eSMarkus Armbruster# 878a937b6aaSMarkus Armbruster# @announce-initial: Initial delay (in milliseconds) before sending 879a937b6aaSMarkus Armbruster# the first announce (Since 4.0) 880ee3d96baSDr. David Alan Gilbert# 881a937b6aaSMarkus Armbruster# @announce-max: Maximum delay (in milliseconds) between packets in 882a937b6aaSMarkus Armbruster# the announcement (Since 4.0) 883ee3d96baSDr. David Alan Gilbert# 884a937b6aaSMarkus Armbruster# @announce-rounds: Number of self-announce packets sent after 885a937b6aaSMarkus Armbruster# migration (Since 4.0) 886ee3d96baSDr. David Alan Gilbert# 887a937b6aaSMarkus Armbruster# @announce-step: Increase in delay (in milliseconds) between 888a937b6aaSMarkus Armbruster# subsequent packets in the announcement (Since 4.0) 889ee3d96baSDr. David Alan Gilbert# 890a937b6aaSMarkus Armbruster# @throttle-trigger-threshold: The ratio of bytes_dirty_period and 891a937b6aaSMarkus Armbruster# bytes_xfer_period to trigger throttling. It is expressed as 892a937b6aaSMarkus Armbruster# percentage. The default value is 50. (Since 5.0) 893dc14a470SKeqian Zhu# 89448685a8eSMarkus Armbruster# @cpu-throttle-initial: Initial percentage of time guest cpus are 895a937b6aaSMarkus Armbruster# throttled when migration auto-converge is activated. The 896a937b6aaSMarkus Armbruster# default value is 20. (Since 2.7) 89748685a8eSMarkus Armbruster# 89848685a8eSMarkus Armbruster# @cpu-throttle-increment: throttle percentage increase each time 899a937b6aaSMarkus Armbruster# auto-converge detects that migration is not making progress. 900a937b6aaSMarkus Armbruster# The default value is 10. (Since 2.7) 90148685a8eSMarkus Armbruster# 902a937b6aaSMarkus Armbruster# @cpu-throttle-tailslow: Make CPU throttling slower at tail stage At 903a937b6aaSMarkus Armbruster# the tail stage of throttling, the Guest is very sensitive to CPU 904a937b6aaSMarkus Armbruster# percentage while the @cpu-throttle -increment is excessive 905a937b6aaSMarkus Armbruster# usually at tail stage. If this parameter is true, we will 906a937b6aaSMarkus Armbruster# compute the ideal CPU percentage used by the Guest, which may 907a937b6aaSMarkus Armbruster# exactly make the dirty rate match the dirty rate threshold. 908a937b6aaSMarkus Armbruster# Then we will choose a smaller throttle increment between the one 909a937b6aaSMarkus Armbruster# specified by @cpu-throttle-increment and the one generated by 910a937b6aaSMarkus Armbruster# ideal CPU percentage. Therefore, it is compatible to 911a937b6aaSMarkus Armbruster# traditional throttling, meanwhile the throttle increment won't 912a937b6aaSMarkus Armbruster# be excessive at tail stage. The default value is false. (Since 913a937b6aaSMarkus Armbruster# 5.1) 914cbbf8182SKeqian Zhu# 91548685a8eSMarkus Armbruster# @tls-creds: ID of the 'tls-creds' object that provides credentials 91648685a8eSMarkus Armbruster# for establishing a TLS connection over the migration data 91748685a8eSMarkus Armbruster# channel. On the outgoing side of the migration, the credentials 91848685a8eSMarkus Armbruster# must be for a 'client' endpoint, while for the incoming side the 919a937b6aaSMarkus Armbruster# credentials must be for a 'server' endpoint. Setting this to a 920a937b6aaSMarkus Armbruster# non-empty string enables TLS for all migrations. An empty 921a937b6aaSMarkus Armbruster# string means that QEMU will use plain text mode for migration, 922e8c5503aSMarkus Armbruster# rather than TLS. This is the default. (Since 2.7) 92348685a8eSMarkus Armbruster# 924e8c5503aSMarkus Armbruster# @tls-hostname: migration target's hostname for validating the 925e8c5503aSMarkus Armbruster# server's x509 certificate identity. If empty, QEMU will use the 926e8c5503aSMarkus Armbruster# hostname from the migration URI, if any. A non-empty value is 927e8c5503aSMarkus Armbruster# required when using x509 based TLS credentials and the migration 928e8c5503aSMarkus Armbruster# URI does not include a hostname, such as fd: or exec: based 929e8c5503aSMarkus Armbruster# migration. (Since 2.7) 930e8c5503aSMarkus Armbruster# 931e8c5503aSMarkus Armbruster# Note: empty value works only since 2.9. 93248685a8eSMarkus Armbruster# 93366fcb9d6SPeter Xu# @tls-authz: ID of the 'authz' object subclass that provides access 93466fcb9d6SPeter Xu# control checking of the TLS x509 certificate distinguished name. 935e8c5503aSMarkus Armbruster# This object is only resolved at time of use, so can be deleted 936e8c5503aSMarkus Armbruster# and recreated on the fly while the migration server is active. 937e8c5503aSMarkus Armbruster# If missing, it will default to denying access (Since 4.0) 93866fcb9d6SPeter Xu# 93973c67f38SMarkus Armbruster# @max-bandwidth: maximum speed for migration, in bytes per second. 94073c67f38SMarkus Armbruster# (Since 2.8) 94148685a8eSMarkus Armbruster# 9428b239597SPeter Xu# @avail-switchover-bandwidth: to set the available bandwidth that 9438b239597SPeter Xu# migration can use during switchover phase. NOTE! This does not 944209e64d9SMarkus Armbruster# limit the bandwidth during switchover, but only for calculations 945209e64d9SMarkus Armbruster# when making decisions to switchover. By default, this value is 946209e64d9SMarkus Armbruster# zero, which means QEMU will estimate the bandwidth 947209e64d9SMarkus Armbruster# automatically. This can be set when the estimated value is not 948209e64d9SMarkus Armbruster# accurate, while the user is able to guarantee such bandwidth is 949209e64d9SMarkus Armbruster# available when switching over. When specified correctly, this 950209e64d9SMarkus Armbruster# can make the switchover decision much more accurate. 951209e64d9SMarkus Armbruster# (Since 8.2) 9528b239597SPeter Xu# 953a937b6aaSMarkus Armbruster# @downtime-limit: set maximum tolerated downtime for migration. 954a937b6aaSMarkus Armbruster# maximum downtime in milliseconds (Since 2.8) 95548685a8eSMarkus Armbruster# 9568eb0a257SMarkus Armbruster# @x-checkpoint-delay: The delay time (in ms) between two COLO 9578eb0a257SMarkus Armbruster# checkpoints in periodic mode. (Since 2.8) 95848685a8eSMarkus Armbruster# 959cbfd6c95SJuan Quintela# @multifd-channels: Number of channels used to migrate data in 960a937b6aaSMarkus Armbruster# parallel. This is the same number that the number of sockets 961a937b6aaSMarkus Armbruster# used for migration. The default value is 2 (since 4.0) 9624075fb1cSJuan Quintela# 96373af8dd8SJuan Quintela# @xbzrle-cache-size: cache size to be used by XBZRLE migration. It 964a937b6aaSMarkus Armbruster# needs to be a multiple of the target page size and a power of 2 96573af8dd8SJuan Quintela# (Since 2.11) 9667e555c6cSDr. David Alan Gilbert# 967a937b6aaSMarkus Armbruster# @max-postcopy-bandwidth: Background transfer bandwidth during 968a937b6aaSMarkus Armbruster# postcopy. Defaults to 0 (unlimited). In bytes per second. 9697e555c6cSDr. David Alan Gilbert# (Since 3.0) 9704cbc9c7fSLi Qiang# 9718eb0a257SMarkus Armbruster# @max-cpu-throttle: maximum cpu throttle percentage. Defaults to 99. 9728eb0a257SMarkus Armbruster# (Since 3.1) 9734cbc9c7fSLi Qiang# 974a937b6aaSMarkus Armbruster# @multifd-compression: Which compression method to use. Defaults to 975a937b6aaSMarkus Armbruster# none. (Since 5.0) 97696eef042SJuan Quintela# 9779004db48SJuan Quintela# @multifd-zlib-level: Set the compression level to be used in live 978a937b6aaSMarkus Armbruster# migration, the compression level is an integer between 0 and 9, 979a937b6aaSMarkus Armbruster# where 0 means no compression, 1 means the best compression 980a937b6aaSMarkus Armbruster# speed, and 9 means best compression ratio which will consume 981a937b6aaSMarkus Armbruster# more CPU. Defaults to 1. (Since 5.0) 9829004db48SJuan Quintela# 98386c6eb1fSBryan Zhang# @multifd-qatzip-level: Set the compression level to be used in live 98486c6eb1fSBryan Zhang# migration. The level is an integer between 1 and 9, where 1 means 98586c6eb1fSBryan Zhang# the best compression speed, and 9 means the best compression 98686c6eb1fSBryan Zhang# ratio which will consume more CPU. Defaults to 1. (Since 9.2) 98786c6eb1fSBryan Zhang# 9886a9ad154SJuan Quintela# @multifd-zstd-level: Set the compression level to be used in live 989a937b6aaSMarkus Armbruster# migration, the compression level is an integer between 0 and 20, 990a937b6aaSMarkus Armbruster# where 0 means no compression, 1 means the best compression 991a937b6aaSMarkus Armbruster# speed, and 20 means best compression ratio which will consume 992a937b6aaSMarkus Armbruster# more CPU. Defaults to 1. (Since 5.0) 9936a9ad154SJuan Quintela# 99431e4c354SMax Reitz# @block-bitmap-mapping: Maps block nodes and bitmaps on them to 995a937b6aaSMarkus Armbruster# aliases for the purpose of dirty bitmap migration. Such aliases 996a937b6aaSMarkus Armbruster# may for example be the corresponding names on the opposite site. 997a937b6aaSMarkus Armbruster# The mapping must be one-to-one, but not necessarily complete: On 998a937b6aaSMarkus Armbruster# the source, unmapped bitmaps and all bitmaps on unmapped nodes 999a937b6aaSMarkus Armbruster# will be ignored. On the destination, encountering an unmapped 1000a937b6aaSMarkus Armbruster# alias in the incoming migration stream will result in a report, 1001a937b6aaSMarkus Armbruster# and all further bitmap migration data will then be discarded. 1002a937b6aaSMarkus Armbruster# Note that the destination does not know about bitmaps it does 1003a937b6aaSMarkus Armbruster# not receive, so there is no limitation or requirement regarding 1004a937b6aaSMarkus Armbruster# the number of bitmaps received, or how they are named, or on 1005a937b6aaSMarkus Armbruster# which nodes they are placed. By default (when this parameter 1006a937b6aaSMarkus Armbruster# has never been set), bitmap names are mapped to themselves. 1007a937b6aaSMarkus Armbruster# Nodes are mapped to their block device name if there is one, and 1008a937b6aaSMarkus Armbruster# to their node name otherwise. (Since 5.2) 100931e4c354SMax Reitz# 10108abc8115SHyman Huang(黄勇)# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty 1011209e64d9SMarkus Armbruster# limit during live migration. Should be in the range 1 to 1012209e64d9SMarkus Armbruster# 1000ms. Defaults to 1000ms. (Since 8.1) 10134d807857SHyman Huang(黄勇)# 101409f9ec99SHyman Huang(黄勇)# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration. 101509f9ec99SHyman Huang(黄勇)# Defaults to 1. (Since 8.1) 101609f9ec99SHyman Huang(黄勇)# 1017209e64d9SMarkus Armbruster# @mode: Migration mode. See description in @MigMode. Default is 1018209e64d9SMarkus Armbruster# 'normal'. (Since 8.2) 1019eea1e5c9SSteve Sistare# 10205fdbb1dfSHao Xiang# @zero-page-detection: Whether and how to detect zero pages. 102170c25c92SHao Xiang# See description in @ZeroPageDetection. Default is 'multifd'. 10225fdbb1dfSHao Xiang# (since 9.0) 10235fdbb1dfSHao Xiang# 1024b43b61d5SFabiano Rosas# @direct-io: Open migration files with O_DIRECT when possible. This 1025b43b61d5SFabiano Rosas# only has effect if the @mapped-ram capability is enabled. 1026b43b61d5SFabiano Rosas# (Since 9.1) 1027b43b61d5SFabiano Rosas# 10289fb49daaSMarkus Armbruster# Features: 1029a937b6aaSMarkus Armbruster# 1030209e64d9SMarkus Armbruster# @unstable: Members @x-checkpoint-delay and 1031209e64d9SMarkus Armbruster# @x-vcpu-dirty-limit-period are experimental. 10329fb49daaSMarkus Armbruster# 103356266c6dSMarkus Armbruster# TODO: either fuse back into MigrationParameters, or make 103456266c6dSMarkus Armbruster# MigrationParameters members mandatory 103556266c6dSMarkus Armbruster# 103648685a8eSMarkus Armbruster# Since: 2.4 103748685a8eSMarkus Armbruster## 103848685a8eSMarkus Armbruster{ 'struct': 'MigrateSetParameters', 1039ee3d96baSDr. David Alan Gilbert 'data': { '*announce-initial': 'size', 1040ee3d96baSDr. David Alan Gilbert '*announce-max': 'size', 1041ee3d96baSDr. David Alan Gilbert '*announce-rounds': 'size', 1042ee3d96baSDr. David Alan Gilbert '*announce-step': 'size', 1043ec17de0aSMarkus Armbruster '*throttle-trigger-threshold': 'uint8', 1044ec17de0aSMarkus Armbruster '*cpu-throttle-initial': 'uint8', 1045ec17de0aSMarkus Armbruster '*cpu-throttle-increment': 'uint8', 1046cbbf8182SKeqian Zhu '*cpu-throttle-tailslow': 'bool', 104748685a8eSMarkus Armbruster '*tls-creds': 'StrOrNull', 104848685a8eSMarkus Armbruster '*tls-hostname': 'StrOrNull', 1049d2f1d29bSDaniel P. Berrange '*tls-authz': 'StrOrNull', 1050ec17de0aSMarkus Armbruster '*max-bandwidth': 'size', 10518b239597SPeter Xu '*avail-switchover-bandwidth': 'size', 1052ec17de0aSMarkus Armbruster '*downtime-limit': 'uint64', 10539fb49daaSMarkus Armbruster '*x-checkpoint-delay': { 'type': 'uint32', 10549fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 1055ec17de0aSMarkus Armbruster '*multifd-channels': 'uint8', 10567e555c6cSDr. David Alan Gilbert '*xbzrle-cache-size': 'size', 10574cbc9c7fSLi Qiang '*max-postcopy-bandwidth': 'size', 1058ec17de0aSMarkus Armbruster '*max-cpu-throttle': 'uint8', 10599004db48SJuan Quintela '*multifd-compression': 'MultiFDCompression', 1060ec17de0aSMarkus Armbruster '*multifd-zlib-level': 'uint8', 106186c6eb1fSBryan Zhang '*multifd-qatzip-level': 'uint8', 1062ec17de0aSMarkus Armbruster '*multifd-zstd-level': 'uint8', 10634d807857SHyman Huang(黄勇) '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ], 10644d807857SHyman Huang(黄勇) '*x-vcpu-dirty-limit-period': { 'type': 'uint64', 106509f9ec99SHyman Huang(黄勇) 'features': [ 'unstable' ] }, 1066eea1e5c9SSteve Sistare '*vcpu-dirty-limit': 'uint64', 10675fdbb1dfSHao Xiang '*mode': 'MigMode', 1068b43b61d5SFabiano Rosas '*zero-page-detection': 'ZeroPageDetection', 1069b43b61d5SFabiano Rosas '*direct-io': 'bool' } } 107048685a8eSMarkus Armbruster 107148685a8eSMarkus Armbruster## 107248685a8eSMarkus Armbruster# @migrate-set-parameters: 107348685a8eSMarkus Armbruster# 107448685a8eSMarkus Armbruster# Set various migration parameters. 107548685a8eSMarkus Armbruster# 107648685a8eSMarkus Armbruster# Since: 2.4 107748685a8eSMarkus Armbruster# 107814b48aaaSJohn Snow# .. qmp-example:: 107948685a8eSMarkus Armbruster# 108048685a8eSMarkus Armbruster# -> { "execute": "migrate-set-parameters" , 1081864128dfSJuan Quintela# "arguments": { "multifd-channels": 5 } } 108237fa48a4SMarkus Armbruster# <- { "return": {} } 108348685a8eSMarkus Armbruster## 108448685a8eSMarkus Armbruster{ 'command': 'migrate-set-parameters', 'boxed': true, 108548685a8eSMarkus Armbruster 'data': 'MigrateSetParameters' } 108648685a8eSMarkus Armbruster 108748685a8eSMarkus Armbruster## 108848685a8eSMarkus Armbruster# @MigrationParameters: 108948685a8eSMarkus Armbruster# 109048685a8eSMarkus Armbruster# The optional members aren't actually optional. 109148685a8eSMarkus Armbruster# 1092a937b6aaSMarkus Armbruster# @announce-initial: Initial delay (in milliseconds) before sending 1093a937b6aaSMarkus Armbruster# the first announce (Since 4.0) 1094ee3d96baSDr. David Alan Gilbert# 1095a937b6aaSMarkus Armbruster# @announce-max: Maximum delay (in milliseconds) between packets in 1096a937b6aaSMarkus Armbruster# the announcement (Since 4.0) 1097ee3d96baSDr. David Alan Gilbert# 1098a937b6aaSMarkus Armbruster# @announce-rounds: Number of self-announce packets sent after 1099a937b6aaSMarkus Armbruster# migration (Since 4.0) 1100ee3d96baSDr. David Alan Gilbert# 1101a937b6aaSMarkus Armbruster# @announce-step: Increase in delay (in milliseconds) between 1102a937b6aaSMarkus Armbruster# subsequent packets in the announcement (Since 4.0) 1103ee3d96baSDr. David Alan Gilbert# 1104a937b6aaSMarkus Armbruster# @throttle-trigger-threshold: The ratio of bytes_dirty_period and 1105a937b6aaSMarkus Armbruster# bytes_xfer_period to trigger throttling. It is expressed as 1106a937b6aaSMarkus Armbruster# percentage. The default value is 50. (Since 5.0) 1107dc14a470SKeqian Zhu# 110848685a8eSMarkus Armbruster# @cpu-throttle-initial: Initial percentage of time guest cpus are 1109a937b6aaSMarkus Armbruster# throttled when migration auto-converge is activated. (Since 1110a937b6aaSMarkus Armbruster# 2.7) 111148685a8eSMarkus Armbruster# 111248685a8eSMarkus Armbruster# @cpu-throttle-increment: throttle percentage increase each time 1113a937b6aaSMarkus Armbruster# auto-converge detects that migration is not making progress. 1114a937b6aaSMarkus Armbruster# (Since 2.7) 111548685a8eSMarkus Armbruster# 1116a937b6aaSMarkus Armbruster# @cpu-throttle-tailslow: Make CPU throttling slower at tail stage At 1117a937b6aaSMarkus Armbruster# the tail stage of throttling, the Guest is very sensitive to CPU 1118a937b6aaSMarkus Armbruster# percentage while the @cpu-throttle -increment is excessive 1119a937b6aaSMarkus Armbruster# usually at tail stage. If this parameter is true, we will 1120a937b6aaSMarkus Armbruster# compute the ideal CPU percentage used by the Guest, which may 1121a937b6aaSMarkus Armbruster# exactly make the dirty rate match the dirty rate threshold. 1122a937b6aaSMarkus Armbruster# Then we will choose a smaller throttle increment between the one 1123a937b6aaSMarkus Armbruster# specified by @cpu-throttle-increment and the one generated by 1124a937b6aaSMarkus Armbruster# ideal CPU percentage. Therefore, it is compatible to 1125a937b6aaSMarkus Armbruster# traditional throttling, meanwhile the throttle increment won't 1126a937b6aaSMarkus Armbruster# be excessive at tail stage. The default value is false. (Since 1127a937b6aaSMarkus Armbruster# 5.1) 1128cbbf8182SKeqian Zhu# 112948685a8eSMarkus Armbruster# @tls-creds: ID of the 'tls-creds' object that provides credentials 113048685a8eSMarkus Armbruster# for establishing a TLS connection over the migration data 113148685a8eSMarkus Armbruster# channel. On the outgoing side of the migration, the credentials 113248685a8eSMarkus Armbruster# must be for a 'client' endpoint, while for the incoming side the 1133a937b6aaSMarkus Armbruster# credentials must be for a 'server' endpoint. An empty string 1134a937b6aaSMarkus Armbruster# means that QEMU will use plain text mode for migration, rather 1135e8c5503aSMarkus Armbruster# than TLS. (Since 2.7) 113648685a8eSMarkus Armbruster# 1137e8c5503aSMarkus Armbruster# Note: 2.8 omits empty @tls-creds instead. 1138e8c5503aSMarkus Armbruster# 1139e8c5503aSMarkus Armbruster# @tls-hostname: migration target's hostname for validating the 1140e8c5503aSMarkus Armbruster# server's x509 certificate identity. If empty, QEMU will use the 1141e8c5503aSMarkus Armbruster# hostname from the migration URI, if any. (Since 2.7) 1142e8c5503aSMarkus Armbruster# 1143e8c5503aSMarkus Armbruster# Note: 2.8 omits empty @tls-hostname instead. 114448685a8eSMarkus Armbruster# 1145a937b6aaSMarkus Armbruster# @tls-authz: ID of the 'authz' object subclass that provides access 1146a937b6aaSMarkus Armbruster# control checking of the TLS x509 certificate distinguished name. 1147a937b6aaSMarkus Armbruster# (Since 4.0) 1148d2f1d29bSDaniel P. Berrange# 114973c67f38SMarkus Armbruster# @max-bandwidth: maximum speed for migration, in bytes per second. 115073c67f38SMarkus Armbruster# (Since 2.8) 115148685a8eSMarkus Armbruster# 11528b239597SPeter Xu# @avail-switchover-bandwidth: to set the available bandwidth that 11538b239597SPeter Xu# migration can use during switchover phase. NOTE! This does not 1154209e64d9SMarkus Armbruster# limit the bandwidth during switchover, but only for calculations 1155209e64d9SMarkus Armbruster# when making decisions to switchover. By default, this value is 1156209e64d9SMarkus Armbruster# zero, which means QEMU will estimate the bandwidth 1157209e64d9SMarkus Armbruster# automatically. This can be set when the estimated value is not 1158209e64d9SMarkus Armbruster# accurate, while the user is able to guarantee such bandwidth is 1159209e64d9SMarkus Armbruster# available when switching over. When specified correctly, this 1160209e64d9SMarkus Armbruster# can make the switchover decision much more accurate. 1161209e64d9SMarkus Armbruster# (Since 8.2) 11628b239597SPeter Xu# 1163a937b6aaSMarkus Armbruster# @downtime-limit: set maximum tolerated downtime for migration. 1164a937b6aaSMarkus Armbruster# maximum downtime in milliseconds (Since 2.8) 116548685a8eSMarkus Armbruster# 1166a937b6aaSMarkus Armbruster# @x-checkpoint-delay: the delay time between two COLO checkpoints. 1167a937b6aaSMarkus Armbruster# (Since 2.8) 116848685a8eSMarkus Armbruster# 1169cbfd6c95SJuan Quintela# @multifd-channels: Number of channels used to migrate data in 1170a937b6aaSMarkus Armbruster# parallel. This is the same number that the number of sockets 1171a937b6aaSMarkus Armbruster# used for migration. The default value is 2 (since 4.0) 11724075fb1cSJuan Quintela# 117373af8dd8SJuan Quintela# @xbzrle-cache-size: cache size to be used by XBZRLE migration. It 1174a937b6aaSMarkus Armbruster# needs to be a multiple of the target page size and a power of 2 117573af8dd8SJuan Quintela# (Since 2.11) 11767e555c6cSDr. David Alan Gilbert# 1177a937b6aaSMarkus Armbruster# @max-postcopy-bandwidth: Background transfer bandwidth during 1178a937b6aaSMarkus Armbruster# postcopy. Defaults to 0 (unlimited). In bytes per second. 11797e555c6cSDr. David Alan Gilbert# (Since 3.0) 11804cbc9c7fSLi Qiang# 1181a937b6aaSMarkus Armbruster# @max-cpu-throttle: maximum cpu throttle percentage. Defaults to 99. 11824cbc9c7fSLi Qiang# (Since 3.1) 11834cbc9c7fSLi Qiang# 1184a937b6aaSMarkus Armbruster# @multifd-compression: Which compression method to use. Defaults to 1185a937b6aaSMarkus Armbruster# none. (Since 5.0) 118696eef042SJuan Quintela# 11879004db48SJuan Quintela# @multifd-zlib-level: Set the compression level to be used in live 1188a937b6aaSMarkus Armbruster# migration, the compression level is an integer between 0 and 9, 1189a937b6aaSMarkus Armbruster# where 0 means no compression, 1 means the best compression 1190a937b6aaSMarkus Armbruster# speed, and 9 means best compression ratio which will consume 1191a937b6aaSMarkus Armbruster# more CPU. Defaults to 1. (Since 5.0) 11929004db48SJuan Quintela# 119386c6eb1fSBryan Zhang# @multifd-qatzip-level: Set the compression level to be used in live 119486c6eb1fSBryan Zhang# migration. The level is an integer between 1 and 9, where 1 means 119586c6eb1fSBryan Zhang# the best compression speed, and 9 means the best compression 119686c6eb1fSBryan Zhang# ratio which will consume more CPU. Defaults to 1. (Since 9.2) 119786c6eb1fSBryan Zhang# 11986a9ad154SJuan Quintela# @multifd-zstd-level: Set the compression level to be used in live 1199a937b6aaSMarkus Armbruster# migration, the compression level is an integer between 0 and 20, 1200a937b6aaSMarkus Armbruster# where 0 means no compression, 1 means the best compression 1201a937b6aaSMarkus Armbruster# speed, and 20 means best compression ratio which will consume 1202a937b6aaSMarkus Armbruster# more CPU. Defaults to 1. (Since 5.0) 12036a9ad154SJuan Quintela# 120431e4c354SMax Reitz# @block-bitmap-mapping: Maps block nodes and bitmaps on them to 1205a937b6aaSMarkus Armbruster# aliases for the purpose of dirty bitmap migration. Such aliases 1206a937b6aaSMarkus Armbruster# may for example be the corresponding names on the opposite site. 1207a937b6aaSMarkus Armbruster# The mapping must be one-to-one, but not necessarily complete: On 1208a937b6aaSMarkus Armbruster# the source, unmapped bitmaps and all bitmaps on unmapped nodes 1209a937b6aaSMarkus Armbruster# will be ignored. On the destination, encountering an unmapped 1210a937b6aaSMarkus Armbruster# alias in the incoming migration stream will result in a report, 1211a937b6aaSMarkus Armbruster# and all further bitmap migration data will then be discarded. 1212a937b6aaSMarkus Armbruster# Note that the destination does not know about bitmaps it does 1213a937b6aaSMarkus Armbruster# not receive, so there is no limitation or requirement regarding 1214a937b6aaSMarkus Armbruster# the number of bitmaps received, or how they are named, or on 1215a937b6aaSMarkus Armbruster# which nodes they are placed. By default (when this parameter 1216a937b6aaSMarkus Armbruster# has never been set), bitmap names are mapped to themselves. 1217a937b6aaSMarkus Armbruster# Nodes are mapped to their block device name if there is one, and 1218a937b6aaSMarkus Armbruster# to their node name otherwise. (Since 5.2) 121931e4c354SMax Reitz# 12208abc8115SHyman Huang(黄勇)# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty 1221209e64d9SMarkus Armbruster# limit during live migration. Should be in the range 1 to 1222209e64d9SMarkus Armbruster# 1000ms. Defaults to 1000ms. (Since 8.1) 12234d807857SHyman Huang(黄勇)# 122409f9ec99SHyman Huang(黄勇)# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration. 122509f9ec99SHyman Huang(黄勇)# Defaults to 1. (Since 8.1) 122609f9ec99SHyman Huang(黄勇)# 1227209e64d9SMarkus Armbruster# @mode: Migration mode. See description in @MigMode. Default is 1228209e64d9SMarkus Armbruster# 'normal'. (Since 8.2) 1229eea1e5c9SSteve Sistare# 12305fdbb1dfSHao Xiang# @zero-page-detection: Whether and how to detect zero pages. 123170c25c92SHao Xiang# See description in @ZeroPageDetection. Default is 'multifd'. 12325fdbb1dfSHao Xiang# (since 9.0) 12335fdbb1dfSHao Xiang# 1234b43b61d5SFabiano Rosas# @direct-io: Open migration files with O_DIRECT when possible. This 1235b43b61d5SFabiano Rosas# only has effect if the @mapped-ram capability is enabled. 1236b43b61d5SFabiano Rosas# (Since 9.1) 1237b43b61d5SFabiano Rosas# 12389fb49daaSMarkus Armbruster# Features: 1239a937b6aaSMarkus Armbruster# 1240209e64d9SMarkus Armbruster# @unstable: Members @x-checkpoint-delay and 1241209e64d9SMarkus Armbruster# @x-vcpu-dirty-limit-period are experimental. 12429fb49daaSMarkus Armbruster# 124348685a8eSMarkus Armbruster# Since: 2.4 124448685a8eSMarkus Armbruster## 124548685a8eSMarkus Armbruster{ 'struct': 'MigrationParameters', 1246ee3d96baSDr. David Alan Gilbert 'data': { '*announce-initial': 'size', 1247ee3d96baSDr. David Alan Gilbert '*announce-max': 'size', 1248ee3d96baSDr. David Alan Gilbert '*announce-rounds': 'size', 1249ee3d96baSDr. David Alan Gilbert '*announce-step': 'size', 1250dc14a470SKeqian Zhu '*throttle-trigger-threshold': 'uint8', 1251741d4086SJuan Quintela '*cpu-throttle-initial': 'uint8', 1252741d4086SJuan Quintela '*cpu-throttle-increment': 'uint8', 1253cbbf8182SKeqian Zhu '*cpu-throttle-tailslow': 'bool', 125448685a8eSMarkus Armbruster '*tls-creds': 'str', 125548685a8eSMarkus Armbruster '*tls-hostname': 'str', 1256d2f1d29bSDaniel P. Berrange '*tls-authz': 'str', 1257741d4086SJuan Quintela '*max-bandwidth': 'size', 12588b239597SPeter Xu '*avail-switchover-bandwidth': 'size', 1259741d4086SJuan Quintela '*downtime-limit': 'uint64', 12609fb49daaSMarkus Armbruster '*x-checkpoint-delay': { 'type': 'uint32', 12619fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 1262cbfd6c95SJuan Quintela '*multifd-channels': 'uint8', 12637e555c6cSDr. David Alan Gilbert '*xbzrle-cache-size': 'size', 12644cbc9c7fSLi Qiang '*max-postcopy-bandwidth': 'size', 126596eef042SJuan Quintela '*max-cpu-throttle': 'uint8', 12669004db48SJuan Quintela '*multifd-compression': 'MultiFDCompression', 12676a9ad154SJuan Quintela '*multifd-zlib-level': 'uint8', 126886c6eb1fSBryan Zhang '*multifd-qatzip-level': 'uint8', 126931e4c354SMax Reitz '*multifd-zstd-level': 'uint8', 12704d807857SHyman Huang(黄勇) '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ], 12714d807857SHyman Huang(黄勇) '*x-vcpu-dirty-limit-period': { 'type': 'uint64', 127209f9ec99SHyman Huang(黄勇) 'features': [ 'unstable' ] }, 1273eea1e5c9SSteve Sistare '*vcpu-dirty-limit': 'uint64', 12745fdbb1dfSHao Xiang '*mode': 'MigMode', 1275b43b61d5SFabiano Rosas '*zero-page-detection': 'ZeroPageDetection', 1276b43b61d5SFabiano Rosas '*direct-io': 'bool' } } 127748685a8eSMarkus Armbruster 127848685a8eSMarkus Armbruster## 127948685a8eSMarkus Armbruster# @query-migrate-parameters: 128048685a8eSMarkus Armbruster# 128148685a8eSMarkus Armbruster# Returns information about the current migration parameters 128248685a8eSMarkus Armbruster# 128348685a8eSMarkus Armbruster# Returns: @MigrationParameters 128448685a8eSMarkus Armbruster# 128548685a8eSMarkus Armbruster# Since: 2.4 128648685a8eSMarkus Armbruster# 128714b48aaaSJohn Snow# .. qmp-example:: 128848685a8eSMarkus Armbruster# 128948685a8eSMarkus Armbruster# -> { "execute": "query-migrate-parameters" } 129048685a8eSMarkus Armbruster# <- { "return": { 1291864128dfSJuan Quintela# "multifd-channels": 2, 129248685a8eSMarkus Armbruster# "cpu-throttle-increment": 10, 129348685a8eSMarkus Armbruster# "cpu-throttle-initial": 20, 129448685a8eSMarkus Armbruster# "max-bandwidth": 33554432, 129548685a8eSMarkus Armbruster# "downtime-limit": 300 129648685a8eSMarkus Armbruster# } 129748685a8eSMarkus Armbruster# } 129848685a8eSMarkus Armbruster## 129948685a8eSMarkus Armbruster{ 'command': 'query-migrate-parameters', 130048685a8eSMarkus Armbruster 'returns': 'MigrationParameters' } 130148685a8eSMarkus Armbruster 130248685a8eSMarkus Armbruster## 130348685a8eSMarkus Armbruster# @migrate-start-postcopy: 130448685a8eSMarkus Armbruster# 1305a937b6aaSMarkus Armbruster# Followup to a migration command to switch the migration to postcopy 1306a937b6aaSMarkus Armbruster# mode. The postcopy-ram capability must be set on both source and 1307a937b6aaSMarkus Armbruster# destination before the original migration command. 130848685a8eSMarkus Armbruster# 130948685a8eSMarkus Armbruster# Since: 2.5 131048685a8eSMarkus Armbruster# 131114b48aaaSJohn Snow# .. qmp-example:: 131248685a8eSMarkus Armbruster# 131348685a8eSMarkus Armbruster# -> { "execute": "migrate-start-postcopy" } 131448685a8eSMarkus Armbruster# <- { "return": {} } 131548685a8eSMarkus Armbruster## 131648685a8eSMarkus Armbruster{ 'command': 'migrate-start-postcopy' } 131748685a8eSMarkus Armbruster 131848685a8eSMarkus Armbruster## 131948685a8eSMarkus Armbruster# @MIGRATION: 132048685a8eSMarkus Armbruster# 132148685a8eSMarkus Armbruster# Emitted when a migration event happens 132248685a8eSMarkus Armbruster# 132348685a8eSMarkus Armbruster# @status: @MigrationStatus describing the current migration status. 132448685a8eSMarkus Armbruster# 132548685a8eSMarkus Armbruster# Since: 2.4 132648685a8eSMarkus Armbruster# 132714b48aaaSJohn Snow# .. qmp-example:: 132848685a8eSMarkus Armbruster# 132948685a8eSMarkus Armbruster# <- {"timestamp": {"seconds": 1432121972, "microseconds": 744001}, 133048685a8eSMarkus Armbruster# "event": "MIGRATION", 133148685a8eSMarkus Armbruster# "data": {"status": "completed"} } 133248685a8eSMarkus Armbruster## 133348685a8eSMarkus Armbruster{ 'event': 'MIGRATION', 133448685a8eSMarkus Armbruster 'data': {'status': 'MigrationStatus'}} 133548685a8eSMarkus Armbruster 133648685a8eSMarkus Armbruster## 133748685a8eSMarkus Armbruster# @MIGRATION_PASS: 133848685a8eSMarkus Armbruster# 1339a937b6aaSMarkus Armbruster# Emitted from the source side of a migration at the start of each 1340a937b6aaSMarkus Armbruster# pass (when it syncs the dirty bitmap) 134148685a8eSMarkus Armbruster# 134248685a8eSMarkus Armbruster# @pass: An incrementing count (starting at 1 on the first pass) 134348685a8eSMarkus Armbruster# 134448685a8eSMarkus Armbruster# Since: 2.6 134548685a8eSMarkus Armbruster# 134614b48aaaSJohn Snow# .. qmp-example:: 134748685a8eSMarkus Armbruster# 134837fa48a4SMarkus Armbruster# <- { "timestamp": {"seconds": 1449669631, "microseconds": 239225}, 134948685a8eSMarkus Armbruster# "event": "MIGRATION_PASS", "data": {"pass": 2} } 135048685a8eSMarkus Armbruster## 135148685a8eSMarkus Armbruster{ 'event': 'MIGRATION_PASS', 135248685a8eSMarkus Armbruster 'data': { 'pass': 'int' } } 135348685a8eSMarkus Armbruster 135448685a8eSMarkus Armbruster## 135548685a8eSMarkus Armbruster# @COLOMessage: 135648685a8eSMarkus Armbruster# 135748685a8eSMarkus Armbruster# The message transmission between Primary side and Secondary side. 135848685a8eSMarkus Armbruster# 135948685a8eSMarkus Armbruster# @checkpoint-ready: Secondary VM (SVM) is ready for checkpointing 136048685a8eSMarkus Armbruster# 1361a937b6aaSMarkus Armbruster# @checkpoint-request: Primary VM (PVM) tells SVM to prepare for 1362a937b6aaSMarkus Armbruster# checkpointing 136348685a8eSMarkus Armbruster# 136448685a8eSMarkus Armbruster# @checkpoint-reply: SVM gets PVM's checkpoint request 136548685a8eSMarkus Armbruster# 136648685a8eSMarkus Armbruster# @vmstate-send: VM's state will be sent by PVM. 136748685a8eSMarkus Armbruster# 136848685a8eSMarkus Armbruster# @vmstate-size: The total size of VMstate. 136948685a8eSMarkus Armbruster# 137048685a8eSMarkus Armbruster# @vmstate-received: VM's state has been received by SVM. 137148685a8eSMarkus Armbruster# 137248685a8eSMarkus Armbruster# @vmstate-loaded: VM's state has been loaded by SVM. 137348685a8eSMarkus Armbruster# 137448685a8eSMarkus Armbruster# Since: 2.8 137548685a8eSMarkus Armbruster## 137648685a8eSMarkus Armbruster{ 'enum': 'COLOMessage', 137748685a8eSMarkus Armbruster 'data': [ 'checkpoint-ready', 'checkpoint-request', 'checkpoint-reply', 137848685a8eSMarkus Armbruster 'vmstate-send', 'vmstate-size', 'vmstate-received', 137948685a8eSMarkus Armbruster 'vmstate-loaded' ] } 138048685a8eSMarkus Armbruster 138148685a8eSMarkus Armbruster## 138248685a8eSMarkus Armbruster# @COLOMode: 138348685a8eSMarkus Armbruster# 138441b6b779SZhang Chen# The COLO current mode. 138548685a8eSMarkus Armbruster# 138641b6b779SZhang Chen# @none: COLO is disabled. 138748685a8eSMarkus Armbruster# 138841b6b779SZhang Chen# @primary: COLO node in primary side. 138948685a8eSMarkus Armbruster# 139041b6b779SZhang Chen# @secondary: COLO node in slave side. 139148685a8eSMarkus Armbruster# 139248685a8eSMarkus Armbruster# Since: 2.8 139348685a8eSMarkus Armbruster## 139448685a8eSMarkus Armbruster{ 'enum': 'COLOMode', 139541b6b779SZhang Chen 'data': [ 'none', 'primary', 'secondary'] } 139648685a8eSMarkus Armbruster 139748685a8eSMarkus Armbruster## 139848685a8eSMarkus Armbruster# @FailoverStatus: 139948685a8eSMarkus Armbruster# 140048685a8eSMarkus Armbruster# An enumeration of COLO failover status 140148685a8eSMarkus Armbruster# 140248685a8eSMarkus Armbruster# @none: no failover has ever happened 140348685a8eSMarkus Armbruster# 140448685a8eSMarkus Armbruster# @require: got failover requirement but not handled 140548685a8eSMarkus Armbruster# 140648685a8eSMarkus Armbruster# @active: in the process of doing failover 140748685a8eSMarkus Armbruster# 140848685a8eSMarkus Armbruster# @completed: finish the process of failover 140948685a8eSMarkus Armbruster# 1410a937b6aaSMarkus Armbruster# @relaunch: restart the failover process, from 'none' -> 'completed' 1411a937b6aaSMarkus Armbruster# (Since 2.9) 141248685a8eSMarkus Armbruster# 141348685a8eSMarkus Armbruster# Since: 2.8 141448685a8eSMarkus Armbruster## 141548685a8eSMarkus Armbruster{ 'enum': 'FailoverStatus', 141648685a8eSMarkus Armbruster 'data': [ 'none', 'require', 'active', 'completed', 'relaunch' ] } 141748685a8eSMarkus Armbruster 141848685a8eSMarkus Armbruster## 14199ecff6d6Szhanghailiang# @COLO_EXIT: 14209ecff6d6Szhanghailiang# 14219ecff6d6Szhanghailiang# Emitted when VM finishes COLO mode due to some errors happening or 14229ecff6d6Szhanghailiang# at the request of users. 14239ecff6d6Szhanghailiang# 14249ecff6d6Szhanghailiang# @mode: report COLO mode when COLO exited. 14259ecff6d6Szhanghailiang# 14269ecff6d6Szhanghailiang# @reason: describes the reason for the COLO exit. 14279ecff6d6Szhanghailiang# 14289ecff6d6Szhanghailiang# Since: 3.1 14299ecff6d6Szhanghailiang# 143014b48aaaSJohn Snow# .. qmp-example:: 14319ecff6d6Szhanghailiang# 14329ecff6d6Szhanghailiang# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172}, 14339ecff6d6Szhanghailiang# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } } 14349ecff6d6Szhanghailiang## 14359ecff6d6Szhanghailiang{ 'event': 'COLO_EXIT', 14369ecff6d6Szhanghailiang 'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } } 14379ecff6d6Szhanghailiang 14389ecff6d6Szhanghailiang## 14399ecff6d6Szhanghailiang# @COLOExitReason: 14409ecff6d6Szhanghailiang# 14413a43ac47SZhang Chen# The reason for a COLO exit. 14429ecff6d6Szhanghailiang# 1443a937b6aaSMarkus Armbruster# @none: failover has never happened. This state does not occur in 1444a937b6aaSMarkus Armbruster# the COLO_EXIT event, and is only visible in the result of 14453a43ac47SZhang Chen# query-colo-status. 14469ecff6d6Szhanghailiang# 14473a43ac47SZhang Chen# @request: COLO exit is due to an external request. 14489ecff6d6Szhanghailiang# 14493a43ac47SZhang Chen# @error: COLO exit is due to an internal error. 14503a43ac47SZhang Chen# 14513a43ac47SZhang Chen# @processing: COLO is currently handling a failover (since 4.0). 14529ecff6d6Szhanghailiang# 14539ecff6d6Szhanghailiang# Since: 3.1 14549ecff6d6Szhanghailiang## 14559ecff6d6Szhanghailiang{ 'enum': 'COLOExitReason', 14563a43ac47SZhang Chen 'data': [ 'none', 'request', 'error' , 'processing' ] } 14579ecff6d6Szhanghailiang 14589ecff6d6Szhanghailiang## 145948685a8eSMarkus Armbruster# @x-colo-lost-heartbeat: 146048685a8eSMarkus Armbruster# 1461a937b6aaSMarkus Armbruster# Tell qemu that heartbeat is lost, request it to do takeover 1462a937b6aaSMarkus Armbruster# procedures. If this command is sent to the PVM, the Primary side 1463a937b6aaSMarkus Armbruster# will exit COLO mode. If sent to the Secondary, the Secondary side 1464a937b6aaSMarkus Armbruster# will run failover work, then takes over server operation to become 1465a937b6aaSMarkus Armbruster# the service VM. 146648685a8eSMarkus Armbruster# 14679fb49daaSMarkus Armbruster# Features: 1468a937b6aaSMarkus Armbruster# 14699fb49daaSMarkus Armbruster# @unstable: This command is experimental. 14709fb49daaSMarkus Armbruster# 147148685a8eSMarkus Armbruster# Since: 2.8 147248685a8eSMarkus Armbruster# 147314b48aaaSJohn Snow# .. qmp-example:: 147448685a8eSMarkus Armbruster# 147548685a8eSMarkus Armbruster# -> { "execute": "x-colo-lost-heartbeat" } 147648685a8eSMarkus Armbruster# <- { "return": {} } 147748685a8eSMarkus Armbruster## 14789fb49daaSMarkus Armbruster{ 'command': 'x-colo-lost-heartbeat', 147951e47cf8SVladimir Sementsov-Ogievskiy 'features': [ 'unstable' ], 148051e47cf8SVladimir Sementsov-Ogievskiy 'if': 'CONFIG_REPLICATION' } 148148685a8eSMarkus Armbruster 148248685a8eSMarkus Armbruster## 148348685a8eSMarkus Armbruster# @migrate_cancel: 148448685a8eSMarkus Armbruster# 148548685a8eSMarkus Armbruster# Cancel the current executing migration process. 148648685a8eSMarkus Armbruster# 148701bed0ffSMarkus Armbruster# .. note:: This command succeeds even if there is no migration 148801bed0ffSMarkus Armbruster# process running. 148948685a8eSMarkus Armbruster# 14909bc6e893SMarkus Armbruster# Since: 0.14 149148685a8eSMarkus Armbruster# 149214b48aaaSJohn Snow# .. qmp-example:: 149348685a8eSMarkus Armbruster# 149448685a8eSMarkus Armbruster# -> { "execute": "migrate_cancel" } 149548685a8eSMarkus Armbruster# <- { "return": {} } 149648685a8eSMarkus Armbruster## 149748685a8eSMarkus Armbruster{ 'command': 'migrate_cancel' } 149848685a8eSMarkus Armbruster 149948685a8eSMarkus Armbruster## 150089cfc02cSDr. David Alan Gilbert# @migrate-continue: 150189cfc02cSDr. David Alan Gilbert# 150289cfc02cSDr. David Alan Gilbert# Continue migration when it's in a paused state. 150389cfc02cSDr. David Alan Gilbert# 150489cfc02cSDr. David Alan Gilbert# @state: The state the migration is currently expected to be in 150589cfc02cSDr. David Alan Gilbert# 150689cfc02cSDr. David Alan Gilbert# Since: 2.11 15074ae65a52SAndrea Bolognani# 150814b48aaaSJohn Snow# .. qmp-example:: 150989cfc02cSDr. David Alan Gilbert# 151089cfc02cSDr. David Alan Gilbert# -> { "execute": "migrate-continue" , "arguments": 151189cfc02cSDr. David Alan Gilbert# { "state": "pre-switchover" } } 151289cfc02cSDr. David Alan Gilbert# <- { "return": {} } 151389cfc02cSDr. David Alan Gilbert## 151489cfc02cSDr. David Alan Gilbert{ 'command': 'migrate-continue', 'data': {'state': 'MigrationStatus'} } 151589cfc02cSDr. David Alan Gilbert 151689cfc02cSDr. David Alan Gilbert## 1517e034f883SHet Gala# @MigrationAddressType: 1518e034f883SHet Gala# 1519e034f883SHet Gala# The migration stream transport mechanisms. 1520e034f883SHet Gala# 1521e034f883SHet Gala# @socket: Migrate via socket. 1522e034f883SHet Gala# 1523e034f883SHet Gala# @exec: Direct the migration stream to another process. 1524e034f883SHet Gala# 1525e034f883SHet Gala# @rdma: Migrate via RDMA. 1526e034f883SHet Gala# 1527e034f883SHet Gala# @file: Direct the migration stream to a file. 1528e034f883SHet Gala# 152937507c14SMarkus Armbruster# Since: 8.2 1530e034f883SHet Gala## 1531e034f883SHet Gala{ 'enum': 'MigrationAddressType', 1532e034f883SHet Gala 'data': [ 'socket', 'exec', 'rdma', 'file' ] } 1533e034f883SHet Gala 1534e034f883SHet Gala## 1535e034f883SHet Gala# @FileMigrationArgs: 1536e034f883SHet Gala# 1537e034f883SHet Gala# @filename: The file to receive the migration stream 1538e034f883SHet Gala# 1539e034f883SHet Gala# @offset: The file offset where the migration stream will start 1540e034f883SHet Gala# 154137507c14SMarkus Armbruster# Since: 8.2 1542e034f883SHet Gala## 1543e034f883SHet Gala{ 'struct': 'FileMigrationArgs', 1544e034f883SHet Gala 'data': { 'filename': 'str', 1545e034f883SHet Gala 'offset': 'uint64' } } 1546e034f883SHet Gala 1547e034f883SHet Gala## 1548e034f883SHet Gala# @MigrationExecCommand: 1549e034f883SHet Gala# 1550e034f883SHet Gala# @args: command (list head) and arguments to execute. 1551e034f883SHet Gala# 155237507c14SMarkus Armbruster# Since: 8.2 1553e034f883SHet Gala## 1554e034f883SHet Gala{ 'struct': 'MigrationExecCommand', 1555e034f883SHet Gala 'data': {'args': [ 'str' ] } } 1556e034f883SHet Gala 1557e034f883SHet Gala## 1558e034f883SHet Gala# @MigrationAddress: 1559e034f883SHet Gala# 1560e034f883SHet Gala# Migration endpoint configuration. 1561e034f883SHet Gala# 156289a2273bSMarkus Armbruster# @transport: The migration stream transport mechanism 156389a2273bSMarkus Armbruster# 156437507c14SMarkus Armbruster# Since: 8.2 1565e034f883SHet Gala## 1566e034f883SHet Gala{ 'union': 'MigrationAddress', 1567e034f883SHet Gala 'base': { 'transport' : 'MigrationAddressType'}, 1568e034f883SHet Gala 'discriminator': 'transport', 1569e034f883SHet Gala 'data': { 1570e034f883SHet Gala 'socket': 'SocketAddress', 1571e034f883SHet Gala 'exec': 'MigrationExecCommand', 1572e034f883SHet Gala 'rdma': 'InetSocketAddress', 1573e034f883SHet Gala 'file': 'FileMigrationArgs' } } 1574e034f883SHet Gala 1575e034f883SHet Gala## 1576074dbce5SHet Gala# @MigrationChannelType: 1577074dbce5SHet Gala# 1578074dbce5SHet Gala# The migration channel-type request options. 1579074dbce5SHet Gala# 1580074dbce5SHet Gala# @main: Main outbound migration channel. 1581074dbce5SHet Gala# 158237507c14SMarkus Armbruster# Since: 8.1 1583074dbce5SHet Gala## 1584074dbce5SHet Gala{ 'enum': 'MigrationChannelType', 1585074dbce5SHet Gala 'data': [ 'main' ] } 1586074dbce5SHet Gala 1587074dbce5SHet Gala## 1588074dbce5SHet Gala# @MigrationChannel: 1589074dbce5SHet Gala# 1590074dbce5SHet Gala# Migration stream channel parameters. 1591074dbce5SHet Gala# 15924061c334SMichael Tokarev# @channel-type: Channel type for transferring packet information. 1593074dbce5SHet Gala# 1594074dbce5SHet Gala# @addr: Migration endpoint configuration on destination interface. 1595074dbce5SHet Gala# 159637507c14SMarkus Armbruster# Since: 8.1 1597074dbce5SHet Gala## 1598074dbce5SHet Gala{ 'struct': 'MigrationChannel', 1599074dbce5SHet Gala 'data': { 1600074dbce5SHet Gala 'channel-type': 'MigrationChannelType', 1601074dbce5SHet Gala 'addr': 'MigrationAddress' } } 1602074dbce5SHet Gala 1603074dbce5SHet Gala## 160448685a8eSMarkus Armbruster# @migrate: 160548685a8eSMarkus Armbruster# 160648685a8eSMarkus Armbruster# Migrates the current running guest to another Virtual Machine. 160748685a8eSMarkus Armbruster# 160848685a8eSMarkus Armbruster# @uri: the Uniform Resource Identifier of the destination VM 160948685a8eSMarkus Armbruster# 1610074dbce5SHet Gala# @channels: list of migration stream channels with each stream in the 1611074dbce5SHet Gala# list connected to a destination interface endpoint. 1612074dbce5SHet Gala# 1613a937b6aaSMarkus Armbruster# @detach: this argument exists only for compatibility reasons and is 1614a937b6aaSMarkus Armbruster# ignored by QEMU 161548685a8eSMarkus Armbruster# 161651f63ec7SPeter Maydell# @resume: resume one paused migration, default "off". (since 3.0) 16177a4da28bSPeter Xu# 16189bc6e893SMarkus Armbruster# Since: 0.14 161948685a8eSMarkus Armbruster# 1620d461c279SJohn Snow# .. admonition:: Notes 162148685a8eSMarkus Armbruster# 16221ed1d4d6SMarkus Armbruster# 1. The 'query-migrate' command should be used to check 16231ed1d4d6SMarkus Armbruster# migration's progress and final result (this information is 1624d461c279SJohn Snow# provided by the 'status' member). 162548685a8eSMarkus Armbruster# 1626d461c279SJohn Snow# 2. All boolean arguments default to false. 162748685a8eSMarkus Armbruster# 16281ed1d4d6SMarkus Armbruster# 3. The user Monitor's "detach" argument is invalid in QMP and 1629d461c279SJohn Snow# should not be used. 163048685a8eSMarkus Armbruster# 16311ed1d4d6SMarkus Armbruster# 4. The uri argument should have the Uniform Resource Identifier 16321ed1d4d6SMarkus Armbruster# of default destination VM. This connection will be bound to 16331ed1d4d6SMarkus Armbruster# default network. 1634074dbce5SHet Gala# 16351ed1d4d6SMarkus Armbruster# 5. For now, number of migration streams is restricted to one, 16367d08424cSMarkus Armbruster# i.e. number of items in 'channels' list is just 1. 1637074dbce5SHet Gala# 1638074dbce5SHet Gala# 6. The 'uri' and 'channels' arguments are mutually exclusive; 1639074dbce5SHet Gala# exactly one of the two should be present. 1640074dbce5SHet Gala# 164114b48aaaSJohn Snow# .. qmp-example:: 164248685a8eSMarkus Armbruster# 164348685a8eSMarkus Armbruster# -> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } } 164448685a8eSMarkus Armbruster# <- { "return": {} } 16453cee17e7SHet Gala# 1646074dbce5SHet Gala# -> { "execute": "migrate", 1647074dbce5SHet Gala# "arguments": { 1648074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1649074dbce5SHet Gala# "addr": { "transport": "socket", 1650074dbce5SHet Gala# "type": "inet", 1651074dbce5SHet Gala# "host": "10.12.34.9", 1652074dbce5SHet Gala# "port": "1050" } } ] } } 1653074dbce5SHet Gala# <- { "return": {} } 1654074dbce5SHet Gala# 1655074dbce5SHet Gala# -> { "execute": "migrate", 1656074dbce5SHet Gala# "arguments": { 1657074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1658074dbce5SHet Gala# "addr": { "transport": "exec", 1659074dbce5SHet Gala# "args": [ "/bin/nc", "-p", "6000", 1660074dbce5SHet Gala# "/some/sock" ] } } ] } } 1661074dbce5SHet Gala# <- { "return": {} } 1662074dbce5SHet Gala# 1663074dbce5SHet Gala# -> { "execute": "migrate", 1664074dbce5SHet Gala# "arguments": { 1665074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1666074dbce5SHet Gala# "addr": { "transport": "rdma", 1667074dbce5SHet Gala# "host": "10.12.34.9", 1668074dbce5SHet Gala# "port": "1050" } } ] } } 1669074dbce5SHet Gala# <- { "return": {} } 1670074dbce5SHet Gala# 1671074dbce5SHet Gala# -> { "execute": "migrate", 1672074dbce5SHet Gala# "arguments": { 1673074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1674074dbce5SHet Gala# "addr": { "transport": "file", 1675074dbce5SHet Gala# "filename": "/tmp/migfile", 1676074dbce5SHet Gala# "offset": "0x1000" } } ] } } 1677074dbce5SHet Gala# <- { "return": {} } 167848685a8eSMarkus Armbruster## 167948685a8eSMarkus Armbruster{ 'command': 'migrate', 168057fd4b4eSHet Gala 'data': {'*uri': 'str', 1681074dbce5SHet Gala '*channels': [ 'MigrationChannel' ], 16827a4da28bSPeter Xu '*detach': 'bool', '*resume': 'bool' } } 168348685a8eSMarkus Armbruster 168448685a8eSMarkus Armbruster## 168548685a8eSMarkus Armbruster# @migrate-incoming: 168648685a8eSMarkus Armbruster# 1687a937b6aaSMarkus Armbruster# Start an incoming migration, the qemu must have been started with 1688a937b6aaSMarkus Armbruster# -incoming defer 168948685a8eSMarkus Armbruster# 169048685a8eSMarkus Armbruster# @uri: The Uniform Resource Identifier identifying the source or 169148685a8eSMarkus Armbruster# address to listen on 169248685a8eSMarkus Armbruster# 1693074dbce5SHet Gala# @channels: list of migration stream channels with each stream in the 1694074dbce5SHet Gala# list connected to a destination interface endpoint. 1695074dbce5SHet Gala# 1696dbea1c89SVladimir Sementsov-Ogievskiy# @exit-on-error: Exit on incoming migration failure. Default true. 1697dbea1c89SVladimir Sementsov-Ogievskiy# When set to false, the failure triggers a MIGRATION event, and 169801bed0ffSMarkus Armbruster# error details could be retrieved with query-migrate. 169901bed0ffSMarkus Armbruster# (since 9.1) 1700dbea1c89SVladimir Sementsov-Ogievskiy# 170148685a8eSMarkus Armbruster# Since: 2.3 170248685a8eSMarkus Armbruster# 1703d461c279SJohn Snow# .. admonition:: Notes 170448685a8eSMarkus Armbruster# 17051ed1d4d6SMarkus Armbruster# 1. It's a bad idea to use a string for the uri, but it needs to 17061ed1d4d6SMarkus Armbruster# stay compatible with -incoming and the format of the uri is 17071ed1d4d6SMarkus Armbruster# already exposed above libvirt. 170848685a8eSMarkus Armbruster# 1709a937b6aaSMarkus Armbruster# 2. QEMU must be started with -incoming defer to allow 1710a937b6aaSMarkus Armbruster# migrate-incoming to be used. 171148685a8eSMarkus Armbruster# 171248685a8eSMarkus Armbruster# 3. The uri format is the same as for -incoming 171348685a8eSMarkus Armbruster# 17143cee17e7SHet Gala# 4. For now, number of migration streams is restricted to one, 17157d08424cSMarkus Armbruster# i.e. number of items in 'channels' list is just 1. 1716074dbce5SHet Gala# 17173cee17e7SHet Gala# 5. The 'uri' and 'channels' arguments are mutually exclusive; 1718074dbce5SHet Gala# exactly one of the two should be present. 1719074dbce5SHet Gala# 172014b48aaaSJohn Snow# .. qmp-example:: 172148685a8eSMarkus Armbruster# 172248685a8eSMarkus Armbruster# -> { "execute": "migrate-incoming", 17233cee17e7SHet Gala# "arguments": { "uri": "tcp:0:4446" } } 172448685a8eSMarkus Armbruster# <- { "return": {} } 1725074dbce5SHet Gala# 17263cee17e7SHet Gala# -> { "execute": "migrate-incoming", 1727074dbce5SHet Gala# "arguments": { 1728074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1729074dbce5SHet Gala# "addr": { "transport": "socket", 1730074dbce5SHet Gala# "type": "inet", 1731074dbce5SHet Gala# "host": "10.12.34.9", 1732074dbce5SHet Gala# "port": "1050" } } ] } } 1733074dbce5SHet Gala# <- { "return": {} } 1734074dbce5SHet Gala# 17353cee17e7SHet Gala# -> { "execute": "migrate-incoming", 1736074dbce5SHet Gala# "arguments": { 1737074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1738074dbce5SHet Gala# "addr": { "transport": "exec", 1739074dbce5SHet Gala# "args": [ "/bin/nc", "-p", "6000", 1740074dbce5SHet Gala# "/some/sock" ] } } ] } } 1741074dbce5SHet Gala# <- { "return": {} } 1742074dbce5SHet Gala# 17433cee17e7SHet Gala# -> { "execute": "migrate-incoming", 1744074dbce5SHet Gala# "arguments": { 1745074dbce5SHet Gala# "channels": [ { "channel-type": "main", 1746074dbce5SHet Gala# "addr": { "transport": "rdma", 1747074dbce5SHet Gala# "host": "10.12.34.9", 1748074dbce5SHet Gala# "port": "1050" } } ] } } 1749074dbce5SHet Gala# <- { "return": {} } 175048685a8eSMarkus Armbruster## 1751074dbce5SHet Gala{ 'command': 'migrate-incoming', 1752074dbce5SHet Gala 'data': {'*uri': 'str', 1753dbea1c89SVladimir Sementsov-Ogievskiy '*channels': [ 'MigrationChannel' ], 1754dbea1c89SVladimir Sementsov-Ogievskiy '*exit-on-error': 'bool' } } 175548685a8eSMarkus Armbruster 175648685a8eSMarkus Armbruster## 175748685a8eSMarkus Armbruster# @xen-save-devices-state: 175848685a8eSMarkus Armbruster# 1759a937b6aaSMarkus Armbruster# Save the state of all devices to file. The RAM and the block 1760a937b6aaSMarkus Armbruster# devices of the VM are not saved by this command. 176148685a8eSMarkus Armbruster# 176248685a8eSMarkus Armbruster# @filename: the file to save the state of the devices to as binary 1763a937b6aaSMarkus Armbruster# data. See xen-save-devices-state.txt for a description of the 1764a937b6aaSMarkus Armbruster# binary format. 176548685a8eSMarkus Armbruster# 1766a937b6aaSMarkus Armbruster# @live: Optional argument to ask QEMU to treat this command as part 1767a937b6aaSMarkus Armbruster# of a live migration. Default to true. (since 2.11) 17685d6c599fSAnthony PERARD# 176948685a8eSMarkus Armbruster# Since: 1.1 177048685a8eSMarkus Armbruster# 177114b48aaaSJohn Snow# .. qmp-example:: 177248685a8eSMarkus Armbruster# 177348685a8eSMarkus Armbruster# -> { "execute": "xen-save-devices-state", 177448685a8eSMarkus Armbruster# "arguments": { "filename": "/tmp/save" } } 177548685a8eSMarkus Armbruster# <- { "return": {} } 177648685a8eSMarkus Armbruster## 17775d6c599fSAnthony PERARD{ 'command': 'xen-save-devices-state', 17785d6c599fSAnthony PERARD 'data': {'filename': 'str', '*live':'bool' } } 177948685a8eSMarkus Armbruster 178048685a8eSMarkus Armbruster## 178128af9ba2SPhilippe Mathieu-Daudé# @xen-set-global-dirty-log: 178228af9ba2SPhilippe Mathieu-Daudé# 178328af9ba2SPhilippe Mathieu-Daudé# Enable or disable the global dirty log mode. 178428af9ba2SPhilippe Mathieu-Daudé# 178528af9ba2SPhilippe Mathieu-Daudé# @enable: true to enable, false to disable. 178628af9ba2SPhilippe Mathieu-Daudé# 178728af9ba2SPhilippe Mathieu-Daudé# Since: 1.3 178828af9ba2SPhilippe Mathieu-Daudé# 178914b48aaaSJohn Snow# .. qmp-example:: 179028af9ba2SPhilippe Mathieu-Daudé# 179128af9ba2SPhilippe Mathieu-Daudé# -> { "execute": "xen-set-global-dirty-log", 179228af9ba2SPhilippe Mathieu-Daudé# "arguments": { "enable": true } } 179328af9ba2SPhilippe Mathieu-Daudé# <- { "return": {} } 179428af9ba2SPhilippe Mathieu-Daudé## 179528af9ba2SPhilippe Mathieu-Daudé{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } } 179628af9ba2SPhilippe Mathieu-Daudé 179728af9ba2SPhilippe Mathieu-Daudé## 179828af9ba2SPhilippe Mathieu-Daudé# @xen-load-devices-state: 179928af9ba2SPhilippe Mathieu-Daudé# 1800a937b6aaSMarkus Armbruster# Load the state of all devices from file. The RAM and the block 1801a937b6aaSMarkus Armbruster# devices of the VM are not loaded by this command. 180228af9ba2SPhilippe Mathieu-Daudé# 180328af9ba2SPhilippe Mathieu-Daudé# @filename: the file to load the state of the devices from as binary 1804a937b6aaSMarkus Armbruster# data. See xen-save-devices-state.txt for a description of the 1805a937b6aaSMarkus Armbruster# binary format. 180628af9ba2SPhilippe Mathieu-Daudé# 180728af9ba2SPhilippe Mathieu-Daudé# Since: 2.7 180828af9ba2SPhilippe Mathieu-Daudé# 180914b48aaaSJohn Snow# .. qmp-example:: 181028af9ba2SPhilippe Mathieu-Daudé# 181128af9ba2SPhilippe Mathieu-Daudé# -> { "execute": "xen-load-devices-state", 181228af9ba2SPhilippe Mathieu-Daudé# "arguments": { "filename": "/tmp/resume" } } 181328af9ba2SPhilippe Mathieu-Daudé# <- { "return": {} } 181428af9ba2SPhilippe Mathieu-Daudé## 181528af9ba2SPhilippe Mathieu-Daudé{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} } 181628af9ba2SPhilippe Mathieu-Daudé 181728af9ba2SPhilippe Mathieu-Daudé## 181848685a8eSMarkus Armbruster# @xen-set-replication: 181948685a8eSMarkus Armbruster# 182048685a8eSMarkus Armbruster# Enable or disable replication. 182148685a8eSMarkus Armbruster# 182248685a8eSMarkus Armbruster# @enable: true to enable, false to disable. 182348685a8eSMarkus Armbruster# 182448685a8eSMarkus Armbruster# @primary: true for primary or false for secondary. 182548685a8eSMarkus Armbruster# 182673c67f38SMarkus Armbruster# @failover: true to do failover, false to stop. Cannot be specified 182773c67f38SMarkus Armbruster# if 'enable' is true. Default value is false. 182848685a8eSMarkus Armbruster# 182914b48aaaSJohn Snow# .. qmp-example:: 183048685a8eSMarkus Armbruster# 183148685a8eSMarkus Armbruster# -> { "execute": "xen-set-replication", 183248685a8eSMarkus Armbruster# "arguments": {"enable": true, "primary": false} } 183348685a8eSMarkus Armbruster# <- { "return": {} } 183448685a8eSMarkus Armbruster# 183548685a8eSMarkus Armbruster# Since: 2.9 183648685a8eSMarkus Armbruster## 183748685a8eSMarkus Armbruster{ 'command': 'xen-set-replication', 1838335d10cdSMarc-André Lureau 'data': { 'enable': 'bool', 'primary': 'bool', '*failover': 'bool' }, 18398a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' } 184048685a8eSMarkus Armbruster 184148685a8eSMarkus Armbruster## 184248685a8eSMarkus Armbruster# @ReplicationStatus: 184348685a8eSMarkus Armbruster# 184448685a8eSMarkus Armbruster# The result format for 'query-xen-replication-status'. 184548685a8eSMarkus Armbruster# 184648685a8eSMarkus Armbruster# @error: true if an error happened, false if replication is normal. 184748685a8eSMarkus Armbruster# 1848a937b6aaSMarkus Armbruster# @desc: the human readable error description string, when @error is 1849a937b6aaSMarkus Armbruster# 'true'. 185048685a8eSMarkus Armbruster# 185148685a8eSMarkus Armbruster# Since: 2.9 185248685a8eSMarkus Armbruster## 185348685a8eSMarkus Armbruster{ 'struct': 'ReplicationStatus', 1854335d10cdSMarc-André Lureau 'data': { 'error': 'bool', '*desc': 'str' }, 18558a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' } 185648685a8eSMarkus Armbruster 185748685a8eSMarkus Armbruster## 185848685a8eSMarkus Armbruster# @query-xen-replication-status: 185948685a8eSMarkus Armbruster# 186048685a8eSMarkus Armbruster# Query replication status while the vm is running. 186148685a8eSMarkus Armbruster# 1862f4347129SAndrea Bolognani# Returns: A @ReplicationStatus object showing the status. 186348685a8eSMarkus Armbruster# 186414b48aaaSJohn Snow# .. qmp-example:: 186548685a8eSMarkus Armbruster# 186648685a8eSMarkus Armbruster# -> { "execute": "query-xen-replication-status" } 186748685a8eSMarkus Armbruster# <- { "return": { "error": false } } 186848685a8eSMarkus Armbruster# 186948685a8eSMarkus Armbruster# Since: 2.9 187048685a8eSMarkus Armbruster## 187148685a8eSMarkus Armbruster{ 'command': 'query-xen-replication-status', 1872335d10cdSMarc-André Lureau 'returns': 'ReplicationStatus', 18738a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' } 187448685a8eSMarkus Armbruster 187548685a8eSMarkus Armbruster## 187648685a8eSMarkus Armbruster# @xen-colo-do-checkpoint: 187748685a8eSMarkus Armbruster# 187848685a8eSMarkus Armbruster# Xen uses this command to notify replication to trigger a checkpoint. 187948685a8eSMarkus Armbruster# 188014b48aaaSJohn Snow# .. qmp-example:: 188148685a8eSMarkus Armbruster# 188248685a8eSMarkus Armbruster# -> { "execute": "xen-colo-do-checkpoint" } 188348685a8eSMarkus Armbruster# <- { "return": {} } 188448685a8eSMarkus Armbruster# 188548685a8eSMarkus Armbruster# Since: 2.9 188648685a8eSMarkus Armbruster## 1887335d10cdSMarc-André Lureau{ 'command': 'xen-colo-do-checkpoint', 18888a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' } 188902affd41SPeter Xu 189002affd41SPeter Xu## 1891f56c0065SZhang Chen# @COLOStatus: 1892f56c0065SZhang Chen# 1893f56c0065SZhang Chen# The result format for 'query-colo-status'. 1894f56c0065SZhang Chen# 1895a937b6aaSMarkus Armbruster# @mode: COLO running mode. If COLO is running, this field will 1896a937b6aaSMarkus Armbruster# return 'primary' or 'secondary'. 1897f56c0065SZhang Chen# 18985cc8f9ebSZhang Chen# @last-mode: COLO last running mode. If COLO is running, this field 1899a937b6aaSMarkus Armbruster# will return same like mode field, after failover we can use this 1900a937b6aaSMarkus Armbruster# field to get last colo mode. (since 4.0) 19015ed0decaSZhang Chen# 1902f56c0065SZhang Chen# @reason: describes the reason for the COLO exit. 1903f56c0065SZhang Chen# 1904ea3b23e5SZhang Chen# Since: 3.1 1905f56c0065SZhang Chen## 1906f56c0065SZhang Chen{ 'struct': 'COLOStatus', 19075cc8f9ebSZhang Chen 'data': { 'mode': 'COLOMode', 'last-mode': 'COLOMode', 190851e47cf8SVladimir Sementsov-Ogievskiy 'reason': 'COLOExitReason' }, 190951e47cf8SVladimir Sementsov-Ogievskiy 'if': 'CONFIG_REPLICATION' } 1910f56c0065SZhang Chen 1911f56c0065SZhang Chen## 1912f56c0065SZhang Chen# @query-colo-status: 1913f56c0065SZhang Chen# 1914f56c0065SZhang Chen# Query COLO status while the vm is running. 1915f56c0065SZhang Chen# 1916f56c0065SZhang Chen# Returns: A @COLOStatus object showing the status. 1917f56c0065SZhang Chen# 191814b48aaaSJohn Snow# .. qmp-example:: 1919f56c0065SZhang Chen# 1920f56c0065SZhang Chen# -> { "execute": "query-colo-status" } 192151ec294dSVictor Toso# <- { "return": { "mode": "primary", "last-mode": "none", "reason": "request" } } 1922f56c0065SZhang Chen# 1923ea3b23e5SZhang Chen# Since: 3.1 1924f56c0065SZhang Chen## 1925f56c0065SZhang Chen{ 'command': 'query-colo-status', 192651e47cf8SVladimir Sementsov-Ogievskiy 'returns': 'COLOStatus', 192751e47cf8SVladimir Sementsov-Ogievskiy 'if': 'CONFIG_REPLICATION' } 1928f56c0065SZhang Chen 1929f56c0065SZhang Chen## 193002affd41SPeter Xu# @migrate-recover: 193102affd41SPeter Xu# 193202affd41SPeter Xu# Provide a recovery migration stream URI. 193302affd41SPeter Xu# 193402affd41SPeter Xu# @uri: the URI to be used for the recovery of migration stream. 193502affd41SPeter Xu# 193614b48aaaSJohn Snow# .. qmp-example:: 193702affd41SPeter Xu# 193802affd41SPeter Xu# -> { "execute": "migrate-recover", 193902affd41SPeter Xu# "arguments": { "uri": "tcp:192.168.1.200:12345" } } 194002affd41SPeter Xu# <- { "return": {} } 194102affd41SPeter Xu# 194251f63ec7SPeter Maydell# Since: 3.0 194302affd41SPeter Xu## 1944b0ddeba2SMarc-André Lureau{ 'command': 'migrate-recover', 1945b0ddeba2SMarc-André Lureau 'data': { 'uri': 'str' }, 194602affd41SPeter Xu 'allow-oob': true } 1947bfbf89c2SPeter Xu 1948bfbf89c2SPeter Xu## 1949bfbf89c2SPeter Xu# @migrate-pause: 1950bfbf89c2SPeter Xu# 1951bfbf89c2SPeter Xu# Pause a migration. Currently it only supports postcopy. 1952bfbf89c2SPeter Xu# 195314b48aaaSJohn Snow# .. qmp-example:: 1954bfbf89c2SPeter Xu# 1955bfbf89c2SPeter Xu# -> { "execute": "migrate-pause" } 1956bfbf89c2SPeter Xu# <- { "return": {} } 1957bfbf89c2SPeter Xu# 195851f63ec7SPeter Maydell# Since: 3.0 1959bfbf89c2SPeter Xu## 1960bfbf89c2SPeter Xu{ 'command': 'migrate-pause', 'allow-oob': true } 1961d328e6f3SJens Freimann 1962d328e6f3SJens Freimann## 1963d328e6f3SJens Freimann# @UNPLUG_PRIMARY: 1964d328e6f3SJens Freimann# 1965d328e6f3SJens Freimann# Emitted from source side of a migration when migration state is 196601bed0ffSMarkus Armbruster# WAIT_UNPLUG. Device was unplugged by guest operating system. 196701bed0ffSMarkus Armbruster# Device resources in QEMU are kept on standby to be able to re-plug 196801bed0ffSMarkus Armbruster# it in case of migration failure. 1969d328e6f3SJens Freimann# 1970d328e6f3SJens Freimann# @device-id: QEMU device id of the unplugged device 1971d328e6f3SJens Freimann# 1972d328e6f3SJens Freimann# Since: 4.2 1973d328e6f3SJens Freimann# 197414b48aaaSJohn Snow# .. qmp-example:: 19754ae65a52SAndrea Bolognani# 19760df5e9a3SVictor Toso# <- { "event": "UNPLUG_PRIMARY", 19770df5e9a3SVictor Toso# "data": { "device-id": "hostdev0" }, 19780df5e9a3SVictor Toso# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 1979d328e6f3SJens Freimann## 1980d328e6f3SJens Freimann{ 'event': 'UNPLUG_PRIMARY', 1981d328e6f3SJens Freimann 'data': { 'device-id': 'str' } } 19827df3aa30SChuan Zheng 19837df3aa30SChuan Zheng## 198471864eadSHyman Huang(黄勇)# @DirtyRateVcpu: 198571864eadSHyman Huang(黄勇)# 198671864eadSHyman Huang(黄勇)# Dirty rate of vcpu. 198771864eadSHyman Huang(黄勇)# 198871864eadSHyman Huang(黄勇)# @id: vcpu index. 198971864eadSHyman Huang(黄勇)# 199071864eadSHyman Huang(黄勇)# @dirty-rate: dirty rate. 199171864eadSHyman Huang(黄勇)# 1992f78d4ed7SHyman Huang(黄勇)# Since: 6.2 199371864eadSHyman Huang(黄勇)## 199471864eadSHyman Huang(黄勇){ 'struct': 'DirtyRateVcpu', 199571864eadSHyman Huang(黄勇) 'data': { 'id': 'int', 'dirty-rate': 'int64' } } 199671864eadSHyman Huang(黄勇) 199771864eadSHyman Huang(黄勇)## 19987df3aa30SChuan Zheng# @DirtyRateStatus: 19997df3aa30SChuan Zheng# 20005034e3d4SAndrei Gudkov# Dirty page rate measurement status. 20017df3aa30SChuan Zheng# 20025034e3d4SAndrei Gudkov# @unstarted: measuring thread has not been started yet 20037df3aa30SChuan Zheng# 20045034e3d4SAndrei Gudkov# @measuring: measuring thread is running 20057df3aa30SChuan Zheng# 20065034e3d4SAndrei Gudkov# @measured: dirty page rate is measured and the results are available 20077df3aa30SChuan Zheng# 20087df3aa30SChuan Zheng# Since: 5.2 20097df3aa30SChuan Zheng## 20107df3aa30SChuan Zheng{ 'enum': 'DirtyRateStatus', 20117df3aa30SChuan Zheng 'data': [ 'unstarted', 'measuring', 'measured'] } 20124c437254SChuan Zheng 20134c437254SChuan Zheng## 201471864eadSHyman Huang(黄勇)# @DirtyRateMeasureMode: 201571864eadSHyman Huang(黄勇)# 20165034e3d4SAndrei Gudkov# Method used to measure dirty page rate. Differences between 20175034e3d4SAndrei Gudkov# available methods are explained in @calc-dirty-rate. 201871864eadSHyman Huang(黄勇)# 20195034e3d4SAndrei Gudkov# @page-sampling: use page sampling 202071864eadSHyman Huang(黄勇)# 20215034e3d4SAndrei Gudkov# @dirty-ring: use dirty ring 2022826b8bc8SHyman Huang(黄勇)# 20235034e3d4SAndrei Gudkov# @dirty-bitmap: use dirty bitmap 202471864eadSHyman Huang(黄勇)# 2025f78d4ed7SHyman Huang(黄勇)# Since: 6.2 202671864eadSHyman Huang(黄勇)## 202771864eadSHyman Huang(黄勇){ 'enum': 'DirtyRateMeasureMode', 2028826b8bc8SHyman Huang(黄勇) 'data': ['page-sampling', 'dirty-ring', 'dirty-bitmap'] } 202971864eadSHyman Huang(黄勇) 203071864eadSHyman Huang(黄勇)## 203134a68001SAndrei Gudkov# @TimeUnit: 203234a68001SAndrei Gudkov# 203334a68001SAndrei Gudkov# Specifies unit in which time-related value is specified. 203434a68001SAndrei Gudkov# 203534a68001SAndrei Gudkov# @second: value is in seconds 203634a68001SAndrei Gudkov# 203734a68001SAndrei Gudkov# @millisecond: value is in milliseconds 203834a68001SAndrei Gudkov# 203937507c14SMarkus Armbruster# Since: 8.2 204034a68001SAndrei Gudkov## 204134a68001SAndrei Gudkov{ 'enum': 'TimeUnit', 204234a68001SAndrei Gudkov 'data': ['second', 'millisecond'] } 204334a68001SAndrei Gudkov 204434a68001SAndrei Gudkov## 20454c437254SChuan Zheng# @DirtyRateInfo: 20464c437254SChuan Zheng# 20475034e3d4SAndrei Gudkov# Information about measured dirty page rate. 20484c437254SChuan Zheng# 2049a937b6aaSMarkus Armbruster# @dirty-rate: an estimate of the dirty page rate of the VM in units 20505034e3d4SAndrei Gudkov# of MiB/s. Value is present only when @status is 'measured'. 20514c437254SChuan Zheng# 20525034e3d4SAndrei Gudkov# @status: current status of dirty page rate measurements 20534c437254SChuan Zheng# 20544c437254SChuan Zheng# @start-time: start time in units of second for calculation 20554c437254SChuan Zheng# 205634a68001SAndrei Gudkov# @calc-time: time period for which dirty page rate was measured, 205734a68001SAndrei Gudkov# expressed and rounded down to @calc-time-unit. 205834a68001SAndrei Gudkov# 205934a68001SAndrei Gudkov# @calc-time-unit: time unit of @calc-time (Since 8.2) 20604c437254SChuan Zheng# 20615034e3d4SAndrei Gudkov# @sample-pages: number of sampled pages per GiB of guest memory. 20625034e3d4SAndrei Gudkov# Valid only in page-sampling mode (Since 6.1) 20637afa08cdSHyman Huang(黄勇)# 20645034e3d4SAndrei Gudkov# @mode: mode that was used to measure dirty page rate (Since 6.2) 20650e21bf24SHyman Huang(黄勇)# 20665034e3d4SAndrei Gudkov# @vcpu-dirty-rate: dirty rate for each vCPU if dirty-ring mode was 2067a937b6aaSMarkus Armbruster# specified (Since 6.2) 20680e21bf24SHyman Huang(黄勇)# 20694c437254SChuan Zheng# Since: 5.2 20704c437254SChuan Zheng## 20714c437254SChuan Zheng{ 'struct': 'DirtyRateInfo', 2072b1a859cfSChuan Zheng 'data': {'*dirty-rate': 'int64', 20734c437254SChuan Zheng 'status': 'DirtyRateStatus', 20744c437254SChuan Zheng 'start-time': 'int64', 20757afa08cdSHyman Huang(黄勇) 'calc-time': 'int64', 207634a68001SAndrei Gudkov 'calc-time-unit': 'TimeUnit', 20770e21bf24SHyman Huang(黄勇) 'sample-pages': 'uint64', 20780e21bf24SHyman Huang(黄勇) 'mode': 'DirtyRateMeasureMode', 20790e21bf24SHyman Huang(黄勇) '*vcpu-dirty-rate': [ 'DirtyRateVcpu' ] } } 20804c437254SChuan Zheng 20814c437254SChuan Zheng## 20824c437254SChuan Zheng# @calc-dirty-rate: 20834c437254SChuan Zheng# 20845034e3d4SAndrei Gudkov# Start measuring dirty page rate of the VM. Results can be retrieved 20855034e3d4SAndrei Gudkov# with @query-dirty-rate after measurements are completed. 20864c437254SChuan Zheng# 20875034e3d4SAndrei Gudkov# Dirty page rate is the number of pages changed in a given time 20885034e3d4SAndrei Gudkov# period expressed in MiB/s. The following methods of calculation are 20895034e3d4SAndrei Gudkov# available: 20904c437254SChuan Zheng# 20915034e3d4SAndrei Gudkov# 1. In page sampling mode, a random subset of pages are selected and 20925034e3d4SAndrei Gudkov# hashed twice: once at the beginning of measurement time period, 20935034e3d4SAndrei Gudkov# and once again at the end. If two hashes for some page are 20945034e3d4SAndrei Gudkov# different, the page is counted as changed. Since this method 20955034e3d4SAndrei Gudkov# relies on sampling and hashing, calculated dirty page rate is 20965034e3d4SAndrei Gudkov# only an estimate of its true value. Increasing @sample-pages 20975034e3d4SAndrei Gudkov# improves estimation quality at the cost of higher computational 20985034e3d4SAndrei Gudkov# overhead. 20997afa08cdSHyman Huang(黄勇)# 21005034e3d4SAndrei Gudkov# 2. Dirty bitmap mode captures writes to memory (for example by 21015034e3d4SAndrei Gudkov# temporarily revoking write access to all pages) and counting page 21025034e3d4SAndrei Gudkov# faults. Information about modified pages is collected into a 21035034e3d4SAndrei Gudkov# bitmap, where each bit corresponds to one guest page. This mode 21045034e3d4SAndrei Gudkov# requires that KVM accelerator property "dirty-ring-size" is *not* 21055034e3d4SAndrei Gudkov# set. 21065034e3d4SAndrei Gudkov# 21075034e3d4SAndrei Gudkov# 3. Dirty ring mode is similar to dirty bitmap mode, but the 21085034e3d4SAndrei Gudkov# information about modified pages is collected into ring buffer. 21095034e3d4SAndrei Gudkov# This mode tracks page modification per each vCPU separately. It 21105034e3d4SAndrei Gudkov# requires that KVM accelerator property "dirty-ring-size" is set. 21115034e3d4SAndrei Gudkov# 211201bed0ffSMarkus Armbruster# @calc-time: time period for which dirty page rate is calculated. By 211301bed0ffSMarkus Armbruster# default it is specified in seconds, but the unit can be set 211434a68001SAndrei Gudkov# explicitly with @calc-time-unit. Note that larger @calc-time 211534a68001SAndrei Gudkov# values will typically result in smaller dirty page rates because 211601bed0ffSMarkus Armbruster# page dirtying is a one-time event. Once some page is counted as 211701bed0ffSMarkus Armbruster# dirty during @calc-time period, further writes to this page will 211801bed0ffSMarkus Armbruster# not increase dirty page rate anymore. 211934a68001SAndrei Gudkov# 212001bed0ffSMarkus Armbruster# @calc-time-unit: time unit in which @calc-time is specified. By 212101bed0ffSMarkus Armbruster# default it is seconds. (Since 8.2) 21225034e3d4SAndrei Gudkov# 21235034e3d4SAndrei Gudkov# @sample-pages: number of sampled pages per each GiB of guest memory. 21245034e3d4SAndrei Gudkov# Default value is 512. For 4KiB guest pages this corresponds to 21255034e3d4SAndrei Gudkov# sampling ratio of 0.2%. This argument is used only in page 21265034e3d4SAndrei Gudkov# sampling mode. (Since 6.1) 21275034e3d4SAndrei Gudkov# 21285034e3d4SAndrei Gudkov# @mode: mechanism for tracking dirty pages. Default value is 21295034e3d4SAndrei Gudkov# 'page-sampling'. Others are 'dirty-bitmap' and 'dirty-ring'. 21305034e3d4SAndrei Gudkov# (Since 6.1) 21310e21bf24SHyman Huang(黄勇)# 21324c437254SChuan Zheng# Since: 5.2 21334c437254SChuan Zheng# 21346f07c59fSJohn Snow# .. qmp-example:: 21354ae65a52SAndrea Bolognani# 213637fa48a4SMarkus Armbruster# -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 1, 21379f2b8488SJohn Snow# "sample-pages": 512} } 213837fa48a4SMarkus Armbruster# <- { "return": {} } 213934a68001SAndrei Gudkov# 21406f07c59fSJohn Snow# .. qmp-example:: 21416f07c59fSJohn Snow# :annotated: 21426f07c59fSJohn Snow# 21436f07c59fSJohn Snow# Measure dirty rate using dirty bitmap for 500 milliseconds:: 214434a68001SAndrei Gudkov# 214534a68001SAndrei Gudkov# -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 500, 214634a68001SAndrei Gudkov# "calc-time-unit": "millisecond", "mode": "dirty-bitmap"} } 214734a68001SAndrei Gudkov# 214834a68001SAndrei Gudkov# <- { "return": {} } 21494c437254SChuan Zheng## 21507afa08cdSHyman Huang(黄勇){ 'command': 'calc-dirty-rate', 'data': {'calc-time': 'int64', 215134a68001SAndrei Gudkov '*calc-time-unit': 'TimeUnit', 21520e21bf24SHyman Huang(黄勇) '*sample-pages': 'int', 21530e21bf24SHyman Huang(黄勇) '*mode': 'DirtyRateMeasureMode'} } 21544c437254SChuan Zheng 21554c437254SChuan Zheng## 21564c437254SChuan Zheng# @query-dirty-rate: 21574c437254SChuan Zheng# 21585034e3d4SAndrei Gudkov# Query results of the most recent invocation of @calc-dirty-rate. 21594c437254SChuan Zheng# 216034a68001SAndrei Gudkov# @calc-time-unit: time unit in which to report calculation time. 216134a68001SAndrei Gudkov# By default it is reported in seconds. (Since 8.2) 216234a68001SAndrei Gudkov# 21634c437254SChuan Zheng# Since: 5.2 21645034e3d4SAndrei Gudkov# 2165a9eab6e2SJohn Snow# .. qmp-example:: 2166a9eab6e2SJohn Snow# :title: Measurement is in progress 21675034e3d4SAndrei Gudkov# 21685034e3d4SAndrei Gudkov# <- {"status": "measuring", "sample-pages": 512, 2169320a6cccSAndrei Gudkov# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10, 217034a68001SAndrei Gudkov# "calc-time-unit": "second"} 21715034e3d4SAndrei Gudkov# 2172a9eab6e2SJohn Snow# .. qmp-example:: 2173a9eab6e2SJohn Snow# :title: Measurement has been completed 21745034e3d4SAndrei Gudkov# 21755034e3d4SAndrei Gudkov# <- {"status": "measured", "sample-pages": 512, "dirty-rate": 108, 2176320a6cccSAndrei Gudkov# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10, 217734a68001SAndrei Gudkov# "calc-time-unit": "second"} 21784c437254SChuan Zheng## 217934a68001SAndrei Gudkov{ 'command': 'query-dirty-rate', 'data': {'*calc-time-unit': 'TimeUnit' }, 218034a68001SAndrei Gudkov 'returns': 'DirtyRateInfo' } 21810f0d83a4SDaniel P. Berrangé 21820f0d83a4SDaniel P. Berrangé## 2183f3b2e38cSHyman Huang(黄勇)# @DirtyLimitInfo: 2184f3b2e38cSHyman Huang(黄勇)# 2185f3b2e38cSHyman Huang(黄勇)# Dirty page rate limit information of a virtual CPU. 2186f3b2e38cSHyman Huang(黄勇)# 2187f3b2e38cSHyman Huang(黄勇)# @cpu-index: index of a virtual CPU. 2188f3b2e38cSHyman Huang(黄勇)# 2189f3b2e38cSHyman Huang(黄勇)# @limit-rate: upper limit of dirty page rate (MB/s) for a virtual 2190f3b2e38cSHyman Huang(黄勇)# CPU, 0 means unlimited. 2191f3b2e38cSHyman Huang(黄勇)# 2192f3b2e38cSHyman Huang(黄勇)# @current-rate: current dirty page rate (MB/s) for a virtual CPU. 2193f3b2e38cSHyman Huang(黄勇)# 2194f3b2e38cSHyman Huang(黄勇)# Since: 7.1 2195f3b2e38cSHyman Huang(黄勇)## 2196f3b2e38cSHyman Huang(黄勇){ 'struct': 'DirtyLimitInfo', 2197f3b2e38cSHyman Huang(黄勇) 'data': { 'cpu-index': 'int', 2198f3b2e38cSHyman Huang(黄勇) 'limit-rate': 'uint64', 2199f3b2e38cSHyman Huang(黄勇) 'current-rate': 'uint64' } } 2200f3b2e38cSHyman Huang(黄勇) 2201f3b2e38cSHyman Huang(黄勇)## 2202f3b2e38cSHyman Huang(黄勇)# @set-vcpu-dirty-limit: 2203f3b2e38cSHyman Huang(黄勇)# 2204f3b2e38cSHyman Huang(黄勇)# Set the upper limit of dirty page rate for virtual CPUs. 2205f3b2e38cSHyman Huang(黄勇)# 2206a937b6aaSMarkus Armbruster# Requires KVM with accelerator property "dirty-ring-size" set. A 2207a937b6aaSMarkus Armbruster# virtual CPU's dirty page rate is a measure of its memory load. To 2208a937b6aaSMarkus Armbruster# observe dirty page rates, use @calc-dirty-rate. 2209f3b2e38cSHyman Huang(黄勇)# 2210f3b2e38cSHyman Huang(黄勇)# @cpu-index: index of a virtual CPU, default is all. 2211f3b2e38cSHyman Huang(黄勇)# 2212f3b2e38cSHyman Huang(黄勇)# @dirty-rate: upper limit of dirty page rate (MB/s) for virtual CPUs. 2213f3b2e38cSHyman Huang(黄勇)# 2214f3b2e38cSHyman Huang(黄勇)# Since: 7.1 2215f3b2e38cSHyman Huang(黄勇)# 221614b48aaaSJohn Snow# .. qmp-example:: 221737fa48a4SMarkus Armbruster# 221837fa48a4SMarkus Armbruster# -> {"execute": "set-vcpu-dirty-limit"} 2219f3b2e38cSHyman Huang(黄勇)# "arguments": { "dirty-rate": 200, 2220f3b2e38cSHyman Huang(黄勇)# "cpu-index": 1 } } 222137fa48a4SMarkus Armbruster# <- { "return": {} } 2222f3b2e38cSHyman Huang(黄勇)## 2223f3b2e38cSHyman Huang(黄勇){ 'command': 'set-vcpu-dirty-limit', 2224f3b2e38cSHyman Huang(黄勇) 'data': { '*cpu-index': 'int', 2225f3b2e38cSHyman Huang(黄勇) 'dirty-rate': 'uint64' } } 2226f3b2e38cSHyman Huang(黄勇) 2227f3b2e38cSHyman Huang(黄勇)## 2228f3b2e38cSHyman Huang(黄勇)# @cancel-vcpu-dirty-limit: 2229f3b2e38cSHyman Huang(黄勇)# 2230f3b2e38cSHyman Huang(黄勇)# Cancel the upper limit of dirty page rate for virtual CPUs. 2231f3b2e38cSHyman Huang(黄勇)# 2232f3b2e38cSHyman Huang(黄勇)# Cancel the dirty page limit for the vCPU which has been set with 2233f3b2e38cSHyman Huang(黄勇)# set-vcpu-dirty-limit command. Note that this command requires 2234f3b2e38cSHyman Huang(黄勇)# support from dirty ring, same as the "set-vcpu-dirty-limit". 2235f3b2e38cSHyman Huang(黄勇)# 2236f3b2e38cSHyman Huang(黄勇)# @cpu-index: index of a virtual CPU, default is all. 2237f3b2e38cSHyman Huang(黄勇)# 2238f3b2e38cSHyman Huang(黄勇)# Since: 7.1 2239f3b2e38cSHyman Huang(黄勇)# 224014b48aaaSJohn Snow# .. qmp-example:: 224137fa48a4SMarkus Armbruster# 224237fa48a4SMarkus Armbruster# -> {"execute": "cancel-vcpu-dirty-limit"}, 2243f3b2e38cSHyman Huang(黄勇)# "arguments": { "cpu-index": 1 } } 224437fa48a4SMarkus Armbruster# <- { "return": {} } 2245f3b2e38cSHyman Huang(黄勇)## 2246f3b2e38cSHyman Huang(黄勇){ 'command': 'cancel-vcpu-dirty-limit', 2247f3b2e38cSHyman Huang(黄勇) 'data': { '*cpu-index': 'int'} } 2248f3b2e38cSHyman Huang(黄勇) 2249f3b2e38cSHyman Huang(黄勇)## 2250f3b2e38cSHyman Huang(黄勇)# @query-vcpu-dirty-limit: 2251f3b2e38cSHyman Huang(黄勇)# 2252a937b6aaSMarkus Armbruster# Returns information about virtual CPU dirty page rate limits, if 2253a937b6aaSMarkus Armbruster# any. 2254f3b2e38cSHyman Huang(黄勇)# 2255f3b2e38cSHyman Huang(黄勇)# Since: 7.1 2256f3b2e38cSHyman Huang(黄勇)# 225714b48aaaSJohn Snow# .. qmp-example:: 225837fa48a4SMarkus Armbruster# 225937fa48a4SMarkus Armbruster# -> {"execute": "query-vcpu-dirty-limit"} 226037fa48a4SMarkus Armbruster# <- {"return": [ 226137fa48a4SMarkus Armbruster# { "limit-rate": 60, "current-rate": 3, "cpu-index": 0}, 226237fa48a4SMarkus Armbruster# { "limit-rate": 60, "current-rate": 3, "cpu-index": 1}]} 2263f3b2e38cSHyman Huang(黄勇)## 2264f3b2e38cSHyman Huang(黄勇){ 'command': 'query-vcpu-dirty-limit', 2265f3b2e38cSHyman Huang(黄勇) 'returns': [ 'DirtyLimitInfo' ] } 2266f3b2e38cSHyman Huang(黄勇) 2267f3b2e38cSHyman Huang(黄勇)## 226867132620SJiang Jiacheng# @MigrationThreadInfo: 226967132620SJiang Jiacheng# 227067132620SJiang Jiacheng# Information about migrationthreads 227167132620SJiang Jiacheng# 227267132620SJiang Jiacheng# @name: the name of migration thread 227367132620SJiang Jiacheng# 227467132620SJiang Jiacheng# @thread-id: ID of the underlying host thread 227567132620SJiang Jiacheng# 227667132620SJiang Jiacheng# Since: 7.2 227767132620SJiang Jiacheng## 227867132620SJiang Jiacheng{ 'struct': 'MigrationThreadInfo', 227967132620SJiang Jiacheng 'data': {'name': 'str', 228067132620SJiang Jiacheng 'thread-id': 'int'} } 228167132620SJiang Jiacheng 228267132620SJiang Jiacheng## 228367132620SJiang Jiacheng# @query-migrationthreads: 228467132620SJiang Jiacheng# 228567132620SJiang Jiacheng# Returns information of migration threads 228667132620SJiang Jiacheng# 2287*228529d1SPeter Xu# Features: 2288*228529d1SPeter Xu# 2289*228529d1SPeter Xu# @deprecated: This command is deprecated with no replacement yet. 2290*228529d1SPeter Xu# 2291e6c60bf0SMarkus Armbruster# Returns: @MigrationThreadInfo 229267132620SJiang Jiacheng# 229367132620SJiang Jiacheng# Since: 7.2 229467132620SJiang Jiacheng## 229567132620SJiang Jiacheng{ 'command': 'query-migrationthreads', 2296*228529d1SPeter Xu 'returns': ['MigrationThreadInfo'], 2297*228529d1SPeter Xu 'features': ['deprecated'] } 229867132620SJiang Jiacheng 229967132620SJiang Jiacheng## 23000f0d83a4SDaniel P. Berrangé# @snapshot-save: 23010f0d83a4SDaniel P. Berrangé# 23020f0d83a4SDaniel P. Berrangé# Save a VM snapshot 23030f0d83a4SDaniel P. Berrangé# 23040f0d83a4SDaniel P. Berrangé# @job-id: identifier for the newly created job 2305a937b6aaSMarkus Armbruster# 23060f0d83a4SDaniel P. Berrangé# @tag: name of the snapshot to create 2307a937b6aaSMarkus Armbruster# 23080f0d83a4SDaniel P. Berrangé# @vmstate: block device node name to save vmstate to 2309a937b6aaSMarkus Armbruster# 23100f0d83a4SDaniel P. Berrangé# @devices: list of block device node names to save a snapshot to 23110f0d83a4SDaniel P. Berrangé# 23120f0d83a4SDaniel P. Berrangé# Applications should not assume that the snapshot save is complete 23130f0d83a4SDaniel P. Berrangé# when this command returns. The job commands / events must be used 2314a937b6aaSMarkus Armbruster# to determine completion and to fetch details of any errors that 2315a937b6aaSMarkus Armbruster# arise. 23160f0d83a4SDaniel P. Berrangé# 2317a937b6aaSMarkus Armbruster# Note that execution of the guest CPUs may be stopped during the time 2318a937b6aaSMarkus Armbruster# it takes to save the snapshot. A future version of QEMU may ensure 2319a937b6aaSMarkus Armbruster# CPUs are executing continuously. 23200f0d83a4SDaniel P. Berrangé# 2321a937b6aaSMarkus Armbruster# It is strongly recommended that @devices contain all writable block 2322a937b6aaSMarkus Armbruster# device nodes if a consistent snapshot is required. 23230f0d83a4SDaniel P. Berrangé# 23240f0d83a4SDaniel P. Berrangé# If @tag already exists, an error will be reported 23250f0d83a4SDaniel P. Berrangé# 232614b48aaaSJohn Snow# .. qmp-example:: 23270f0d83a4SDaniel P. Berrangé# 23280f0d83a4SDaniel P. Berrangé# -> { "execute": "snapshot-save", 2329b1ca5322SFabian Holler# "arguments": { 23300f0d83a4SDaniel P. Berrangé# "job-id": "snapsave0", 23310f0d83a4SDaniel P. Berrangé# "tag": "my-snap", 23320f0d83a4SDaniel P. Berrangé# "vmstate": "disk0", 23330f0d83a4SDaniel P. Berrangé# "devices": ["disk0", "disk1"] 23340f0d83a4SDaniel P. Berrangé# } 23350f0d83a4SDaniel P. Berrangé# } 23360f0d83a4SDaniel P. Berrangé# <- { "return": { } } 23370f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 23386e7a37ffSVictor Toso# "timestamp": {"seconds": 1432121972, "microseconds": 744001}, 23390f0d83a4SDaniel P. Berrangé# "data": {"status": "created", "id": "snapsave0"}} 23400f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 23416e7a37ffSVictor Toso# "timestamp": {"seconds": 1432122172, "microseconds": 744001}, 23420f0d83a4SDaniel P. Berrangé# "data": {"status": "running", "id": "snapsave0"}} 23436e7a37ffSVictor Toso# <- {"event": "STOP", 23446e7a37ffSVictor Toso# "timestamp": {"seconds": 1432122372, "microseconds": 744001} } 23456e7a37ffSVictor Toso# <- {"event": "RESUME", 23466e7a37ffSVictor Toso# "timestamp": {"seconds": 1432122572, "microseconds": 744001} } 23470f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 23486e7a37ffSVictor Toso# "timestamp": {"seconds": 1432122772, "microseconds": 744001}, 23490f0d83a4SDaniel P. Berrangé# "data": {"status": "waiting", "id": "snapsave0"}} 23500f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 23516e7a37ffSVictor Toso# "timestamp": {"seconds": 1432122972, "microseconds": 744001}, 23520f0d83a4SDaniel P. Berrangé# "data": {"status": "pending", "id": "snapsave0"}} 23530f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 23546e7a37ffSVictor Toso# "timestamp": {"seconds": 1432123172, "microseconds": 744001}, 23550f0d83a4SDaniel P. Berrangé# "data": {"status": "concluded", "id": "snapsave0"}} 23560f0d83a4SDaniel P. Berrangé# -> {"execute": "query-jobs"} 23570f0d83a4SDaniel P. Berrangé# <- {"return": [{"current-progress": 1, 23580f0d83a4SDaniel P. Berrangé# "status": "concluded", 23590f0d83a4SDaniel P. Berrangé# "total-progress": 1, 23600f0d83a4SDaniel P. Berrangé# "type": "snapshot-save", 23610f0d83a4SDaniel P. Berrangé# "id": "snapsave0"}]} 23620f0d83a4SDaniel P. Berrangé# 23630f0d83a4SDaniel P. Berrangé# Since: 6.0 23640f0d83a4SDaniel P. Berrangé## 23650f0d83a4SDaniel P. Berrangé{ 'command': 'snapshot-save', 23660f0d83a4SDaniel P. Berrangé 'data': { 'job-id': 'str', 23670f0d83a4SDaniel P. Berrangé 'tag': 'str', 23680f0d83a4SDaniel P. Berrangé 'vmstate': 'str', 23690f0d83a4SDaniel P. Berrangé 'devices': ['str'] } } 23700f0d83a4SDaniel P. Berrangé 23710f0d83a4SDaniel P. Berrangé## 23720f0d83a4SDaniel P. Berrangé# @snapshot-load: 23730f0d83a4SDaniel P. Berrangé# 23740f0d83a4SDaniel P. Berrangé# Load a VM snapshot 23750f0d83a4SDaniel P. Berrangé# 23760f0d83a4SDaniel P. Berrangé# @job-id: identifier for the newly created job 2377a937b6aaSMarkus Armbruster# 23780f0d83a4SDaniel P. Berrangé# @tag: name of the snapshot to load. 2379a937b6aaSMarkus Armbruster# 23800f0d83a4SDaniel P. Berrangé# @vmstate: block device node name to load vmstate from 2381a937b6aaSMarkus Armbruster# 23820f0d83a4SDaniel P. Berrangé# @devices: list of block device node names to load a snapshot from 23830f0d83a4SDaniel P. Berrangé# 23840f0d83a4SDaniel P. Berrangé# Applications should not assume that the snapshot load is complete 23850f0d83a4SDaniel P. Berrangé# when this command returns. The job commands / events must be used 2386a937b6aaSMarkus Armbruster# to determine completion and to fetch details of any errors that 2387a937b6aaSMarkus Armbruster# arise. 23880f0d83a4SDaniel P. Berrangé# 23890f0d83a4SDaniel P. Berrangé# Note that execution of the guest CPUs will be stopped during the 23900f0d83a4SDaniel P. Berrangé# time it takes to load the snapshot. 23910f0d83a4SDaniel P. Berrangé# 2392a937b6aaSMarkus Armbruster# It is strongly recommended that @devices contain all writable block 2393a937b6aaSMarkus Armbruster# device nodes that can have changed since the original @snapshot-save 2394a937b6aaSMarkus Armbruster# command execution. 23950f0d83a4SDaniel P. Berrangé# 239614b48aaaSJohn Snow# .. qmp-example:: 23970f0d83a4SDaniel P. Berrangé# 23980f0d83a4SDaniel P. Berrangé# -> { "execute": "snapshot-load", 2399b1ca5322SFabian Holler# "arguments": { 24000f0d83a4SDaniel P. Berrangé# "job-id": "snapload0", 24010f0d83a4SDaniel P. Berrangé# "tag": "my-snap", 24020f0d83a4SDaniel P. Berrangé# "vmstate": "disk0", 24030f0d83a4SDaniel P. Berrangé# "devices": ["disk0", "disk1"] 24040f0d83a4SDaniel P. Berrangé# } 24050f0d83a4SDaniel P. Berrangé# } 24060f0d83a4SDaniel P. Berrangé# <- { "return": { } } 24070f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24086e7a37ffSVictor Toso# "timestamp": {"seconds": 1472124172, "microseconds": 744001}, 24090f0d83a4SDaniel P. Berrangé# "data": {"status": "created", "id": "snapload0"}} 24100f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24116e7a37ffSVictor Toso# "timestamp": {"seconds": 1472125172, "microseconds": 744001}, 24120f0d83a4SDaniel P. Berrangé# "data": {"status": "running", "id": "snapload0"}} 24136e7a37ffSVictor Toso# <- {"event": "STOP", 24146e7a37ffSVictor Toso# "timestamp": {"seconds": 1472125472, "microseconds": 744001} } 24156e7a37ffSVictor Toso# <- {"event": "RESUME", 24166e7a37ffSVictor Toso# "timestamp": {"seconds": 1472125872, "microseconds": 744001} } 24170f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24186e7a37ffSVictor Toso# "timestamp": {"seconds": 1472126172, "microseconds": 744001}, 24190f0d83a4SDaniel P. Berrangé# "data": {"status": "waiting", "id": "snapload0"}} 24200f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24216e7a37ffSVictor Toso# "timestamp": {"seconds": 1472127172, "microseconds": 744001}, 24220f0d83a4SDaniel P. Berrangé# "data": {"status": "pending", "id": "snapload0"}} 24230f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24246e7a37ffSVictor Toso# "timestamp": {"seconds": 1472128172, "microseconds": 744001}, 24250f0d83a4SDaniel P. Berrangé# "data": {"status": "concluded", "id": "snapload0"}} 24260f0d83a4SDaniel P. Berrangé# -> {"execute": "query-jobs"} 24270f0d83a4SDaniel P. Berrangé# <- {"return": [{"current-progress": 1, 24280f0d83a4SDaniel P. Berrangé# "status": "concluded", 24290f0d83a4SDaniel P. Berrangé# "total-progress": 1, 24300f0d83a4SDaniel P. Berrangé# "type": "snapshot-load", 24310f0d83a4SDaniel P. Berrangé# "id": "snapload0"}]} 24320f0d83a4SDaniel P. Berrangé# 24330f0d83a4SDaniel P. Berrangé# Since: 6.0 24340f0d83a4SDaniel P. Berrangé## 24350f0d83a4SDaniel P. Berrangé{ 'command': 'snapshot-load', 24360f0d83a4SDaniel P. Berrangé 'data': { 'job-id': 'str', 24370f0d83a4SDaniel P. Berrangé 'tag': 'str', 24380f0d83a4SDaniel P. Berrangé 'vmstate': 'str', 24390f0d83a4SDaniel P. Berrangé 'devices': ['str'] } } 24400f0d83a4SDaniel P. Berrangé 24410f0d83a4SDaniel P. Berrangé## 24420f0d83a4SDaniel P. Berrangé# @snapshot-delete: 24430f0d83a4SDaniel P. Berrangé# 24440f0d83a4SDaniel P. Berrangé# Delete a VM snapshot 24450f0d83a4SDaniel P. Berrangé# 24460f0d83a4SDaniel P. Berrangé# @job-id: identifier for the newly created job 2447a937b6aaSMarkus Armbruster# 24480f0d83a4SDaniel P. Berrangé# @tag: name of the snapshot to delete. 2449a937b6aaSMarkus Armbruster# 24500f0d83a4SDaniel P. Berrangé# @devices: list of block device node names to delete a snapshot from 24510f0d83a4SDaniel P. Berrangé# 24520f0d83a4SDaniel P. Berrangé# Applications should not assume that the snapshot delete is complete 24530f0d83a4SDaniel P. Berrangé# when this command returns. The job commands / events must be used 2454a937b6aaSMarkus Armbruster# to determine completion and to fetch details of any errors that 2455a937b6aaSMarkus Armbruster# arise. 24560f0d83a4SDaniel P. Berrangé# 245714b48aaaSJohn Snow# .. qmp-example:: 24580f0d83a4SDaniel P. Berrangé# 24590f0d83a4SDaniel P. Berrangé# -> { "execute": "snapshot-delete", 2460b1ca5322SFabian Holler# "arguments": { 24610f0d83a4SDaniel P. Berrangé# "job-id": "snapdelete0", 24620f0d83a4SDaniel P. Berrangé# "tag": "my-snap", 24630f0d83a4SDaniel P. Berrangé# "devices": ["disk0", "disk1"] 24640f0d83a4SDaniel P. Berrangé# } 24650f0d83a4SDaniel P. Berrangé# } 24660f0d83a4SDaniel P. Berrangé# <- { "return": { } } 24670f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24686e7a37ffSVictor Toso# "timestamp": {"seconds": 1442124172, "microseconds": 744001}, 24690f0d83a4SDaniel P. Berrangé# "data": {"status": "created", "id": "snapdelete0"}} 24700f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24716e7a37ffSVictor Toso# "timestamp": {"seconds": 1442125172, "microseconds": 744001}, 24720f0d83a4SDaniel P. Berrangé# "data": {"status": "running", "id": "snapdelete0"}} 24730f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24746e7a37ffSVictor Toso# "timestamp": {"seconds": 1442126172, "microseconds": 744001}, 24750f0d83a4SDaniel P. Berrangé# "data": {"status": "waiting", "id": "snapdelete0"}} 24760f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24776e7a37ffSVictor Toso# "timestamp": {"seconds": 1442127172, "microseconds": 744001}, 24780f0d83a4SDaniel P. Berrangé# "data": {"status": "pending", "id": "snapdelete0"}} 24790f0d83a4SDaniel P. Berrangé# <- {"event": "JOB_STATUS_CHANGE", 24806e7a37ffSVictor Toso# "timestamp": {"seconds": 1442128172, "microseconds": 744001}, 24810f0d83a4SDaniel P. Berrangé# "data": {"status": "concluded", "id": "snapdelete0"}} 24820f0d83a4SDaniel P. Berrangé# -> {"execute": "query-jobs"} 24830f0d83a4SDaniel P. Berrangé# <- {"return": [{"current-progress": 1, 24840f0d83a4SDaniel P. Berrangé# "status": "concluded", 24850f0d83a4SDaniel P. Berrangé# "total-progress": 1, 24860f0d83a4SDaniel P. Berrangé# "type": "snapshot-delete", 24870f0d83a4SDaniel P. Berrangé# "id": "snapdelete0"}]} 24880f0d83a4SDaniel P. Berrangé# 24890f0d83a4SDaniel P. Berrangé# Since: 6.0 24900f0d83a4SDaniel P. Berrangé## 24910f0d83a4SDaniel P. Berrangé{ 'command': 'snapshot-delete', 24920f0d83a4SDaniel P. Berrangé 'data': { 'job-id': 'str', 24930f0d83a4SDaniel P. Berrangé 'tag': 'str', 24940f0d83a4SDaniel P. Berrangé 'devices': ['str'] } } 2495