SOUND-PC (FOH Audio)

SOUND-PC (FOH Audio)

The front-of-house audio PC. Runs Dante Virtual Soundcard (DVS) and is used to re-route the AMX/SVSi units; its only audio output is two channels. Windows 11 Pro (build 26200), 8 logical cores, 34 GB RAM.

It has a long-standing, unexplained audio latency problem that is specific to this machine. This page records the investigation, what was changed, the current state, and the pending test.

Network interfaces

Intel NICs — four ports on an I350-T4 server adapter plus the onboard I219-V.

Alias Adapter IP VLAN MAC
Control I350-T4 192.168.30.50 control a0:36:9f:85:05:2c
AVoIP I350-T4 #2 10.0.25.102 avoip a0:36:9f:85:05:2d
Dante A I350-T4 #4 192.168.10.150 dante A a0:36:9f:85:05:2f
Dante B I350-T4 #3 192.168.11.104 dante B (redundant)
SPACnet I219-V (onboard) 192.168.1.64 SPACnet —

10.0.25.102 has a DHCP reservation on the EdgeRouter (AVoIP-FOH-AUDIO-PC).

Access

SSH via OpenSSH for Windows (key auth, jkmassel id_ed25519, installed in C:\ProgramData\ssh\administrators_authorized_keys since sound is an admin). Reached through docker-server as a jump host — SOUND-PC is not on Tailscale.

ssh SOUND-PC                       # alias in ~/.ssh/config (ProxyJump docker-server)
ssh -o ProxyJump=none SOUND-PC     # direct, when on the control LAN

Credentials in passwords.csv. The sound account password is also recorded there.

Monitoring

Monitoring blind spot. The only temperature windows_exporter exposes is the ACPI zone (\_TZ.TZ00), which read ~28 °C while the CPU die was at 100 °C. It is useless for CPU temperature and must not be trusted or alerted on. Real die temp needs HWiNFO (portable) or a hardware sensor agent (LibreHardwareMonitor / IPMI / Linux hwmon). The throttle flag works, but only trips at the thermal edge — it will not warn of a CPU trending hot beforehand.

Latency investigation (2026-09-05)

Symptom: audio latency, only on this machine, cause never found. The theory under test is that DPC/ISR latency (kernel deferred-procedure-call jitter) disrupts DVS’s network-timing-sensitive audio path.

Ruled out

Suspect Finding
Thermal throttling Not throttling — 90-day-clean Event Log, throttle_reasons = 0
PCIe ASPM Already disabled at firmware level (“known incompatibility”)
NIC old driver Updated I350 driver 2020 12.18.11.1 → 2025 14.1.24.0
NIC Energy Efficient Ethernet Disabled on Dante A/B (Audinate-recommended)
NIC power-down / flow / RSS RSS on (good); “allow turn off” left as-is

What moved the DPC number

Average DPC duration (idle, from the dashboard):

Change Avg DPC Note
Baseline ~85–100 µs frequency scaling inflates it
Min processor state 100% (pin P-states) ~68 µs modest, non-durable
C-states disabled (IDLEDISABLE 1) ~24 µs the dominant factor

C-states were the real lever — a ~70 % reduction. But disabling them drove the CPU die to 95–101 °C (Tjmax) because idle cores spin at full clock instead of halting. All power tweaks were reverted for thermal safety. See below.

Thermal finding

Disabling C-states exposed a pre-existing cooling problem: even after reverting, the CPU idles around 50–70 °C (healthy is 35–55 °C). Likely causes, compounding:

  • Cramped 2U case with a regular motherboard + regular CPU cooler — little clearance between the CPU fan and the lid, so the cooler is starved for intake air.
  • Cheap case fans (low static pressure) can’t force air through the restrictive chassis.
  • Aged thermal paste / dust are plausible on top.

The fan was screaming at 3110 RPM at 100 °C and settled to a quiet 1800 RPM once cool — which matters because the box is near the FOH position (fan noise is itself a fault here).

Cooling plan (not yet done):

  • Replace case fans with Noctua NF-A8 PWM (80 mm; Noctua has no 80 mm industrialPPC).
  • Improve front-to-back airflow — intake from the open front (best air), exhaust to the rear (~1 ft clearance is ample). Duct/shroud the cool front air to the rear-mounted CPU, or block bypass paths, rather than reversing airflow (would fight the PSU exhaust).
  • Consider a low-profile front-to-back 2U cooler if the current one is a downdraft choked against the lid.
  • Re-paste / dust-out.
  • Optional monitoring: an Aquacomputer Quadro (USB fan controller) exposes fan RPM + probe temps via liquidctl → windows_exporter textfile collector → Prometheus, with no kernel driver (the sensing is on the controller, read over USB HID). This is the safe way to get fan and heatsink/intake/exhaust temps into Grafana.

Current power configuration (safe state)

Confirmed live over SSH after reverting everything:

Setting Value Meaning
Active plan High performance label only; the knobs below are back to safe
Min processor state 5 % reverted from 100 % — frequency scaling restored
C-states (IDLEDISABLE) 0 reverted — C-states ON (keeps the CPU cool)
Dante A/B driver 14.1.24.0 (2025) updated
Dante A/B EEE Off disabled

Net: thermally safe, NIC changes retained, DPC average back to the ~85 µs baseline (accepted trade — thermal safety over a lower idle DPC).

Pending latency test

Goal: confirm whether the low-DPC state (C-states off + P-states pinned) actually improves the audio latency. If it does, pursue better cooling to sustain it. If it does not, the whole DPC angle is moot and can be abandoned.

⚠️ Time-box it and watch HWiNFO. With C-states off the die reaches ~100 °C within minutes. Keep HWiNFO open, run the test for a few minutes only, and revert promptly. The dashboard cannot see die temp.

Enable the low-DPC state (elevated PowerShell):

powercfg /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMIN 100   # pin P-states
powercfg -attributes SUB_PROCESSOR 5d76a2ca-e8c0-402f-a133-2158492d58ad -ATTRIB_HIDE
powercfg /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IDLEDISABLE 1          # disable C-states
powercfg /setactive SCHEME_CURRENT

Then run the audio, judge the latency, and watch the dashboard’s DPC panel (should drop toward ~24 µs).

Revert (do this promptly):

powercfg /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMIN 5
powercfg /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IDLEDISABLE 0
powercfg /setactive SCHEME_CURRENT

Deeper diagnosis regardless: run LatencyMon (resplendence.com, portable) during a service. The DPC average can’t see the rare long DPC that actually causes a dropout; LatencyMon’s Drivers tab names the offending .sys. Likely suspects on a DVS box: the NIC driver or a USB/storage driver.

Decision tree

  • Low-DPC state fixes the latency → invest in the cooling plan so C-states-off can run sustainably without cooking the CPU. Then re-pin P-states + disable C-states permanently.
  • It does not fix the latency → DPC/thermal tuning is irrelevant to the problem. Drop it, leave power at defaults, and pursue the real fix: get the audio off DVS.

The strategic alternative (retires the whole problem)

Because this PC only outputs two channels, the audio path can leave the jitter-prone software-DVS approach entirely:

  • Dante AVIO USB adapter (~$200, 2×2) — a hardware Dante endpoint; host DPC jitter stops mattering. A PCIe card (e.g. Yamaha AIC128-D, 128 ch) is massive overkill for 2 channels.
  • Analog out → console line input — onboard DAC → console ADC adds only ~1–2 ms of deterministic (jitter-free) latency. Cheapest option; the trade is analog quality / ground-loop risk (a DI box resolves the latter).

Either retires the DPC/C-state/thermal balancing act for audio, and would free the machine to run stock power settings — or even Linux (which would also give free fan/temp monitoring via hwmon).

Open questions

  • Which CPU cooler is currently fitted (downdraft vs tower vs stock)? Determines duct-vs-swap.
  • Are the two output channels a program/playback feed (analog-out viable) or quality-critical (AVIO USB better)?
  • What does LatencyMon name as the top DPC driver under load?