看板 Headphone 關於我們 聯絡資訊
要真正的發揮 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