1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4# This work is licensed under the terms of the GNU GPL, version 2 or later. 5# See the COPYING file in the top-level directory. 6 7## 8# = Machines 9## 10 11## 12# @SysEmuTarget: 13# 14# The comprehensive enumeration of QEMU system emulation ("softmmu") 15# targets. Run "./configure --help" in the project root directory, and 16# look for the \*-softmmu targets near the "--target-list" option. The 17# individual target constants are not documented here, for the time 18# being. 19# 20# @rx: since 5.0 21# @avr: since 5.1 22# 23# Notes: The resulting QMP strings can be appended to the "qemu-system-" 24# prefix to produce the corresponding QEMU executable name. This 25# is true even for "qemu-system-x86_64". 26# 27# Since: 3.0 28## 29{ 'enum' : 'SysEmuTarget', 30 'data' : [ 'aarch64', 'alpha', 'arm', 'avr', 'cris', 'hppa', 'i386', 'lm32', 31 'm68k', 'microblaze', 'microblazeel', 'mips', 'mips64', 32 'mips64el', 'mipsel', 'moxie', 'nios2', 'or1k', 'ppc', 33 'ppc64', 'riscv32', 'riscv64', 'rx', 's390x', 'sh4', 34 'sh4eb', 'sparc', 'sparc64', 'tricore', 'unicore32', 35 'x86_64', 'xtensa', 'xtensaeb' ] } 36 37## 38# @CpuInfoArch: 39# 40# An enumeration of cpu types that enable additional information during 41# @query-cpus and @query-cpus-fast. 42# 43# @s390: since 2.12 44# 45# @riscv: since 2.12 46# 47# Since: 2.6 48## 49{ 'enum': 'CpuInfoArch', 50 'data': ['x86', 'sparc', 'ppc', 'mips', 'tricore', 's390', 'riscv', 'other' ] } 51 52## 53# @CpuInfo: 54# 55# Information about a virtual CPU 56# 57# @CPU: the index of the virtual CPU 58# 59# @current: this only exists for backwards compatibility and should be ignored 60# 61# @halted: true if the virtual CPU is in the halt state. Halt usually refers 62# to a processor specific low power mode. 63# 64# @qom_path: path to the CPU object in the QOM tree (since 2.4) 65# 66# @thread_id: ID of the underlying host thread 67# 68# @props: properties describing to which node/socket/core/thread 69# virtual CPU belongs to, provided if supported by board (since 2.10) 70# 71# @arch: architecture of the cpu, which determines which additional fields 72# will be listed (since 2.6) 73# 74# Since: 0.14.0 75# 76# Notes: @halted is a transient state that changes frequently. By the time the 77# data is sent to the client, the guest may no longer be halted. 78## 79{ 'union': 'CpuInfo', 80 'base': {'CPU': 'int', 'current': 'bool', 'halted': 'bool', 81 'qom_path': 'str', 'thread_id': 'int', 82 '*props': 'CpuInstanceProperties', 'arch': 'CpuInfoArch' }, 83 'discriminator': 'arch', 84 'data': { 'x86': 'CpuInfoX86', 85 'sparc': 'CpuInfoSPARC', 86 'ppc': 'CpuInfoPPC', 87 'mips': 'CpuInfoMIPS', 88 'tricore': 'CpuInfoTricore', 89 's390': 'CpuInfoS390', 90 'riscv': 'CpuInfoRISCV' } } 91 92## 93# @CpuInfoX86: 94# 95# Additional information about a virtual i386 or x86_64 CPU 96# 97# @pc: the 64-bit instruction pointer 98# 99# Since: 2.6 100## 101{ 'struct': 'CpuInfoX86', 'data': { 'pc': 'int' } } 102 103## 104# @CpuInfoSPARC: 105# 106# Additional information about a virtual SPARC CPU 107# 108# @pc: the PC component of the instruction pointer 109# 110# @npc: the NPC component of the instruction pointer 111# 112# Since: 2.6 113## 114{ 'struct': 'CpuInfoSPARC', 'data': { 'pc': 'int', 'npc': 'int' } } 115 116## 117# @CpuInfoPPC: 118# 119# Additional information about a virtual PPC CPU 120# 121# @nip: the instruction pointer 122# 123# Since: 2.6 124## 125{ 'struct': 'CpuInfoPPC', 'data': { 'nip': 'int' } } 126 127## 128# @CpuInfoMIPS: 129# 130# Additional information about a virtual MIPS CPU 131# 132# @PC: the instruction pointer 133# 134# Since: 2.6 135## 136{ 'struct': 'CpuInfoMIPS', 'data': { 'PC': 'int' } } 137 138## 139# @CpuInfoTricore: 140# 141# Additional information about a virtual Tricore CPU 142# 143# @PC: the instruction pointer 144# 145# Since: 2.6 146## 147{ 'struct': 'CpuInfoTricore', 'data': { 'PC': 'int' } } 148 149## 150# @CpuInfoRISCV: 151# 152# Additional information about a virtual RISCV CPU 153# 154# @pc: the instruction pointer 155# 156# Since 2.12 157## 158{ 'struct': 'CpuInfoRISCV', 'data': { 'pc': 'int' } } 159 160## 161# @CpuS390State: 162# 163# An enumeration of cpu states that can be assumed by a virtual 164# S390 CPU 165# 166# Since: 2.12 167## 168{ 'enum': 'CpuS390State', 169 'prefix': 'S390_CPU_STATE', 170 'data': [ 'uninitialized', 'stopped', 'check-stop', 'operating', 'load' ] } 171 172## 173# @CpuInfoS390: 174# 175# Additional information about a virtual S390 CPU 176# 177# @cpu-state: the virtual CPU's state 178# 179# Since: 2.12 180## 181{ 'struct': 'CpuInfoS390', 'data': { 'cpu-state': 'CpuS390State' } } 182 183## 184# @query-cpus: 185# 186# Returns a list of information about each virtual CPU. 187# 188# This command causes vCPU threads to exit to userspace, which causes 189# a small interruption to guest CPU execution. This will have a negative 190# impact on realtime guests and other latency sensitive guest workloads. 191# 192# Features: 193# @deprecated: This command is deprecated, because it interferes with 194# the guest. Use 'query-cpus-fast' instead to avoid the vCPU 195# interruption. 196# 197# Returns: a list of @CpuInfo for each virtual CPU 198# 199# Since: 0.14.0 200# 201# Example: 202# 203# -> { "execute": "query-cpus" } 204# <- { "return": [ 205# { 206# "CPU":0, 207# "current":true, 208# "halted":false, 209# "qom_path":"/machine/unattached/device[0]", 210# "arch":"x86", 211# "pc":3227107138, 212# "thread_id":3134 213# }, 214# { 215# "CPU":1, 216# "current":false, 217# "halted":true, 218# "qom_path":"/machine/unattached/device[2]", 219# "arch":"x86", 220# "pc":7108165, 221# "thread_id":3135 222# } 223# ] 224# } 225# 226## 227{ 'command': 'query-cpus', 'returns': ['CpuInfo'], 228 'features': [ 'deprecated' ] } 229 230## 231# @CpuInfoFast: 232# 233# Information about a virtual CPU 234# 235# @cpu-index: index of the virtual CPU 236# 237# @qom-path: path to the CPU object in the QOM tree 238# 239# @thread-id: ID of the underlying host thread 240# 241# @props: properties describing to which node/socket/core/thread 242# virtual CPU belongs to, provided if supported by board 243# 244# @arch: base architecture of the cpu 245# 246# @target: the QEMU system emulation target, which determines which 247# additional fields will be listed (since 3.0) 248# 249# Features: 250# @deprecated: Member @arch is deprecated. Use @target instead. 251# 252# Since: 2.12 253# 254## 255{ 'union' : 'CpuInfoFast', 256 'base' : { 'cpu-index' : 'int', 257 'qom-path' : 'str', 258 'thread-id' : 'int', 259 '*props' : 'CpuInstanceProperties', 260 'arch' : { 'type': 'CpuInfoArch', 261 'features': [ 'deprecated' ] }, 262 'target' : 'SysEmuTarget' }, 263 'discriminator' : 'target', 264 'data' : { 's390x' : 'CpuInfoS390' } } 265 266## 267# @query-cpus-fast: 268# 269# Returns information about all virtual CPUs. This command does not 270# incur a performance penalty and should be used in production 271# instead of query-cpus. 272# 273# Returns: list of @CpuInfoFast 274# 275# Since: 2.12 276# 277# Example: 278# 279# -> { "execute": "query-cpus-fast" } 280# <- { "return": [ 281# { 282# "thread-id": 25627, 283# "props": { 284# "core-id": 0, 285# "thread-id": 0, 286# "socket-id": 0 287# }, 288# "qom-path": "/machine/unattached/device[0]", 289# "arch":"x86", 290# "target":"x86_64", 291# "cpu-index": 0 292# }, 293# { 294# "thread-id": 25628, 295# "props": { 296# "core-id": 0, 297# "thread-id": 0, 298# "socket-id": 1 299# }, 300# "qom-path": "/machine/unattached/device[2]", 301# "arch":"x86", 302# "target":"x86_64", 303# "cpu-index": 1 304# } 305# ] 306# } 307## 308{ 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] } 309 310## 311# @MachineInfo: 312# 313# Information describing a machine. 314# 315# @name: the name of the machine 316# 317# @alias: an alias for the machine name 318# 319# @is-default: whether the machine is default 320# 321# @cpu-max: maximum number of CPUs supported by the machine type 322# (since 1.5.0) 323# 324# @hotpluggable-cpus: cpu hotplug via -device is supported (since 2.7.0) 325# 326# @numa-mem-supported: true if '-numa node,mem' option is supported by 327# the machine type and false otherwise (since 4.1) 328# 329# @deprecated: if true, the machine type is deprecated and may be removed 330# in future versions of QEMU according to the QEMU deprecation 331# policy (since 4.1.0) 332# 333# @default-cpu-type: default CPU model typename if none is requested via 334# the -cpu argument. (since 4.2) 335# 336# @default-ram-id: the default ID of initial RAM memory backend (since 5.2) 337# 338# Since: 1.2.0 339## 340{ 'struct': 'MachineInfo', 341 'data': { 'name': 'str', '*alias': 'str', 342 '*is-default': 'bool', 'cpu-max': 'int', 343 'hotpluggable-cpus': 'bool', 'numa-mem-supported': 'bool', 344 'deprecated': 'bool', '*default-cpu-type': 'str', 345 '*default-ram-id': 'str' } } 346 347## 348# @query-machines: 349# 350# Return a list of supported machines 351# 352# Returns: a list of MachineInfo 353# 354# Since: 1.2.0 355## 356{ 'command': 'query-machines', 'returns': ['MachineInfo'] } 357 358## 359# @CurrentMachineParams: 360# 361# Information describing the running machine parameters. 362# 363# @wakeup-suspend-support: true if the machine supports wake up from 364# suspend 365# 366# Since: 4.0 367## 368{ 'struct': 'CurrentMachineParams', 369 'data': { 'wakeup-suspend-support': 'bool'} } 370 371## 372# @query-current-machine: 373# 374# Return information on the current virtual machine. 375# 376# Returns: CurrentMachineParams 377# 378# Since: 4.0 379## 380{ 'command': 'query-current-machine', 'returns': 'CurrentMachineParams' } 381 382## 383# @TargetInfo: 384# 385# Information describing the QEMU target. 386# 387# @arch: the target architecture 388# 389# Since: 1.2.0 390## 391{ 'struct': 'TargetInfo', 392 'data': { 'arch': 'SysEmuTarget' } } 393 394## 395# @query-target: 396# 397# Return information about the target for this QEMU 398# 399# Returns: TargetInfo 400# 401# Since: 1.2.0 402## 403{ 'command': 'query-target', 'returns': 'TargetInfo' } 404 405## 406# @UuidInfo: 407# 408# Guest UUID information (Universally Unique Identifier). 409# 410# @UUID: the UUID of the guest 411# 412# Since: 0.14.0 413# 414# Notes: If no UUID was specified for the guest, a null UUID is returned. 415## 416{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} } 417 418## 419# @query-uuid: 420# 421# Query the guest UUID information. 422# 423# Returns: The @UuidInfo for the guest 424# 425# Since: 0.14.0 426# 427# Example: 428# 429# -> { "execute": "query-uuid" } 430# <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } } 431# 432## 433{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true } 434 435## 436# @GuidInfo: 437# 438# GUID information. 439# 440# @guid: the globally unique identifier 441# 442# Since: 2.9 443## 444{ 'struct': 'GuidInfo', 'data': {'guid': 'str'} } 445 446## 447# @query-vm-generation-id: 448# 449# Show Virtual Machine Generation ID 450# 451# Since: 2.9 452## 453{ 'command': 'query-vm-generation-id', 'returns': 'GuidInfo' } 454 455## 456# @LostTickPolicy: 457# 458# Policy for handling lost ticks in timer devices. Ticks end up getting 459# lost when, for example, the guest is paused. 460# 461# @discard: throw away the missed ticks and continue with future injection 462# normally. The guest OS will see the timer jump ahead by a 463# potentially quite significant amount all at once, as if the 464# intervening chunk of time had simply not existed; needless to 465# say, such a sudden jump can easily confuse a guest OS which is 466# not specifically prepared to deal with it. Assuming the guest 467# OS can deal correctly with the time jump, the time in the guest 468# and in the host should now match. 469# 470# @delay: continue to deliver ticks at the normal rate. The guest OS will 471# not notice anything is amiss, as from its point of view time will 472# have continued to flow normally. The time in the guest should now 473# be behind the time in the host by exactly the amount of time during 474# which ticks have been missed. 475# 476# @slew: deliver ticks at a higher rate to catch up with the missed ticks. 477# The guest OS will not notice anything is amiss, as from its point 478# of view time will have continued to flow normally. Once the timer 479# has managed to catch up with all the missing ticks, the time in 480# the guest and in the host should match. 481# 482# Since: 2.0 483## 484{ 'enum': 'LostTickPolicy', 485 'data': ['discard', 'delay', 'slew' ] } 486 487## 488# @NumaOptionsType: 489# 490# @node: NUMA nodes configuration 491# 492# @dist: NUMA distance configuration (since 2.10) 493# 494# @cpu: property based CPU(s) to node mapping (Since: 2.10) 495# 496# @hmat-lb: memory latency and bandwidth information (Since: 5.0) 497# 498# @hmat-cache: memory side cache information (Since: 5.0) 499# 500# Since: 2.1 501## 502{ 'enum': 'NumaOptionsType', 503 'data': [ 'node', 'dist', 'cpu', 'hmat-lb', 'hmat-cache' ] } 504 505## 506# @NumaOptions: 507# 508# A discriminated record of NUMA options. (for OptsVisitor) 509# 510# Since: 2.1 511## 512{ 'union': 'NumaOptions', 513 'base': { 'type': 'NumaOptionsType' }, 514 'discriminator': 'type', 515 'data': { 516 'node': 'NumaNodeOptions', 517 'dist': 'NumaDistOptions', 518 'cpu': 'NumaCpuOptions', 519 'hmat-lb': 'NumaHmatLBOptions', 520 'hmat-cache': 'NumaHmatCacheOptions' }} 521 522## 523# @NumaNodeOptions: 524# 525# Create a guest NUMA node. (for OptsVisitor) 526# 527# @nodeid: NUMA node ID (increase by 1 from 0 if omitted) 528# 529# @cpus: VCPUs belonging to this node (assign VCPUS round-robin 530# if omitted) 531# 532# @mem: memory size of this node; mutually exclusive with @memdev. 533# Equally divide total memory among nodes if both @mem and @memdev are 534# omitted. 535# 536# @memdev: memory backend object. If specified for one node, 537# it must be specified for all nodes. 538# 539# @initiator: defined in ACPI 6.3 Chapter 5.2.27.3 Table 5-145, 540# points to the nodeid which has the memory controller 541# responsible for this NUMA node. This field provides 542# additional information as to the initiator node that 543# is closest (as in directly attached) to this node, and 544# therefore has the best performance (since 5.0) 545# 546# Since: 2.1 547## 548{ 'struct': 'NumaNodeOptions', 549 'data': { 550 '*nodeid': 'uint16', 551 '*cpus': ['uint16'], 552 '*mem': 'size', 553 '*memdev': 'str', 554 '*initiator': 'uint16' }} 555 556## 557# @NumaDistOptions: 558# 559# Set the distance between 2 NUMA nodes. 560# 561# @src: source NUMA node. 562# 563# @dst: destination NUMA node. 564# 565# @val: NUMA distance from source node to destination node. 566# When a node is unreachable from another node, set the distance 567# between them to 255. 568# 569# Since: 2.10 570## 571{ 'struct': 'NumaDistOptions', 572 'data': { 573 'src': 'uint16', 574 'dst': 'uint16', 575 'val': 'uint8' }} 576 577## 578# @X86CPURegister32: 579# 580# A X86 32-bit register 581# 582# Since: 1.5 583## 584{ 'enum': 'X86CPURegister32', 585 'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] } 586 587## 588# @X86CPUFeatureWordInfo: 589# 590# Information about a X86 CPU feature word 591# 592# @cpuid-input-eax: Input EAX value for CPUID instruction for that feature word 593# 594# @cpuid-input-ecx: Input ECX value for CPUID instruction for that 595# feature word 596# 597# @cpuid-register: Output register containing the feature bits 598# 599# @features: value of output register, containing the feature bits 600# 601# Since: 1.5 602## 603{ 'struct': 'X86CPUFeatureWordInfo', 604 'data': { 'cpuid-input-eax': 'int', 605 '*cpuid-input-ecx': 'int', 606 'cpuid-register': 'X86CPURegister32', 607 'features': 'int' } } 608 609## 610# @DummyForceArrays: 611# 612# Not used by QMP; hack to let us use X86CPUFeatureWordInfoList internally 613# 614# Since: 2.5 615## 616{ 'struct': 'DummyForceArrays', 617 'data': { 'unused': ['X86CPUFeatureWordInfo'] } } 618 619## 620# @NumaCpuOptions: 621# 622# Option "-numa cpu" overrides default cpu to node mapping. 623# It accepts the same set of cpu properties as returned by 624# query-hotpluggable-cpus[].props, where node-id could be used to 625# override default node mapping. 626# 627# Since: 2.10 628## 629{ 'struct': 'NumaCpuOptions', 630 'base': 'CpuInstanceProperties', 631 'data' : {} } 632 633## 634# @HmatLBMemoryHierarchy: 635# 636# The memory hierarchy in the System Locality Latency and Bandwidth 637# Information Structure of HMAT (Heterogeneous Memory Attribute Table) 638# 639# For more information about @HmatLBMemoryHierarchy, see chapter 640# 5.2.27.4: Table 5-146: Field "Flags" of ACPI 6.3 spec. 641# 642# @memory: the structure represents the memory performance 643# 644# @first-level: first level of memory side cache 645# 646# @second-level: second level of memory side cache 647# 648# @third-level: third level of memory side cache 649# 650# Since: 5.0 651## 652{ 'enum': 'HmatLBMemoryHierarchy', 653 'data': [ 'memory', 'first-level', 'second-level', 'third-level' ] } 654 655## 656# @HmatLBDataType: 657# 658# Data type in the System Locality Latency and Bandwidth 659# Information Structure of HMAT (Heterogeneous Memory Attribute Table) 660# 661# For more information about @HmatLBDataType, see chapter 662# 5.2.27.4: Table 5-146: Field "Data Type" of ACPI 6.3 spec. 663# 664# @access-latency: access latency (nanoseconds) 665# 666# @read-latency: read latency (nanoseconds) 667# 668# @write-latency: write latency (nanoseconds) 669# 670# @access-bandwidth: access bandwidth (Bytes per second) 671# 672# @read-bandwidth: read bandwidth (Bytes per second) 673# 674# @write-bandwidth: write bandwidth (Bytes per second) 675# 676# Since: 5.0 677## 678{ 'enum': 'HmatLBDataType', 679 'data': [ 'access-latency', 'read-latency', 'write-latency', 680 'access-bandwidth', 'read-bandwidth', 'write-bandwidth' ] } 681 682## 683# @NumaHmatLBOptions: 684# 685# Set the system locality latency and bandwidth information 686# between Initiator and Target proximity Domains. 687# 688# For more information about @NumaHmatLBOptions, see chapter 689# 5.2.27.4: Table 5-146 of ACPI 6.3 spec. 690# 691# @initiator: the Initiator Proximity Domain. 692# 693# @target: the Target Proximity Domain. 694# 695# @hierarchy: the Memory Hierarchy. Indicates the performance 696# of memory or side cache. 697# 698# @data-type: presents the type of data, access/read/write 699# latency or hit latency. 700# 701# @latency: the value of latency from @initiator to @target 702# proximity domain, the latency unit is "ns(nanosecond)". 703# 704# @bandwidth: the value of bandwidth between @initiator and @target 705# proximity domain, the bandwidth unit is 706# "Bytes per second". 707# 708# Since: 5.0 709## 710{ 'struct': 'NumaHmatLBOptions', 711 'data': { 712 'initiator': 'uint16', 713 'target': 'uint16', 714 'hierarchy': 'HmatLBMemoryHierarchy', 715 'data-type': 'HmatLBDataType', 716 '*latency': 'uint64', 717 '*bandwidth': 'size' }} 718 719## 720# @HmatCacheAssociativity: 721# 722# Cache associativity in the Memory Side Cache Information Structure 723# of HMAT 724# 725# For more information of @HmatCacheAssociativity, see chapter 726# 5.2.27.5: Table 5-147 of ACPI 6.3 spec. 727# 728# @none: None (no memory side cache in this proximity domain, 729# or cache associativity unknown) 730# 731# @direct: Direct Mapped 732# 733# @complex: Complex Cache Indexing (implementation specific) 734# 735# Since: 5.0 736## 737{ 'enum': 'HmatCacheAssociativity', 738 'data': [ 'none', 'direct', 'complex' ] } 739 740## 741# @HmatCacheWritePolicy: 742# 743# Cache write policy in the Memory Side Cache Information Structure 744# of HMAT 745# 746# For more information of @HmatCacheWritePolicy, see chapter 747# 5.2.27.5: Table 5-147: Field "Cache Attributes" of ACPI 6.3 spec. 748# 749# @none: None (no memory side cache in this proximity domain, 750# or cache write policy unknown) 751# 752# @write-back: Write Back (WB) 753# 754# @write-through: Write Through (WT) 755# 756# Since: 5.0 757## 758{ 'enum': 'HmatCacheWritePolicy', 759 'data': [ 'none', 'write-back', 'write-through' ] } 760 761## 762# @NumaHmatCacheOptions: 763# 764# Set the memory side cache information for a given memory domain. 765# 766# For more information of @NumaHmatCacheOptions, see chapter 767# 5.2.27.5: Table 5-147: Field "Cache Attributes" of ACPI 6.3 spec. 768# 769# @node-id: the memory proximity domain to which the memory belongs. 770# 771# @size: the size of memory side cache in bytes. 772# 773# @level: the cache level described in this structure. 774# 775# @associativity: the cache associativity, 776# none/direct-mapped/complex(complex cache indexing). 777# 778# @policy: the write policy, none/write-back/write-through. 779# 780# @line: the cache Line size in bytes. 781# 782# Since: 5.0 783## 784{ 'struct': 'NumaHmatCacheOptions', 785 'data': { 786 'node-id': 'uint32', 787 'size': 'size', 788 'level': 'uint8', 789 'associativity': 'HmatCacheAssociativity', 790 'policy': 'HmatCacheWritePolicy', 791 'line': 'uint16' }} 792 793## 794# @HostMemPolicy: 795# 796# Host memory policy types 797# 798# @default: restore default policy, remove any nondefault policy 799# 800# @preferred: set the preferred host nodes for allocation 801# 802# @bind: a strict policy that restricts memory allocation to the 803# host nodes specified 804# 805# @interleave: memory allocations are interleaved across the set 806# of host nodes specified 807# 808# Since: 2.1 809## 810{ 'enum': 'HostMemPolicy', 811 'data': [ 'default', 'preferred', 'bind', 'interleave' ] } 812 813## 814# @Memdev: 815# 816# Information about memory backend 817# 818# @id: backend's ID if backend has 'id' property (since 2.9) 819# 820# @size: memory backend size 821# 822# @merge: enables or disables memory merge support 823# 824# @dump: includes memory backend's memory in a core dump or not 825# 826# @prealloc: enables or disables memory preallocation 827# 828# @host-nodes: host nodes for its memory policy 829# 830# @policy: memory policy of memory backend 831# 832# Since: 2.1 833## 834{ 'struct': 'Memdev', 835 'data': { 836 '*id': 'str', 837 'size': 'size', 838 'merge': 'bool', 839 'dump': 'bool', 840 'prealloc': 'bool', 841 'host-nodes': ['uint16'], 842 'policy': 'HostMemPolicy' }} 843 844## 845# @query-memdev: 846# 847# Returns information for all memory backends. 848# 849# Returns: a list of @Memdev. 850# 851# Since: 2.1 852# 853# Example: 854# 855# -> { "execute": "query-memdev" } 856# <- { "return": [ 857# { 858# "id": "mem1", 859# "size": 536870912, 860# "merge": false, 861# "dump": true, 862# "prealloc": false, 863# "host-nodes": [0, 1], 864# "policy": "bind" 865# }, 866# { 867# "size": 536870912, 868# "merge": false, 869# "dump": true, 870# "prealloc": true, 871# "host-nodes": [2, 3], 872# "policy": "preferred" 873# } 874# ] 875# } 876# 877## 878{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true } 879 880## 881# @CpuInstanceProperties: 882# 883# List of properties to be used for hotplugging a CPU instance, 884# it should be passed by management with device_add command when 885# a CPU is being hotplugged. 886# 887# @node-id: NUMA node ID the CPU belongs to 888# @socket-id: socket number within node/board the CPU belongs to 889# @die-id: die number within node/board the CPU belongs to (Since 4.1) 890# @core-id: core number within die the CPU belongs to 891# @thread-id: thread number within core the CPU belongs to 892# 893# Note: currently there are 5 properties that could be present 894# but management should be prepared to pass through other 895# properties with device_add command to allow for future 896# interface extension. This also requires the filed names to be kept in 897# sync with the properties passed to -device/device_add. 898# 899# Since: 2.7 900## 901{ 'struct': 'CpuInstanceProperties', 902 'data': { '*node-id': 'int', 903 '*socket-id': 'int', 904 '*die-id': 'int', 905 '*core-id': 'int', 906 '*thread-id': 'int' 907 } 908} 909 910## 911# @HotpluggableCPU: 912# 913# @type: CPU object type for usage with device_add command 914# @props: list of properties to be used for hotplugging CPU 915# @vcpus-count: number of logical VCPU threads @HotpluggableCPU provides 916# @qom-path: link to existing CPU object if CPU is present or 917# omitted if CPU is not present. 918# 919# Since: 2.7 920## 921{ 'struct': 'HotpluggableCPU', 922 'data': { 'type': 'str', 923 'vcpus-count': 'int', 924 'props': 'CpuInstanceProperties', 925 '*qom-path': 'str' 926 } 927} 928 929## 930# @query-hotpluggable-cpus: 931# 932# TODO: Better documentation; currently there is none. 933# 934# Returns: a list of HotpluggableCPU objects. 935# 936# Since: 2.7 937# 938# Example: 939# 940# For pseries machine type started with -smp 2,cores=2,maxcpus=4 -cpu POWER8: 941# 942# -> { "execute": "query-hotpluggable-cpus" } 943# <- {"return": [ 944# { "props": { "core": 8 }, "type": "POWER8-spapr-cpu-core", 945# "vcpus-count": 1 }, 946# { "props": { "core": 0 }, "type": "POWER8-spapr-cpu-core", 947# "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"} 948# ]}' 949# 950# For pc machine type started with -smp 1,maxcpus=2: 951# 952# -> { "execute": "query-hotpluggable-cpus" } 953# <- {"return": [ 954# { 955# "type": "qemu64-x86_64-cpu", "vcpus-count": 1, 956# "props": {"core-id": 0, "socket-id": 1, "thread-id": 0} 957# }, 958# { 959# "qom-path": "/machine/unattached/device[0]", 960# "type": "qemu64-x86_64-cpu", "vcpus-count": 1, 961# "props": {"core-id": 0, "socket-id": 0, "thread-id": 0} 962# } 963# ]} 964# 965# For s390x-virtio-ccw machine type started with -smp 1,maxcpus=2 -cpu qemu 966# (Since: 2.11): 967# 968# -> { "execute": "query-hotpluggable-cpus" } 969# <- {"return": [ 970# { 971# "type": "qemu-s390x-cpu", "vcpus-count": 1, 972# "props": { "core-id": 1 } 973# }, 974# { 975# "qom-path": "/machine/unattached/device[0]", 976# "type": "qemu-s390x-cpu", "vcpus-count": 1, 977# "props": { "core-id": 0 } 978# } 979# ]} 980# 981## 982{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'], 983 'allow-preconfig': true } 984 985## 986# @set-numa-node: 987# 988# Runtime equivalent of '-numa' CLI option, available at 989# preconfigure stage to configure numa mapping before initializing 990# machine. 991# 992# Since 3.0 993## 994{ 'command': 'set-numa-node', 'boxed': true, 995 'data': 'NumaOptions', 996 'allow-preconfig': true 997} 998 999## 1000# @balloon: 1001# 1002# Request the balloon driver to change its balloon size. 1003# 1004# @value: the target logical size of the VM in bytes. 1005# We can deduce the size of the balloon using this formula: 1006# 1007# logical_vm_size = vm_ram_size - balloon_size 1008# 1009# From it we have: balloon_size = vm_ram_size - @value 1010# 1011# Returns: - Nothing on success 1012# - If the balloon driver is enabled but not functional because the KVM 1013# kernel module cannot support it, KvmMissingCap 1014# - If no balloon device is present, DeviceNotActive 1015# 1016# Notes: This command just issues a request to the guest. When it returns, 1017# the balloon size may not have changed. A guest can change the balloon 1018# size independent of this command. 1019# 1020# Since: 0.14.0 1021# 1022# Example: 1023# 1024# -> { "execute": "balloon", "arguments": { "value": 536870912 } } 1025# <- { "return": {} } 1026# 1027# With a 2.5GiB guest this command inflated the ballon to 3GiB. 1028# 1029## 1030{ 'command': 'balloon', 'data': {'value': 'int'} } 1031 1032## 1033# @BalloonInfo: 1034# 1035# Information about the guest balloon device. 1036# 1037# @actual: the logical size of the VM in bytes 1038# Formula used: logical_vm_size = vm_ram_size - balloon_size 1039# 1040# Since: 0.14.0 1041# 1042## 1043{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } } 1044 1045## 1046# @query-balloon: 1047# 1048# Return information about the balloon device. 1049# 1050# Returns: - @BalloonInfo on success 1051# - If the balloon driver is enabled but not functional because the KVM 1052# kernel module cannot support it, KvmMissingCap 1053# - If no balloon device is present, DeviceNotActive 1054# 1055# Since: 0.14.0 1056# 1057# Example: 1058# 1059# -> { "execute": "query-balloon" } 1060# <- { "return": { 1061# "actual": 1073741824, 1062# } 1063# } 1064# 1065## 1066{ 'command': 'query-balloon', 'returns': 'BalloonInfo' } 1067 1068## 1069# @BALLOON_CHANGE: 1070# 1071# Emitted when the guest changes the actual BALLOON level. This value is 1072# equivalent to the @actual field return by the 'query-balloon' command 1073# 1074# @actual: the logical size of the VM in bytes 1075# Formula used: logical_vm_size = vm_ram_size - balloon_size 1076# 1077# Note: this event is rate-limited. 1078# 1079# Since: 1.2 1080# 1081# Example: 1082# 1083# <- { "event": "BALLOON_CHANGE", 1084# "data": { "actual": 944766976 }, 1085# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } } 1086# 1087## 1088{ 'event': 'BALLOON_CHANGE', 1089 'data': { 'actual': 'int' } } 1090 1091## 1092# @MemoryInfo: 1093# 1094# Actual memory information in bytes. 1095# 1096# @base-memory: size of "base" memory specified with command line 1097# option -m. 1098# 1099# @plugged-memory: size of memory that can be hot-unplugged. This field 1100# is omitted if target doesn't support memory hotplug 1101# (i.e. CONFIG_MEM_DEVICE not defined at build time). 1102# 1103# Since: 2.11.0 1104## 1105{ 'struct': 'MemoryInfo', 1106 'data' : { 'base-memory': 'size', '*plugged-memory': 'size' } } 1107 1108## 1109# @query-memory-size-summary: 1110# 1111# Return the amount of initially allocated and present hotpluggable (if 1112# enabled) memory in bytes. 1113# 1114# Example: 1115# 1116# -> { "execute": "query-memory-size-summary" } 1117# <- { "return": { "base-memory": 4294967296, "plugged-memory": 0 } } 1118# 1119# Since: 2.11.0 1120## 1121{ 'command': 'query-memory-size-summary', 'returns': 'MemoryInfo' } 1122 1123## 1124# @PCDIMMDeviceInfo: 1125# 1126# PCDIMMDevice state information 1127# 1128# @id: device's ID 1129# 1130# @addr: physical address, where device is mapped 1131# 1132# @size: size of memory that the device provides 1133# 1134# @slot: slot number at which device is plugged in 1135# 1136# @node: NUMA node number where device is plugged in 1137# 1138# @memdev: memory backend linked with device 1139# 1140# @hotplugged: true if device was hotplugged 1141# 1142# @hotpluggable: true if device if could be added/removed while machine is running 1143# 1144# Since: 2.1 1145## 1146{ 'struct': 'PCDIMMDeviceInfo', 1147 'data': { '*id': 'str', 1148 'addr': 'int', 1149 'size': 'int', 1150 'slot': 'int', 1151 'node': 'int', 1152 'memdev': 'str', 1153 'hotplugged': 'bool', 1154 'hotpluggable': 'bool' 1155 } 1156} 1157 1158## 1159# @VirtioPMEMDeviceInfo: 1160# 1161# VirtioPMEM state information 1162# 1163# @id: device's ID 1164# 1165# @memaddr: physical address in memory, where device is mapped 1166# 1167# @size: size of memory that the device provides 1168# 1169# @memdev: memory backend linked with device 1170# 1171# Since: 4.1 1172## 1173{ 'struct': 'VirtioPMEMDeviceInfo', 1174 'data': { '*id': 'str', 1175 'memaddr': 'size', 1176 'size': 'size', 1177 'memdev': 'str' 1178 } 1179} 1180 1181## 1182# @VirtioMEMDeviceInfo: 1183# 1184# VirtioMEMDevice state information 1185# 1186# @id: device's ID 1187# 1188# @memaddr: physical address in memory, where device is mapped 1189# 1190# @requested-size: the user requested size of the device 1191# 1192# @size: the (current) size of memory that the device provides 1193# 1194# @max-size: the maximum size of memory that the device can provide 1195# 1196# @block-size: the block size of memory that the device provides 1197# 1198# @node: NUMA node number where device is assigned to 1199# 1200# @memdev: memory backend linked with the region 1201# 1202# Since: 5.1 1203## 1204{ 'struct': 'VirtioMEMDeviceInfo', 1205 'data': { '*id': 'str', 1206 'memaddr': 'size', 1207 'requested-size': 'size', 1208 'size': 'size', 1209 'max-size': 'size', 1210 'block-size': 'size', 1211 'node': 'int', 1212 'memdev': 'str' 1213 } 1214} 1215 1216## 1217# @MemoryDeviceInfo: 1218# 1219# Union containing information about a memory device 1220# 1221# nvdimm is included since 2.12. virtio-pmem is included since 4.1. 1222# virtio-mem is included since 5.1. 1223# 1224# Since: 2.1 1225## 1226{ 'union': 'MemoryDeviceInfo', 1227 'data': { 'dimm': 'PCDIMMDeviceInfo', 1228 'nvdimm': 'PCDIMMDeviceInfo', 1229 'virtio-pmem': 'VirtioPMEMDeviceInfo', 1230 'virtio-mem': 'VirtioMEMDeviceInfo' 1231 } 1232} 1233 1234## 1235# @query-memory-devices: 1236# 1237# Lists available memory devices and their state 1238# 1239# Since: 2.1 1240# 1241# Example: 1242# 1243# -> { "execute": "query-memory-devices" } 1244# <- { "return": [ { "data": 1245# { "addr": 5368709120, 1246# "hotpluggable": true, 1247# "hotplugged": true, 1248# "id": "d1", 1249# "memdev": "/objects/memX", 1250# "node": 0, 1251# "size": 1073741824, 1252# "slot": 0}, 1253# "type": "dimm" 1254# } ] } 1255# 1256## 1257{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] } 1258 1259## 1260# @MEMORY_DEVICE_SIZE_CHANGE: 1261# 1262# Emitted when the size of a memory device changes. Only emitted for memory 1263# devices that can actually change the size (e.g., virtio-mem due to guest 1264# action). 1265# 1266# @id: device's ID 1267# @size: the new size of memory that the device provides 1268# 1269# Note: this event is rate-limited. 1270# 1271# Since: 5.1 1272# 1273# Example: 1274# 1275# <- { "event": "MEMORY_DEVICE_SIZE_CHANGE", 1276# "data": { "id": "vm0", "size": 1073741824}, 1277# "timestamp": { "seconds": 1588168529, "microseconds": 201316 } } 1278# 1279## 1280{ 'event': 'MEMORY_DEVICE_SIZE_CHANGE', 1281 'data': { '*id': 'str', 'size': 'size' } } 1282 1283 1284## 1285# @MEM_UNPLUG_ERROR: 1286# 1287# Emitted when memory hot unplug error occurs. 1288# 1289# @device: device name 1290# 1291# @msg: Informative message 1292# 1293# Since: 2.4 1294# 1295# Example: 1296# 1297# <- { "event": "MEM_UNPLUG_ERROR" 1298# "data": { "device": "dimm1", 1299# "msg": "acpi: device unplug for unsupported device" 1300# }, 1301# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 1302# 1303## 1304{ 'event': 'MEM_UNPLUG_ERROR', 1305 'data': { 'device': 'str', 'msg': 'str' } } 1306