作者elguapo (HPHT Synthesized)
看板Headphone
標題Re: [閒聊] ArchLinux的roonserver + realtime配置
時間Mon Feb 23 11:15:32 2026
要真正的發揮 realtime kernel 在音訊處理上的威力,除了更換核心之外,
下列事項尚需要進一步調整:
1. BIOS
2. 開機參數
3. 應用軟體隔離及排程
這麼做都是為了降低延遲、減少 OS jitter,讓外部干擾降到最低。
以 Intel CPU 來說,BIOS 主要是關閉 Turbo Boost、關閉 Speed Shift、關閉
Hyper Threading、關閉 P-state 和 C-state、關閉 PCIe 電源管理等等。
開機參數的話,就會比較麻煩一點,以我的 HQPlayer Embedded 主機(Intel Xeon
W9-3575X)來說,經過一些考慮,我指定三顆核心當管家(house keeping),
一顆核心專門處理特定服務所佔網卡的 IRQ,其他 40 核心都給 HQPe 做 14 聲道
升頻 DSD256。
以下設定是針對 Ubuntu Server kernel 6.8 RT 修改 /etc/default/grub
首先先決定那幾個 CPU 要完全隔離,不受 kernel 調度:
isolcpus=managed_irq,domain,3,16-43
把需要更平順處理的 CPU 的 "ticker"(節拍器)關閉:
nohz=on nohz_full=3-43
同樣的,把需要更平順處理的 CPU 的 RCU call back 關閉(其實是卸載給管家):
rcu_nocb_poll rcu_nocbs=3-43
把 IRQ 卸載給管家:
irqaffinity=0-2
雖然 BIOS 已經關閉了 P-state / C-state,但開機的時候再宣告一次當保險:
intel_pstate=disable processor.max_cstate=0 intel_idle.max_cstate=0
關閉鎖死偵測:
nmi_watchdog=0 nosoftlockup
獨尊 TSC 為時鐘源:
clocksource=tsc tsc=reliable hpet=disable
關閉硬體漏洞緩解:
mitigations=off
故意錯開節拍器,避免全部 CPU 同一個時間 tick:
skew_tick=1
不讓 CPU 進入節電模式:
idle=poll
以上參數大概就能涵蓋 95% 的 realtime 需求。
開機參數設完之後,還要特別補幾個 sysctl 參數在 /etc/sysctl.conf
kernel.sched_rt_runtime_us=-1
kernel.timer_migration=0
kernel.perf_cpu_time_max_percent=0
若背景有 irqbalance 這個軟體在運行,請把它完全關閉並移除。重要的 IRQ
用手動指定,例如我指定 Ravenna/AES67 在 enp1s0 網卡上運行,並且將 IRQ
指定給第三顆 CPU 處理,那麼就可以借用 Intel 的 shell script 來調整:
set_irq_affinity -X one 3 enp1s0
其中 -X 是關閉 XPS,畢竟 AoIP 本質上是單一進出,單一 ring buffer 即可。
最後是 kernel thread 以及 user land 的 CPU 指派,我把 system slice 和
user slice 分別做了設定:
init scope AllowedCPUs=0-2
system slice AllowedCPUs=0-2
user slice AllowedCPUs=0-2
把 HQPlayer 以外的執行緒都丟給管家 CPU 處理,然後 HQPlayer Embedded:
hqplayerd slice AllowedCPUs=4-43
而 Ravenna/AES67 守護程式則跟所佔網卡 IRQ 放在 CPU 3:
ravenna slice AllowedCPUs=3
最後設定 HQPlayer Embedded 的 reserved cores 到完全隔離的 CPU 16-43,
跑起來 CPU 分佈看起來就很舒服了:
https://meee.com.tw/YwzDhws.jpg
觀察很多玩家使用了 realtime kernel 但卻沒有進一步去設定 BIOS、開機參數
及隔離加排程,誠屬可惜,在此野人獻曝一番,將所學及經驗分享。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.96.58 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Headphone/M.1771816534.A.E6A.html
推 evadodoya: 推推 02/23 11:34
推 pploj: 古早論壇my○v有一串討論linux訊源的 差不多也是在玩這些 02/23 11:39
推 yuugen2: 請問這樣設定完 聲音差多少? 02/23 11:51
數據上,經過各層微調後的實時核心,能夠有效縮短輸入 / 輸出緩衝時間。
現有系統,若用低延遲核心並且使用預設 BIOS,也不調整開機參數、不調整隔離及
排程,至少要將輸入緩衝增大到 20ms,且 HQPlayer 本身軟體的緩衝也要開到至少
50ms 才不會在多聲道升頻過程聽到細微的 pop / click 聲音。
顯然 HQPlayer 被背景程式干擾了,即使是 HT 打開有 88 核但就是會發生,因為一
些背景程式被作業系統調度到跟 HQPlayer 同一個 CPU 上,打斷了本應連續處理的
音訊內容;但也因為緩衝長度增加,造成延遲增加,導致觀看串流影音的時候,唇形
和說話對不上。
改為實時核心開機並且針對 BIOS、開機參數及軟體隔離加排程做調整後,輸入緩衝
長度最短可以縮到 2ms(96 frames)、HQPlayer 僅使用 Ravenna/AES67 的 1.33ms
(64 frames)即能順跑多聲道升頻 DSD256 不會有隨機細微的 pop / click 聲音。
不看緩衝有效縮短相關數據,只講主觀聽感的話,經過各項微調的實時核心,所產出
的聲音音質,是非常綿密的(我形容它「有黏度」)。
推 pcjustin: 好專業 02/23 12:10
※ 編輯: elguapo (118.163.96.58 臺灣), 02/23/2026 13:53:07