<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cpu on inetshell</title><link>https://inet.sh/es/tags/cpu/</link><description>Recent content in Cpu on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/cpu/index.xml" rel="self" type="application/rss+xml"/><item><title>Proxmox: Windows lento con CPU type host (md_clear y flush_l1d)</title><link>https://inet.sh/es/posts/proxmox/windows-lento-cpu-type-host/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/proxmox/windows-lento-cpu-type-host/</guid><description>Por qué una VM Windows en Proxmox VE va lenta y a tirones con CPU type &amp;#39;host&amp;#39; y vuela con x86-64-v2-AES: los flags md_clear y flush_l1d activan las mitigaciones de MDS y L1TF dentro del guest y disparan la latencia de memoria. Qué tipo de CPU elegir y qué pasa si insistes en host.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">102</span> --cpu x86-64-v2-AES    <span class="c1"># o x86-64-v3 si todos los hosts son Haswell / EPYC o más nuevos</span>
</span></span><span class="line"><span class="cl">qm stop <span class="m">102</span> <span class="o">&amp;&amp;</span> qm start <span class="m">102</span>       <span class="c1"># un reboot desde dentro de Windows NO aplica el cambio</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="síntomas">Síntomas</h2>
<p>Windows 10, 11 o Server con <code>cpu: host</code>: arranque lento, escritorio a tirones, congelamientos de segundos, todo lo que toque memoria va mal. La misma VM con <code>x86-64-v2-AES</code> responde normal. Una VM Linux con <code>host</code> en el mismo nodo no nota nada.</p>
<h2 id="por-qué-pasa">Por qué pasa</h2>
<p><code>host</code> le pasa a la VM <strong>todos</strong> los flags del CPU físico, incluidos dos que existen para las mitigaciones de vulnerabilidades de Intel:</p>
<table>
  <thead>
      <tr>
          <th>Flag</th>
          <th>Mitigación</th>
          <th>Qué hace Windows al verlo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>md_clear</code></td>
          <td>MDS (Microarchitectural Data Sampling)</td>
          <td>Ejecuta <code>VERW</code> en cada transición kernel ↔ usuario para vaciar buffers</td>
      </tr>
      <tr>
          <td><code>flush_l1d</code></td>
          <td>L1TF (L1 Terminal Fault)</td>
          <td>Vacía la caché L1D en cada entrada a la VM / cambio de contexto</td>
      </tr>
  </tbody>
</table>
<p>Dentro de una VM esas operaciones salen carísimas. Las mediciones del <a href="https://forum.proxmox.com/threads/the-reasons-for-poor-performance-of-windows-when-the-cpu-type-is-host.163114/">hilo original en el foro de Proxmox</a>: en un Xeon E5-2667 v2 la latencia de lectura de RAM pasa de <strong>~100 ns a ~2000 ns</strong>; en un i9-13900K, de 30 a 90 ns. Windows, que toca memoria del kernel todo el tiempo, se arrastra.</p>
<p>Los tipos genéricos (<code>x86-64-v2-AES</code>, <code>x86-64-v3</code>, <code>IvyBridge-IBRS</code>, …) no exponen esos dos flags, así que Windows ni ve la vulnerabilidad ni enciende la mitigación.</p>
<h2 id="qué-tipo-elegir">Qué tipo elegir</h2>
<table>
  <thead>
      <tr>
          <th>Tipo</th>
          <th>Requiere en el host</th>
          <th>Notas</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>x86-64-v2-AES</code></td>
          <td>Intel Westmere / AMD Opteron 4.ª gen o más nuevo</td>
          <td>Default de la GUI desde PVE 8. Migra entre hosts distintos</td>
      </tr>
      <tr>
          <td><code>x86-64-v3</code></td>
          <td>Intel Haswell / AMD EPYC o más nuevo</td>
          <td>AVX2. Migra entre hosts que lo cumplan</td>
      </tr>
      <tr>
          <td><code>x86-64-v4</code></td>
          <td>Skylake-SP / Zen 4 o más nuevo</td>
          <td>AVX-512</td>
      </tr>
      <tr>
          <td><code>host</code></td>
          <td>Todos iguales</td>
          <td>Máximo de flags, pero no migra entre CPUs distintos y trae este problema en Windows</td>
      </tr>
  </tbody>
</table>
<p>Elige el más alto que soporten <strong>todos</strong> los nodos del clúster:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">grep -o -w -E <span class="s1">&#39;avx2|avx512f&#39;</span> /proc/cpuinfo <span class="p">|</span> sort -u   <span class="c1"># avx2 → v3 ok; avx512f → v4 ok</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Es la recomendación del staff de Proxmox en ese mismo hilo: usar el <code>x86-64-v*</code> que corresponda al hardware en vez de apagar flags de seguridad a ciegas.</p>
<h2 id="si-insistes-en-host">Si insistes en host</h2>
<p>Hay casos en los que <code>host</code> hace falta: virtualización anidada (Hyper-V, WSL2 dentro de la VM, un lab de ESXi), porque los tipos <code>x86-64-v*</code> no exponen <code>vmx</code>/<code>svm</code>. Puedes quitar <code>md_clear</code> con la opción <code>flags</code>:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">102</span> --cpu host,flags<span class="o">=</span>-md-clear
</span></span></code></pre></td></tr></table>
</div>
</div><p>Pero <code>flush_l1d</code> no está en la lista de flags que Proxmox deja tocar, así que te quedas con la mitad del problema. Y ocultarle mitigaciones al guest es una decisión de seguridad: razonable en un nodo de un solo dueño, no en uno con inquilinos que no controlas.</p>
<h2 id="comprobar-desde-dentro-de-windows">Comprobar desde dentro de Windows</h2>
<p>El módulo oficial de Microsoft muestra qué mitigaciones tiene activas el guest:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Install-Module</span> <span class="n">SpeculationControl</span> <span class="n">-Scope</span> <span class="n">CurrentUser</span>
</span></span><span class="line"><span class="cl"><span class="nb">Get-SpeculationControlSettings</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Con <code>host</code>, <code>MDSWindowsSupportEnabled</code> y <code>L1TFWindowsSupportEnabled</code> salen <code>True</code>; con <code>x86-64-v2-AES</code>, <code>False</code>. Es la forma rápida de confirmar que el cambio aplicó.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong>El cambio pide stop/start.</strong> El tipo de CPU se fija al lanzar el proceso QEMU; un reinicio desde dentro del guest no lo toca.</li>
<li><strong>Es un tema de Intel.</strong> <code>md_clear</code> y <code>flush_l1d</code> no existen en AMD; con <code>host</code> en EPYC/Ryzen no verás esta caída (aunque <code>host</code> sigue impidiendo migrar entre CPUs distintos).</li>
<li><strong>Aplica a VMs nuevas también.</strong> Las plantillas creadas con <code>host</code> heredan el problema; cámbialo en la plantilla.</li>
<li><strong>Con ambos tipos Windows sigue seguro contra lo que importa dentro de una VM</strong>: las mitigaciones que cuentan (Spectre v2, etc.) siguen activas; lo que desaparece es la doble mitigación de vulnerabilidades que ya mitiga el host.</li>
</ul>
<p>Referencias: <a href="https://forum.proxmox.com/threads/the-reasons-for-poor-performance-of-windows-when-the-cpu-type-is-host.163114/">hilo del foro de Proxmox</a> y la sección <a href="https://pve.proxmox.com/pve-docs/chapter-qm.html#qm_cpu">CPU</a> de la guía de administración.</p>
]]></content:encoded></item></channel></rss>