Files
server/usr/share/doc/qemu-system-common/system/cpu-hotplug.html
2026-01-07 20:52:11 +01:00

313 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Virtual CPU hotplug &mdash; QEMU Debian 1:8.2.2+ds-0ubuntu1.11 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=86f27845" />
<link rel="stylesheet" type="text/css" href="../_static/theme_overrides.css?v=08e6c168" />
<link rel="shortcut icon" href="../_static/qemu_32x32.png"/>
<script src="../_static/jquery.js?v=8dae8fb0"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=802af9f6"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/custom.js?v=2ab9f71d"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Persistent reservation managers" href="pr-manager.html" />
<link rel="prev" title="Managing device boot order with bootindex properties" href="bootindex.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #802400" >
<a href="../index.html" class="icon icon-home">
QEMU
<img src="../_static/qemu_128x128.png" class="logo" alt="Logo"/>
</a>
<div class="version">
8.2.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../about/index.html">About QEMU</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">System Emulation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="invocation.html">Invocation</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-emulation.html">Device Emulation</a></li>
<li class="toctree-l2"><a class="reference internal" href="keys.html">Keys in the graphical frontends</a></li>
<li class="toctree-l2"><a class="reference internal" href="mux-chardev.html">Keys in the character backend multiplexer</a></li>
<li class="toctree-l2"><a class="reference internal" href="monitor.html">QEMU Monitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="images.html">Disk Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="virtio-net-failover.html">QEMU virtio-net standby (net_failover)</a></li>
<li class="toctree-l2"><a class="reference internal" href="linuxboot.html">Direct Linux Boot</a></li>
<li class="toctree-l2"><a class="reference internal" href="generic-loader.html">Generic Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="guest-loader.html">Guest Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="barrier.html">QEMU Barrier Client</a></li>
<li class="toctree-l2"><a class="reference internal" href="vnc-security.html">VNC security</a></li>
<li class="toctree-l2"><a class="reference internal" href="tls.html">TLS setup for network services</a></li>
<li class="toctree-l2"><a class="reference internal" href="secrets.html">Providing secret data to QEMU</a></li>
<li class="toctree-l2"><a class="reference internal" href="authz.html">Client authorization</a></li>
<li class="toctree-l2"><a class="reference internal" href="gdb.html">GDB usage</a></li>
<li class="toctree-l2"><a class="reference internal" href="replay.html">Record/replay</a></li>
<li class="toctree-l2"><a class="reference internal" href="managed-startup.html">Managed start up options</a></li>
<li class="toctree-l2"><a class="reference internal" href="bootindex.html">Managing device boot order with bootindex properties</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Virtual CPU hotplug</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#vcpu-hotplug">vCPU hotplug</a></li>
<li class="toctree-l3"><a class="reference internal" href="#vcpu-hot-unplug">vCPU hot-unplug</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pr-manager.html">Persistent reservation managers</a></li>
<li class="toctree-l2"><a class="reference internal" href="targets.html">QEMU System Emulator Targets</a></li>
<li class="toctree-l2"><a class="reference internal" href="security.html">Security</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi-process.html">Multi-process QEMU</a></li>
<li class="toctree-l2"><a class="reference internal" href="confidential-guest-support.html">Confidential Guest Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="vm-templating.html">QEMU VM templating</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../user/index.html">User Mode Emulation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../interop/index.html">System Emulation Management and Interoperability</a></li>
<li class="toctree-l1"><a class="reference internal" href="../specs/index.html">System Emulation Guest Hardware Specifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../devel/index.html">Developer Information</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #802400" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">QEMU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">System Emulation</a></li>
<li class="breadcrumb-item active">Virtual CPU hotplug</li>
<li class="wy-breadcrumbs-aside">
<a href="https://gitlab.com/qemu-project/qemu/blob/master/docs/system/cpu-hotplug.rst" class="fa fa-gitlab"> Edit on GitLab</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="virtual-cpu-hotplug">
<h1>Virtual CPU hotplug<a class="headerlink" href="#virtual-cpu-hotplug" title="Link to this heading"></a></h1>
<p>A complete example of vCPU hotplug (and hot-unplug) using QMP
<code class="docutils literal notranslate"><span class="pre">device_add</span></code> and <code class="docutils literal notranslate"><span class="pre">device_del</span></code>.</p>
<section id="vcpu-hotplug">
<h2>vCPU hotplug<a class="headerlink" href="#vcpu-hotplug" title="Link to this heading"></a></h2>
<ol class="arabic">
<li><p>Launch QEMU as follows (note that the “maxcpus” is mandatory to
allow vCPU hotplug):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ qemu-system-x86_64 -display none -no-user-config -m 2048 \
-nodefaults -monitor stdio -machine pc,accel=kvm,usb=off \
-smp 1,maxcpus=2 -cpu IvyBridge-IBRS \
-qmp unix:/tmp/qmp-sock,server=on,wait=off
</pre></div>
</div>
</li>
<li><p>Run qmp-shell (located in the source tree, under: “scripts/qmp/)
to connect to the just-launched QEMU:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$&gt; ./qmp-shell -p -v /tmp/qmp-sock
[...]
(QEMU)
</pre></div>
</div>
</li>
<li><p>Find out which CPU types could be plugged, and into which sockets:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">QEMU</span><span class="p">)</span> <span class="n">query</span><span class="o">-</span><span class="n">hotpluggable</span><span class="o">-</span><span class="n">cpus</span>
<span class="p">{</span>
<span class="s2">&quot;execute&quot;</span><span class="p">:</span> <span class="s2">&quot;query-hotpluggable-cpus&quot;</span><span class="p">,</span>
<span class="s2">&quot;arguments&quot;</span><span class="p">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="p">{</span>
<span class="s2">&quot;return&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;IvyBridge-IBRS-x86_64-cpu&quot;</span><span class="p">,</span>
<span class="s2">&quot;vcpus-count&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;props&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;socket-id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;core-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">0</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s2">&quot;qom-path&quot;</span><span class="p">:</span> <span class="s2">&quot;/machine/unattached/device[0]&quot;</span><span class="p">,</span>
<span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;IvyBridge-IBRS-x86_64-cpu&quot;</span><span class="p">,</span>
<span class="s2">&quot;vcpus-count&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;props&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;socket-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;core-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">0</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="p">(</span><span class="n">QEMU</span><span class="p">)</span>
</pre></div>
</div>
</li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">query-hotpluggable-cpus</span></code> command returns an object for CPUs
that are present (containing a “qom-path” member) or which may be
hot-plugged (no “qom-path” member). From its output in step (3), we
can see that <code class="docutils literal notranslate"><span class="pre">IvyBridge-IBRS-x86_64-cpu</span></code> is present in socket 0,
while hot-plugging a CPU into socket 1 requires passing the listed
properties to QMP <code class="docutils literal notranslate"><span class="pre">device_add</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">QEMU</span><span class="p">)</span> <span class="n">device_add</span> <span class="nb">id</span><span class="o">=</span><span class="n">cpu</span><span class="o">-</span><span class="mi">2</span> <span class="n">driver</span><span class="o">=</span><span class="n">IvyBridge</span><span class="o">-</span><span class="n">IBRS</span><span class="o">-</span><span class="n">x86_64</span><span class="o">-</span><span class="n">cpu</span> <span class="n">socket</span><span class="o">-</span><span class="nb">id</span><span class="o">=</span><span class="mi">1</span> <span class="n">core</span><span class="o">-</span><span class="nb">id</span><span class="o">=</span><span class="mi">0</span> <span class="n">thread</span><span class="o">-</span><span class="nb">id</span><span class="o">=</span><span class="mi">0</span>
<span class="p">{</span>
<span class="s2">&quot;execute&quot;</span><span class="p">:</span> <span class="s2">&quot;device_add&quot;</span><span class="p">,</span>
<span class="s2">&quot;arguments&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;socket-id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;driver&quot;</span><span class="p">:</span> <span class="s2">&quot;IvyBridge-IBRS-x86_64-cpu&quot;</span><span class="p">,</span>
<span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="s2">&quot;cpu-2&quot;</span><span class="p">,</span>
<span class="s2">&quot;core-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">0</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">{</span>
<span class="s2">&quot;return&quot;</span><span class="p">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="p">(</span><span class="n">QEMU</span><span class="p">)</span>
</pre></div>
</div>
</li>
<li><p>Optionally, run QMP <code class="docutils literal notranslate"><span class="pre">query-cpus-fast</span></code> for some details about the
vCPUs:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">QEMU</span><span class="p">)</span> <span class="n">query</span><span class="o">-</span><span class="n">cpus</span><span class="o">-</span><span class="n">fast</span>
<span class="p">{</span>
<span class="s2">&quot;execute&quot;</span><span class="p">:</span> <span class="s2">&quot;query-cpus-fast&quot;</span><span class="p">,</span>
<span class="s2">&quot;arguments&quot;</span><span class="p">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="p">{</span>
<span class="s2">&quot;return&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;qom-path&quot;</span><span class="p">:</span> <span class="s2">&quot;/machine/unattached/device[0]&quot;</span><span class="p">,</span>
<span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="s2">&quot;x86_64&quot;</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">11534</span><span class="p">,</span>
<span class="s2">&quot;cpu-index&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;props&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;socket-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;core-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">0</span>
<span class="p">},</span>
<span class="s2">&quot;arch&quot;</span><span class="p">:</span> <span class="s2">&quot;x86&quot;</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s2">&quot;qom-path&quot;</span><span class="p">:</span> <span class="s2">&quot;/machine/peripheral/cpu-2&quot;</span><span class="p">,</span>
<span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="s2">&quot;x86_64&quot;</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">12106</span><span class="p">,</span>
<span class="s2">&quot;cpu-index&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;props&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;socket-id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;core-id&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;thread-id&quot;</span><span class="p">:</span> <span class="mi">0</span>
<span class="p">},</span>
<span class="s2">&quot;arch&quot;</span><span class="p">:</span> <span class="s2">&quot;x86&quot;</span>
<span class="p">}</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="p">(</span><span class="n">QEMU</span><span class="p">)</span>
</pre></div>
</div>
</li>
</ol>
</section>
<section id="vcpu-hot-unplug">
<h2>vCPU hot-unplug<a class="headerlink" href="#vcpu-hot-unplug" title="Link to this heading"></a></h2>
<p>From the qmp-shell, invoke the QMP <code class="docutils literal notranslate"><span class="pre">device_del</span></code> command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">(</span><span class="n">QEMU</span><span class="p">)</span> <span class="n">device_del</span> <span class="nb">id</span><span class="o">=</span><span class="n">cpu</span><span class="o">-</span><span class="mi">2</span>
<span class="p">{</span>
<span class="s2">&quot;execute&quot;</span><span class="p">:</span> <span class="s2">&quot;device_del&quot;</span><span class="p">,</span>
<span class="s2">&quot;arguments&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="s2">&quot;cpu-2&quot;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">{</span>
<span class="s2">&quot;return&quot;</span><span class="p">:</span> <span class="p">{}</span>
<span class="p">}</span>
<span class="p">(</span><span class="n">QEMU</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>vCPU hot-unplug requires guest cooperation; so the <code class="docutils literal notranslate"><span class="pre">device_del</span></code>
command above does not guarantee vCPU removal its a “request to
unplug”. At this point, the guest will get a System Control
Interrupt (SCI) and calls the ACPI handler for the affected vCPU
device. Then the guest kernel will bring the vCPU offline and tell
QEMU to unplug it.</p>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="bootindex.html" class="btn btn-neutral float-left" title="Managing device boot order with bootindex properties" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="pr-manager.html" class="btn btn-neutral float-right" title="Persistent reservation managers" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, The QEMU Project Developers.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
<!-- Empty para to force a blank line after "Built with Sphinx ..." -->
<p></p>
<p>This documentation is for QEMU version 8.2.2.</p>
<p><a href="../about/license.html">QEMU and this manual are released under the
GNU General Public License, version 2.</a></p>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>