xref: /openbmc/qemu/qapi/dump.json (revision 78dfb7b0d325ed9433b2adbb77ffd075a8b6b89a)
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