<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>60737</bug_id>
          
          <creation_ts>2026-09-29 14:57:57 +0300</creation_ts>
          <short_desc>vm-run: гость QEMU патологически тормозит, если stdin процесса — открытый молчащий pipe (как под rpmbuild)</short_desc>
          <delta_ts>2026-09-29 15:00:15 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build-vm-run</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Makeenkov">amakeenk</reporter>
          <assigned_to name="obirvalger@altlinux.org">obirvalger</assigned_to>
          <cc>iv</cc>
    
    <cc>obirvalger</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300569</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Makeenkov">amakeenk</who>
    <bug_when>2026-09-29 14:57:57 +0300</bug_when>
    <thetext>vm-run запускает qemu с -serial mon:stdio и наследуемым stdin. Если stdin qemu — открытый pipe, в который никто не пишет (именно так rpmbuild подключает stdin к %check-скриптам; проверено: у qemu fd 0 -&gt; pipe:[...]), гостевая VM начинает работать катастрофически медленно:

- vCPU гостя надолго засыпают в kvm_vcpu_block, в госте возникают &quot;watchdog: BUG: soft lockup - CPU#N stuck for NNs! [swapper/N]&quot;;
- qemu снаружи при этом потребляет ~5% CPU;
- гость выполняет работу в 10-20 раз медленнее обычного.

Воспроизводится стабильно на сборочных хостах (AMD EPYC 7351, host kernel 6.12.74-6.12-alt1, qemu 9.1.2-alt1 из p11), и именно это является причиной стабильного FTBFS dm-secdel в %check на этих хостах: timeout 60 в check.sh истекает на фазе fill_fs/tests.sh. В girar тот же тест проходит за ~35 секунд.

A/B-эксперимент (внутри hsh-shell, один и тот же qemu/guest/скрипт):

  stdin = pipe (hsh heredoc)   -&gt; stall: soft lockup, ~5% CPU, timeout
  stdin = /dev/null            -&gt; быстро: 12-35s на весь тест, 200-270% CPU
  stdin = tty                  -&gt; быстро

При этом НЕ влияют: загрузка хоста (падает и на idle), -smp/-m (1..32 cpu, 2G..251G одинаково), -sandbox on/off, chroot/uid/nice, halt_poll_ns, версия гостевого ядра (6.12 и 6.18).

В vm-run уже есть обход для tty-случая:

    [ -t 0 ] &amp;&amp; [ -v RPM_BUILD_DIR ] &amp;&amp; NOSTDIN=y
    [ -v NOSTDIN ] &amp;&amp; exec &lt;/dev/null

но для pipe-stdin (как раз случай rpmbuild/%check) редиректа нет.

Предлагаемое исправление: если stdin — не tty (или, шире, всегда, когда не запрошен интерактив/heredoc), перенаправлять stdin qemu (или всего vm-run до запуска qemu) с /dev/null. Грубо:

    [ -t 0 ] || [ -v HEREDOC ] || NOSTDIN=y

Точечный workaround для пакетов: вызывать в %check `vm-run ... &lt; /dev/null`.

Возможно, та же причина у flaky-падений bpftrace в %check (https://bugzilla.altlinux.org/60610): там тесты тоже гоняются под vm-run, а падающие тесты — тайминг-зависимые (call.tseries, time series avg), что хорошо ложится на &quot;гость с непредсказуемо искажённым ходом времени&quot;.

Дополнительно (отдельно): timeout 60 в check.sh пакета dm-secdel впритык даже при здоровом окружении (~35/60s в girar) — стоит увеличить.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>