1d06b747bSMarkus Armbruster# -*- Mode: Python -*- 2f7160f32SAndrea Bolognani# vim: filetype=python 3d06b747bSMarkus Armbruster# 4d06b747bSMarkus Armbruster# This work is licensed under the terms of the GNU GPL, version 2 or later. 5d06b747bSMarkus Armbruster# See the COPYING file in the top-level directory. 6d06b747bSMarkus Armbruster 7d06b747bSMarkus Armbruster## 8d06b747bSMarkus Armbruster# = Dump guest memory 9d06b747bSMarkus Armbruster## 10d06b747bSMarkus Armbruster 11d06b747bSMarkus Armbruster## 12d06b747bSMarkus Armbruster# @DumpGuestMemoryFormat: 13d06b747bSMarkus Armbruster# 14d06b747bSMarkus Armbruster# An enumeration of guest-memory-dump's format. 15d06b747bSMarkus Armbruster# 16d06b747bSMarkus Armbruster# @elf: elf format 17d06b747bSMarkus Armbruster# 18209e64d9SMarkus Armbruster# @kdump-zlib: makedumpfile flattened, kdump-compressed format with 19209e64d9SMarkus Armbruster# zlib compression 20d06b747bSMarkus Armbruster# 21e6549197SStephen Brennan# @kdump-lzo: makedumpfile flattened, kdump-compressed format with lzo 22e6549197SStephen Brennan# compression 23d06b747bSMarkus Armbruster# 24209e64d9SMarkus Armbruster# @kdump-snappy: makedumpfile flattened, kdump-compressed format with 25209e64d9SMarkus Armbruster# snappy compression 26e6549197SStephen Brennan# 27209e64d9SMarkus Armbruster# @kdump-raw-zlib: raw assembled kdump-compressed format with zlib 28209e64d9SMarkus Armbruster# compression (since 8.2) 29e6549197SStephen Brennan# 30209e64d9SMarkus Armbruster# @kdump-raw-lzo: raw assembled kdump-compressed format with lzo 31209e64d9SMarkus Armbruster# compression (since 8.2) 32e6549197SStephen Brennan# 33e6549197SStephen Brennan# @kdump-raw-snappy: raw assembled kdump-compressed format with snappy 34e6549197SStephen Brennan# compression (since 8.2) 35d06b747bSMarkus Armbruster# 36a937b6aaSMarkus Armbruster# @win-dmp: Windows full crashdump format, can be used instead of ELF 37a937b6aaSMarkus Armbruster# converting (since 2.13) 38d06b747bSMarkus Armbruster# 39d06b747bSMarkus Armbruster# Since: 2.0 40d06b747bSMarkus Armbruster## 41d06b747bSMarkus Armbruster{ 'enum': 'DumpGuestMemoryFormat', 42e6549197SStephen Brennan 'data': [ 43e6549197SStephen Brennan 'elf', 44e6549197SStephen Brennan 'kdump-zlib', 'kdump-lzo', 'kdump-snappy', 45e6549197SStephen Brennan 'kdump-raw-zlib', 'kdump-raw-lzo', 'kdump-raw-snappy', 46e6549197SStephen Brennan 'win-dmp' ] } 47d06b747bSMarkus Armbruster 48d06b747bSMarkus Armbruster## 49d06b747bSMarkus Armbruster# @dump-guest-memory: 50d06b747bSMarkus Armbruster# 51a937b6aaSMarkus Armbruster# Dump guest's memory to vmcore. It is a synchronous operation that 52a937b6aaSMarkus Armbruster# can take very long depending on the amount of guest memory. 53d06b747bSMarkus Armbruster# 54a937b6aaSMarkus Armbruster# @paging: if true, do paging to get guest's memory mapping. This 55a937b6aaSMarkus Armbruster# allows using gdb to process the core file. 56d06b747bSMarkus Armbruster# 57d06b747bSMarkus Armbruster# IMPORTANT: this option can make QEMU allocate several gigabytes 58a937b6aaSMarkus Armbruster# of RAM. This can happen for a large guest, or a malicious guest 59a937b6aaSMarkus Armbruster# pretending to be large. 60d06b747bSMarkus Armbruster# 61d06b747bSMarkus Armbruster# Also, paging=true has the following limitations: 62d06b747bSMarkus Armbruster# 63a937b6aaSMarkus Armbruster# 1. The guest may be in a catastrophic state or can have 64a937b6aaSMarkus Armbruster# corrupted memory, which cannot be trusted 65d06b747bSMarkus Armbruster# 2. The guest can be in real-mode even if paging is enabled. For 66d06b747bSMarkus Armbruster# example, the guest uses ACPI to sleep, and ACPI sleep state 67d06b747bSMarkus Armbruster# goes in real-mode 68d06b747bSMarkus Armbruster# 3. Currently only supported on i386 and x86_64. 69d06b747bSMarkus Armbruster# 70a937b6aaSMarkus Armbruster# @protocol: the filename or file descriptor of the vmcore. The 71a937b6aaSMarkus Armbruster# supported protocols are: 72d06b747bSMarkus Armbruster# 73d06b747bSMarkus Armbruster# 1. file: the protocol starts with "file:", and the following 74d06b747bSMarkus Armbruster# string is the file's path. 75d06b747bSMarkus Armbruster# 2. fd: the protocol starts with "fd:", and the following string 76d06b747bSMarkus Armbruster# is the fd's name. 77d06b747bSMarkus Armbruster# 78a937b6aaSMarkus Armbruster# @detach: if true, QMP will return immediately rather than waiting 79a937b6aaSMarkus Armbruster# for the dump to finish. The user can track progress using 80a937b6aaSMarkus Armbruster# "query-dump". (since 2.6). 81d06b747bSMarkus Armbruster# 82d06b747bSMarkus Armbruster# @begin: if specified, the starting physical address. 83d06b747bSMarkus Armbruster# 84a937b6aaSMarkus Armbruster# @length: if specified, the memory size, in bytes. If you don't want 85a937b6aaSMarkus Armbruster# to dump all guest's memory, please specify the start @begin and 86a937b6aaSMarkus Armbruster# @length 87d06b747bSMarkus Armbruster# 88d06b747bSMarkus Armbruster# @format: if specified, the format of guest memory dump. But non-elf 89a937b6aaSMarkus Armbruster# format is conflict with paging and filter, ie. @paging, @begin 90a937b6aaSMarkus Armbruster# and @length is not allowed to be specified with non-elf @format 91a937b6aaSMarkus Armbruster# at the same time (since 2.0) 92d06b747bSMarkus Armbruster# 93d461c279SJohn Snow# .. note:: All boolean arguments default to false. 94d06b747bSMarkus Armbruster# 95d06b747bSMarkus Armbruster# Since: 1.2 96d06b747bSMarkus Armbruster# 97*14b48aaaSJohn Snow# .. qmp-example:: 98d06b747bSMarkus Armbruster# 99d06b747bSMarkus Armbruster# -> { "execute": "dump-guest-memory", 1004375cf98SVictor Toso# "arguments": { "paging": false, "protocol": "fd:dump" } } 101d06b747bSMarkus Armbruster# <- { "return": {} } 102d06b747bSMarkus Armbruster## 103d06b747bSMarkus Armbruster{ 'command': 'dump-guest-memory', 104d06b747bSMarkus Armbruster 'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool', 105d06b747bSMarkus Armbruster '*begin': 'int', '*length': 'int', 106d06b747bSMarkus Armbruster '*format': 'DumpGuestMemoryFormat'} } 107d06b747bSMarkus Armbruster 108d06b747bSMarkus Armbruster## 109d06b747bSMarkus Armbruster# @DumpStatus: 110d06b747bSMarkus Armbruster# 111d06b747bSMarkus Armbruster# Describe the status of a long-running background guest memory dump. 112d06b747bSMarkus Armbruster# 113d06b747bSMarkus Armbruster# @none: no dump-guest-memory has started yet. 114d06b747bSMarkus Armbruster# 115d06b747bSMarkus Armbruster# @active: there is one dump running in background. 116d06b747bSMarkus Armbruster# 117d06b747bSMarkus Armbruster# @completed: the last dump has finished successfully. 118d06b747bSMarkus Armbruster# 119d06b747bSMarkus Armbruster# @failed: the last dump has failed. 120d06b747bSMarkus Armbruster# 121d06b747bSMarkus Armbruster# Since: 2.6 122d06b747bSMarkus Armbruster## 123d06b747bSMarkus Armbruster{ 'enum': 'DumpStatus', 124d06b747bSMarkus Armbruster 'data': [ 'none', 'active', 'completed', 'failed' ] } 125d06b747bSMarkus Armbruster 126d06b747bSMarkus Armbruster## 127d06b747bSMarkus Armbruster# @DumpQueryResult: 128d06b747bSMarkus Armbruster# 129d06b747bSMarkus Armbruster# The result format for 'query-dump'. 130d06b747bSMarkus Armbruster# 131d06b747bSMarkus Armbruster# @status: enum of @DumpStatus, which shows current dump status 132d06b747bSMarkus Armbruster# 133d06b747bSMarkus Armbruster# @completed: bytes written in latest dump (uncompressed) 134d06b747bSMarkus Armbruster# 135d06b747bSMarkus Armbruster# @total: total bytes to be written in latest dump (uncompressed) 136d06b747bSMarkus Armbruster# 137d06b747bSMarkus Armbruster# Since: 2.6 138d06b747bSMarkus Armbruster## 139d06b747bSMarkus Armbruster{ 'struct': 'DumpQueryResult', 140d06b747bSMarkus Armbruster 'data': { 'status': 'DumpStatus', 141d06b747bSMarkus Armbruster 'completed': 'int', 142d06b747bSMarkus Armbruster 'total': 'int' } } 143d06b747bSMarkus Armbruster 144d06b747bSMarkus Armbruster## 145d06b747bSMarkus Armbruster# @query-dump: 146d06b747bSMarkus Armbruster# 147d06b747bSMarkus Armbruster# Query latest dump status. 148d06b747bSMarkus Armbruster# 149d06b747bSMarkus Armbruster# Returns: A @DumpStatus object showing the dump status. 150d06b747bSMarkus Armbruster# 151d06b747bSMarkus Armbruster# Since: 2.6 152d06b747bSMarkus Armbruster# 153*14b48aaaSJohn Snow# .. qmp-example:: 154d06b747bSMarkus Armbruster# 155d06b747bSMarkus Armbruster# -> { "execute": "query-dump" } 156d06b747bSMarkus Armbruster# <- { "return": { "status": "active", "completed": 1024000, 157d06b747bSMarkus Armbruster# "total": 2048000 } } 158d06b747bSMarkus Armbruster## 159d06b747bSMarkus Armbruster{ 'command': 'query-dump', 'returns': 'DumpQueryResult' } 160d06b747bSMarkus Armbruster 161d06b747bSMarkus Armbruster## 162d06b747bSMarkus Armbruster# @DUMP_COMPLETED: 163d06b747bSMarkus Armbruster# 164d06b747bSMarkus Armbruster# Emitted when background dump has completed 165d06b747bSMarkus Armbruster# 166d06b747bSMarkus Armbruster# @result: final dump status 167d06b747bSMarkus Armbruster# 168a937b6aaSMarkus Armbruster# @error: human-readable error string that provides hint on why dump 169a937b6aaSMarkus Armbruster# failed. Only presents on failure. The user should not try to 170a937b6aaSMarkus Armbruster# interpret the error string. 171d06b747bSMarkus Armbruster# 172d06b747bSMarkus Armbruster# Since: 2.6 173d06b747bSMarkus Armbruster# 174*14b48aaaSJohn Snow# .. qmp-example:: 175d06b747bSMarkus Armbruster# 176077a5b1eSVictor Toso# <- { "event": "DUMP_COMPLETED", 177d06b747bSMarkus Armbruster# "data": { "result": { "total": 1090650112, "status": "completed", 178077a5b1eSVictor Toso# "completed": 1090650112 } }, 179077a5b1eSVictor Toso# "timestamp": { "seconds": 1648244171, "microseconds": 950316 } } 180d06b747bSMarkus Armbruster## 181d06b747bSMarkus Armbruster{ 'event': 'DUMP_COMPLETED' , 182d06b747bSMarkus Armbruster 'data': { 'result': 'DumpQueryResult', '*error': 'str' } } 183d06b747bSMarkus Armbruster 184d06b747bSMarkus Armbruster## 185d06b747bSMarkus Armbruster# @DumpGuestMemoryCapability: 186d06b747bSMarkus Armbruster# 187a57790f7SMarkus Armbruster# @formats: the available formats for dump-guest-memory 188d06b747bSMarkus Armbruster# 189d06b747bSMarkus Armbruster# Since: 2.0 190d06b747bSMarkus Armbruster## 191d06b747bSMarkus Armbruster{ 'struct': 'DumpGuestMemoryCapability', 192d06b747bSMarkus Armbruster 'data': { 193d06b747bSMarkus Armbruster 'formats': ['DumpGuestMemoryFormat'] } } 194d06b747bSMarkus Armbruster 195d06b747bSMarkus Armbruster## 196d06b747bSMarkus Armbruster# @query-dump-guest-memory-capability: 197d06b747bSMarkus Armbruster# 198d06b747bSMarkus Armbruster# Returns the available formats for dump-guest-memory 199d06b747bSMarkus Armbruster# 200a937b6aaSMarkus Armbruster# Returns: A @DumpGuestMemoryCapability object listing available 201a937b6aaSMarkus Armbruster# formats for dump-guest-memory 202d06b747bSMarkus Armbruster# 203d06b747bSMarkus Armbruster# Since: 2.0 204d06b747bSMarkus Armbruster# 205*14b48aaaSJohn Snow# .. qmp-example:: 206d06b747bSMarkus Armbruster# 207d06b747bSMarkus Armbruster# -> { "execute": "query-dump-guest-memory-capability" } 208d06b747bSMarkus Armbruster# <- { "return": { "formats": 209612fb7cdSVictor Toso# ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] } } 210d06b747bSMarkus Armbruster## 211d06b747bSMarkus Armbruster{ 'command': 'query-dump-guest-memory-capability', 212d06b747bSMarkus Armbruster 'returns': 'DumpGuestMemoryCapability' } 213