Vsound .
I2S .
Có vẻ Vsound tĩnh hơn và đỡ nóng hơn I2S bác Lâm ?
Dạ đúng phải vậy, xuất vsound nhẹ tải. Tuy nhiên không biết nguyên nhân gì nhiệt CPU máy anh cao (có thể do Data nhạc lớn...)
Pi 5 em play SQ nhạc trong USB Latency từ 8-15us, nhiệt độ loanh quanh 50 độ.
Play Youtube Cast thì cao, Latency 40us, nhiệt 65 độ.
----------------------
FE chỉ “đóng gói” PCM
- PCM từ SQ (hoặc MPD) renderer vào vsound → CPU copy vào netmap ring → NIC transmit frame: Netmap.
FE (Front-End) chỉ đóng gói mẫu PCM từ ALSA vào frame Ethernet qua vsound và netmap, không phải xử lý I²S bit-banging.
- CPU FE không phải điều khiển clock/word-select của I²S, giảm tải real-time scheduling so với local I²S (Xuất trực tiếp tại chỗ ra DAC )
BE dùng DMA cho I²S
- snd_aoe nhận frame → atomically write vào DMA descriptor → phần cứng DMA filler “đẩy” mẫu PCM ra bus I²S theo clock.
- BE (Back-End) dùng kernel patch snd_aoe để “bóc” header Ethernet, lấy payload PCM và nạp vào DMA ring buffer của driver I²S, sau đó phần cứng DMA tự đẩy dữ liệu ra bus I²S
DMA là viết tắt của
Direct Memory Access, tức “Truy cập bộ nhớ trực tiếp”. DMA cho phép các thiết bị ngoại vi (như ổ đĩa, card âm thanh, hoặc I²S controller) trao đổi dữ liệu trực tiếp với RAM mà không cần CPU phải can thiệp vào từng byte, giúp giảm tải CPU và tăng tốc độ truyền dữ liệu
Jitter trong hệ thống real-time audio chính là
độ dao động (variation) của
interrupt latency – thời gian từ khi thiết bị yêu cầu ngắt đến khi trình xử lý ngắt (ISR) bắt đầu chạy. Khi
CPU bận chạy nhiều tiến trình hoặc xử lý ngắt khác, interrupt latency bị kéo dài không đồng đều, tạo ra jitter. AoE của Symphonic-MPD hướng tới giảm thiểu jitter này bằng cách cô lập và ưu tiên rõ ràng đường data audio (DMA/I²S) trên BE và bypass toàn bộ stack mạng trên FE để đảm bảo interrupt latency ổn định ở mức micro-giây.
Jitter do
CPU bận chạy nhiều task sẽ làm
interrupt latency dao động, ảnh hưởng trực tiếp đến chất lượng playback audio real-time. AoE Symphonic-MPD giảm jitter này bằng cách:
- Bypass network stack với netmap
- Tách biệt FE/BE
- Tối ưu interrupt và process scheduling với RT-kernel và công cụ rtirq/rtapp
- Isolate CPU cores
Nhờ vậy, hệ thống đạt
interrupt latency rất thấp và ổn định, đảm bảo DMA/I²S buffer luôn được refill đúng lúc, tránh underrun và xrun.
Tóm lại CPU trên FE không phải xử lý từng byte dữ liệu.
Mục tiêu AoE FE/BE là để giảm nhiễu jitter do CPU làm việc nhiều gây ra.