xref: /openbmc/qemu/qapi/stats.json (revision 78dfb7b0d325ed9433b2adbb77ffd075a8b6b89a)
1b9f88dc0SMark Kanda# -*- Mode: Python -*-
2b9f88dc0SMark Kanda# vim: filetype=python
3b9f88dc0SMark Kanda#
4b9f88dc0SMark Kanda# Copyright (c) 2022 Oracle and/or its affiliates.
5b9f88dc0SMark Kanda#
6b9f88dc0SMark Kanda# This work is licensed under the terms of the GNU GPL, version 2 or later.
7b9f88dc0SMark Kanda# See the COPYING file in the top-level directory.
8b9f88dc0SMark Kanda#
9b9f88dc0SMark Kanda# SPDX-License-Identifier: GPL-2.0-or-later
10b9f88dc0SMark Kanda
11b9f88dc0SMark Kanda##
12b9f88dc0SMark Kanda# = Statistics
13b9f88dc0SMark Kanda##
14b9f88dc0SMark Kanda
15b9f88dc0SMark Kanda##
16b9f88dc0SMark Kanda# @StatsType:
17b9f88dc0SMark Kanda#
18b9f88dc0SMark Kanda# Enumeration of statistics types
19b9f88dc0SMark Kanda#
20b9f88dc0SMark Kanda# @cumulative: stat is cumulative; value can only increase.
21a937b6aaSMarkus Armbruster#
22b9f88dc0SMark Kanda# @instant: stat is instantaneous; value can increase or decrease.
23a937b6aaSMarkus Armbruster#
24b9f88dc0SMark Kanda# @peak: stat is the peak value; value can only increase.
25a937b6aaSMarkus Armbruster#
26b9f88dc0SMark Kanda# @linear-histogram: stat is a linear histogram.
27a937b6aaSMarkus Armbruster#
28b9f88dc0SMark Kanda# @log2-histogram: stat is a logarithmic histogram, with one bucket
29b9f88dc0SMark Kanda#     for each power of two.
30b9f88dc0SMark Kanda#
31b9f88dc0SMark Kanda# Since: 7.1
32b9f88dc0SMark Kanda##
33b9f88dc0SMark Kanda{ 'enum' : 'StatsType',
34b9f88dc0SMark Kanda  'data' : [ 'cumulative', 'instant', 'peak', 'linear-histogram',
35b9f88dc0SMark Kanda             'log2-histogram' ] }
36b9f88dc0SMark Kanda
37b9f88dc0SMark Kanda##
38b9f88dc0SMark Kanda# @StatsUnit:
39b9f88dc0SMark Kanda#
40b9f88dc0SMark Kanda# Enumeration of unit of measurement for statistics
41b9f88dc0SMark Kanda#
42b9f88dc0SMark Kanda# @bytes: stat reported in bytes.
43a937b6aaSMarkus Armbruster#
44b9f88dc0SMark Kanda# @seconds: stat reported in seconds.
45a937b6aaSMarkus Armbruster#
46b9f88dc0SMark Kanda# @cycles: stat reported in clock cycles.
47a937b6aaSMarkus Armbruster#
481ca1a7ecSPaolo Bonzini# @boolean: stat is a boolean value.
49b9f88dc0SMark Kanda#
50b9f88dc0SMark Kanda# Since: 7.1
51b9f88dc0SMark Kanda##
52b9f88dc0SMark Kanda{ 'enum' : 'StatsUnit',
531ca1a7ecSPaolo Bonzini  'data' : [ 'bytes', 'seconds', 'cycles', 'boolean' ] }
54b9f88dc0SMark Kanda
55b9f88dc0SMark Kanda##
56b9f88dc0SMark Kanda# @StatsProvider:
57b9f88dc0SMark Kanda#
58b9f88dc0SMark Kanda# Enumeration of statistics providers.
59b9f88dc0SMark Kanda#
60f2b90109Szhenwei pi# @kvm: since 7.1
61f2b90109Szhenwei pi#
62f2b90109Szhenwei pi# @cryptodev: since 8.0
63f2b90109Szhenwei pi#
64b9f88dc0SMark Kanda# Since: 7.1
65b9f88dc0SMark Kanda##
66b9f88dc0SMark Kanda{ 'enum': 'StatsProvider',
67f2b90109Szhenwei pi  'data': [ 'kvm', 'cryptodev' ] }
68b9f88dc0SMark Kanda
69b9f88dc0SMark Kanda##
70b9f88dc0SMark Kanda# @StatsTarget:
71b9f88dc0SMark Kanda#
72b9f88dc0SMark Kanda# The kinds of objects on which one can request statistics.
73b9f88dc0SMark Kanda#
74a937b6aaSMarkus Armbruster# @vm: statistics that apply to the entire virtual machine or the
75a937b6aaSMarkus Armbruster#     entire QEMU process.
76b9f88dc0SMark Kanda#
77b9f88dc0SMark Kanda# @vcpu: statistics that apply to a single virtual CPU.
78b9f88dc0SMark Kanda#
7994546de1SMarkus Armbruster# @cryptodev: statistics that apply to a crypto device (since 8.0)
80f2b90109Szhenwei pi#
81b9f88dc0SMark Kanda# Since: 7.1
82b9f88dc0SMark Kanda##
83b9f88dc0SMark Kanda{ 'enum': 'StatsTarget',
84f2b90109Szhenwei pi  'data': [ 'vm', 'vcpu', 'cryptodev' ] }
85b9f88dc0SMark Kanda
86b9f88dc0SMark Kanda##
87068cc51dSPaolo Bonzini# @StatsRequest:
88068cc51dSPaolo Bonzini#
89a937b6aaSMarkus Armbruster# Indicates a set of statistics that should be returned by
90a937b6aaSMarkus Armbruster# query-stats.
91068cc51dSPaolo Bonzini#
92068cc51dSPaolo Bonzini# @provider: provider for which to return statistics.
93a937b6aaSMarkus Armbruster#
94cf7405bcSPaolo Bonzini# @names: statistics to be returned (all if omitted).
95068cc51dSPaolo Bonzini#
96068cc51dSPaolo Bonzini# Since: 7.1
97068cc51dSPaolo Bonzini##
98068cc51dSPaolo Bonzini{ 'struct': 'StatsRequest',
99cf7405bcSPaolo Bonzini  'data': { 'provider': 'StatsProvider',
100cf7405bcSPaolo Bonzini            '*names': [ 'str' ] } }
101068cc51dSPaolo Bonzini
102068cc51dSPaolo Bonzini##
103467ef823SPaolo Bonzini# @StatsVCPUFilter:
104b9f88dc0SMark Kanda#
105467ef823SPaolo Bonzini# @vcpus: list of QOM paths for the desired vCPU objects.
106b9f88dc0SMark Kanda#
107b9f88dc0SMark Kanda# Since: 7.1
108b9f88dc0SMark Kanda##
109467ef823SPaolo Bonzini{ 'struct': 'StatsVCPUFilter',
110467ef823SPaolo Bonzini  'data': { '*vcpus': [ 'str' ] } }
111467ef823SPaolo Bonzini
112467ef823SPaolo Bonzini##
113467ef823SPaolo Bonzini# @StatsFilter:
114467ef823SPaolo Bonzini#
115a937b6aaSMarkus Armbruster# The arguments to the query-stats command; specifies a target for
116a937b6aaSMarkus Armbruster# which to request statistics and optionally the required subset of
1171de75953SPaolo Bonzini# information for that target.
118c1101028SMarkus Armbruster#
1191de75953SPaolo Bonzini# @target: the kind of objects to query.  Note that each possible
1201de75953SPaolo Bonzini#     target may enable additional filtering options
121467ef823SPaolo Bonzini#
122*01bed0ffSMarkus Armbruster# @providers: which providers to request statistics from, and
123*01bed0ffSMarkus Armbruster#     optionally which named values to return within each provider
12489a2273bSMarkus Armbruster#
125467ef823SPaolo Bonzini# Since: 7.1
126467ef823SPaolo Bonzini##
127467ef823SPaolo Bonzini{ 'union': 'StatsFilter',
128068cc51dSPaolo Bonzini  'base': {
129068cc51dSPaolo Bonzini      'target': 'StatsTarget',
130068cc51dSPaolo Bonzini      '*providers': [ 'StatsRequest' ] },
131467ef823SPaolo Bonzini  'discriminator': 'target',
132467ef823SPaolo Bonzini  'data': { 'vcpu': 'StatsVCPUFilter' } }
133b9f88dc0SMark Kanda
134b9f88dc0SMark Kanda##
135b9f88dc0SMark Kanda# @StatsValue:
136b9f88dc0SMark Kanda#
137b9f88dc0SMark Kanda# @scalar: single unsigned 64-bit integers.
138a937b6aaSMarkus Armbruster#
1391de75953SPaolo Bonzini# @boolean: single boolean value.
1401de75953SPaolo Bonzini#
141b9f88dc0SMark Kanda# @list: list of unsigned 64-bit integers (used for histograms).
142b9f88dc0SMark Kanda#
143b9f88dc0SMark Kanda# Since: 7.1
144b9f88dc0SMark Kanda##
145b9f88dc0SMark Kanda{ 'alternate': 'StatsValue',
146b9f88dc0SMark Kanda  'data': { 'scalar': 'uint64',
1471ca1a7ecSPaolo Bonzini            'boolean': 'bool',
148b9f88dc0SMark Kanda            'list': [ 'uint64' ] } }
149b9f88dc0SMark Kanda
150b9f88dc0SMark Kanda##
151b9f88dc0SMark Kanda# @Stats:
152b9f88dc0SMark Kanda#
153b9f88dc0SMark Kanda# @name: name of stat.
154a937b6aaSMarkus Armbruster#
155b9f88dc0SMark Kanda# @value: stat value.
156b9f88dc0SMark Kanda#
157b9f88dc0SMark Kanda# Since: 7.1
158b9f88dc0SMark Kanda##
159b9f88dc0SMark Kanda{ 'struct': 'Stats',
160b9f88dc0SMark Kanda  'data': { 'name': 'str',
161b9f88dc0SMark Kanda            'value' : 'StatsValue' } }
162b9f88dc0SMark Kanda
163b9f88dc0SMark Kanda##
164b9f88dc0SMark Kanda# @StatsResult:
165b9f88dc0SMark Kanda#
166b9f88dc0SMark Kanda# @provider: provider for this set of statistics.
167b9f88dc0SMark Kanda#
168b9f88dc0SMark Kanda# @qom-path: Path to the object for which the statistics are returned,
169b9f88dc0SMark Kanda#     if the object is exposed in the QOM tree
170b9f88dc0SMark Kanda#
171b9f88dc0SMark Kanda# @stats: list of statistics.
172b9f88dc0SMark Kanda#
173b9f88dc0SMark Kanda# Since: 7.1
174b9f88dc0SMark Kanda##
175b9f88dc0SMark Kanda{ 'struct': 'StatsResult',
176b9f88dc0SMark Kanda  'data': { 'provider': 'StatsProvider',
177b9f88dc0SMark Kanda            '*qom-path': 'str',
178b9f88dc0SMark Kanda            'stats': [ 'Stats' ] } }
179b9f88dc0SMark Kanda
180b9f88dc0SMark Kanda##
181b9f88dc0SMark Kanda# @query-stats:
182b9f88dc0SMark Kanda#
183a937b6aaSMarkus Armbruster# Return runtime-collected statistics for objects such as the VM or
184a937b6aaSMarkus Armbruster# its vCPUs.
185b9f88dc0SMark Kanda#
186b9f88dc0SMark Kanda# The arguments are a StatsFilter and specify the provider and objects
187b9f88dc0SMark Kanda# to return statistics about.
188b9f88dc0SMark Kanda#
189b9f88dc0SMark Kanda# Returns: a list of StatsResult, one for each provider and object
190b9f88dc0SMark Kanda#     (e.g., for each vCPU).
191b9f88dc0SMark Kanda#
192b9f88dc0SMark Kanda# Since: 7.1
193b9f88dc0SMark Kanda##
194b9f88dc0SMark Kanda{ 'command': 'query-stats',
195b9f88dc0SMark Kanda  'data': 'StatsFilter',
196b9f88dc0SMark Kanda  'boxed': true,
197b9f88dc0SMark Kanda  'returns': [ 'StatsResult' ] }
198b9f88dc0SMark Kanda
199b9f88dc0SMark Kanda##
200b9f88dc0SMark Kanda# @StatsSchemaValue:
201b9f88dc0SMark Kanda#
202b9f88dc0SMark Kanda# Schema for a single statistic.
203b9f88dc0SMark Kanda#
204b9f88dc0SMark Kanda# @name: name of the statistic; each element of the schema is uniquely
205a937b6aaSMarkus Armbruster#     identified by a target, a provider (both available in
206a937b6aaSMarkus Armbruster#     @StatsSchema) and the name.
207b9f88dc0SMark Kanda#
208b9f88dc0SMark Kanda# @type: kind of statistic.
209b9f88dc0SMark Kanda#
210a937b6aaSMarkus Armbruster# @unit: basic unit of measure for the statistic; if missing, the
211a937b6aaSMarkus Armbruster#     statistic is a simple number or counter.
212b9f88dc0SMark Kanda#
213a937b6aaSMarkus Armbruster# @base: base for the multiple of @unit in which the statistic is
214a937b6aaSMarkus Armbruster#     measured.  Only present if @exponent is non-zero; @base and
215a937b6aaSMarkus Armbruster#     @exponent together form a SI prefix (e.g., _nano-_ for
216a937b6aaSMarkus Armbruster#     ``base=10`` and ``exponent=-9``) or IEC binary prefix (e.g.
217a937b6aaSMarkus Armbruster#     _kibi-_ for ``base=2`` and ``exponent=10``)
218b9f88dc0SMark Kanda#
219a937b6aaSMarkus Armbruster# @exponent: exponent for the multiple of @unit in which the statistic
220a937b6aaSMarkus Armbruster#     is expressed, or 0 for the basic unit
221b9f88dc0SMark Kanda#
222a937b6aaSMarkus Armbruster# @bucket-size: Present when @type is "linear-histogram", contains the
223a937b6aaSMarkus Armbruster#     width of each bucket of the histogram.
224b9f88dc0SMark Kanda#
225b9f88dc0SMark Kanda# Since: 7.1
226b9f88dc0SMark Kanda##
227b9f88dc0SMark Kanda{ 'struct': 'StatsSchemaValue',
228b9f88dc0SMark Kanda  'data': { 'name': 'str',
229b9f88dc0SMark Kanda            'type': 'StatsType',
230b9f88dc0SMark Kanda            '*unit': 'StatsUnit',
231b9f88dc0SMark Kanda            '*base': 'int8',
232b9f88dc0SMark Kanda            'exponent': 'int16',
233b9f88dc0SMark Kanda            '*bucket-size': 'uint32' } }
234b9f88dc0SMark Kanda
235b9f88dc0SMark Kanda##
236b9f88dc0SMark Kanda# @StatsSchema:
237b9f88dc0SMark Kanda#
238b9f88dc0SMark Kanda# Schema for all available statistics for a provider and target.
239b9f88dc0SMark Kanda#
240b9f88dc0SMark Kanda# @provider: provider for this set of statistics.
241b9f88dc0SMark Kanda#
242a937b6aaSMarkus Armbruster# @target: the kind of object that can be queried through the
243a937b6aaSMarkus Armbruster#     provider.
244b9f88dc0SMark Kanda#
245b9f88dc0SMark Kanda# @stats: list of statistics.
246b9f88dc0SMark Kanda#
247b9f88dc0SMark Kanda# Since: 7.1
248b9f88dc0SMark Kanda##
249b9f88dc0SMark Kanda{ 'struct': 'StatsSchema',
250b9f88dc0SMark Kanda  'data': { 'provider': 'StatsProvider',
251b9f88dc0SMark Kanda            'target': 'StatsTarget',
252b9f88dc0SMark Kanda            'stats': [ 'StatsSchemaValue' ] } }
253b9f88dc0SMark Kanda
254b9f88dc0SMark Kanda##
255b9f88dc0SMark Kanda# @query-stats-schemas:
256b9f88dc0SMark Kanda#
257b9f88dc0SMark Kanda# Return the schema for all available runtime-collected statistics.
258b9f88dc0SMark Kanda#
2591de75953SPaolo Bonzini# @provider: a provider to restrict the query to.
2601de75953SPaolo Bonzini#
261d461c279SJohn Snow# .. note:: Runtime-collected statistics and their names fall outside
262d461c279SJohn Snow#    QEMU's usual deprecation policies.  QEMU will try to keep the set
263d461c279SJohn Snow#    of available data stable, together with their names, but will not
264d461c279SJohn Snow#    guarantee stability at all costs; the same is true of providers
265d461c279SJohn Snow#    that source statistics externally, e.g. from Linux.  For example,
266d461c279SJohn Snow#    if the same value is being tracked with different names on
267d461c279SJohn Snow#    different architectures or by different providers, one of them
268d461c279SJohn Snow#    might be renamed.  A statistic might go away if an algorithm is
269d461c279SJohn Snow#    changed or some code is removed; changing a default might cause
270d461c279SJohn Snow#    previously useful statistics to always report 0.  Such changes,
271d461c279SJohn Snow#    however, are expected to be rare.
272b9f88dc0SMark Kanda#
273b9f88dc0SMark Kanda# Since: 7.1
274b9f88dc0SMark Kanda##
275b9f88dc0SMark Kanda{ 'command': 'query-stats-schemas',
276068cc51dSPaolo Bonzini  'data': { '*provider': 'StatsProvider' },
277b9f88dc0SMark Kanda  'returns': [ 'StatsSchema' ] }
278