Phần cứng & Suy luậnMã nguồn mở 🇷🇺 07.08.2026 13:02

Đạt Băng Thông Video 8.8 Gbps Trên Một Lõi CPU Bằng Go

MicrosoftMicrosoft
Một nhà phát triển từ Habr mô tả việc xây dựng một engine phát trực tuyến RTSP-to-HLS tùy chỉnh bằng Go có tên Ruseon Core để giải quyết vấn đề Thundering Herd. Engine này sử dụng bộ đệm vòng zero-copy với sync.Pool để tránh cấp phát bộ nhớ, đạt thông lượng 8.8 Gbps trên một lõi đơn, với mức sử dụng bộ nhớ và CPU tối thiểu, không giống như FFmpeg hoặc MediaMTX.
Sau khi một liên kết được chia sẻ gây ra hiệu ứng “thundering herd” (hàng loạt yêu cầu đổ về cùng lúc) khiến máy chủ gặp lỗi OOM (Out Of Memory - hết bộ nhớ), tác giả đã quyết định tự xây dựng một engine streaming tùy chỉnh bằng Go thay vì thuê phần cứng mạnh hơn. Engine này, có tên Ruseon Core, tiếp nhận các luồng RTSP và xuất ra HLS mà không cần chuyển mã (transcode), chỉ đơn giản là chuyển tiếp các byte dữ liệu. Tính năng then chốt là một ring buffer zero-copy kết hợp với sync.Pool: các khung hình (frame) chỉ được ghi một lần vào buffer lấy từ pool và được chia sẻ cho tất cả các subscriber, giúp loại bỏ hoàn toàn việc cấp phát bộ nhớ và giảm tải cho garbage collector (GC). Kết quả benchmark cho thấy 13,9 ns/lần thao tác và 0 B bộ nhớ cấp phát mỗi lần thao tác. Thử nghiệm tải bằng k6 (1000 người dùng) trên một máy Ryzen 5600x đạt được tốc độ 8,8 Gbps (81 GB trong 70 giây) với 60.000 phản hồi HTTP thành công và không có lỗi nào xảy ra. Việc bảo vệ subscriber được thực hiện thông qua cơ chế gửi non-blocking qua channel, chủ động loại bỏ (drop) các khung hình đối với những client xử lý chậm, cùng với một cờ NeedsIFrame để đồng bộ lại tại khung hình chính (keyframe) tiếp theo. Một cửa sổ trượt gồm 5 segment HLS được giữ trong bộ nhớ; các segment đã cũ sẽ trả về lỗi 404, khiến các trình phát như hls.js tự động nhảy tới điểm phát trực tiếp (live edge). Hệ thống chỉ tiêu tốn 250 MB RAM cho 100 luồng, tuy nhiên các bộ đệm socket của hệ điều hành lại làm tăng thêm một phần chi phí bộ nhớ. Tác giả cũng cảnh báo về những cạm bẫy khi sử dụng sync.Pool và cho rằng đối với các tác vụ không cần chuyển mã, việc tránh sử dụng FFmpeg và kiểm soát bộ nhớ bằng kỹ thuật zero-copy sẽ mang lại nhiều lợi ích.
Nguồn: Habr — хаб ИИ — bản gốc
Bài viết liên quan trước đây ↓
Tin mới