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
- windows_exporter on
10.0.25.102:9182, scraped by Prometheus (windowsjob inAutomation/server/prometheus.yml). - Grafana dashboard:
SOUND-PC (FOH Audio)— http://docker-server.tail8bb556.ts.net/grafana/d/sound-pc-audio/sound-pc-foh-audio - Slack alerts (
host=sound-pc→slack-av-alerts): audio-service-down, thermal-throttle, DPC-latency > 150 µs.
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 / Linuxhwmon). 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?