Tóm tắt: chúng tôi đang chạy một đài phát thanh internet trong VirtualBox và chúng tôi gặp sự cố là VM chỉ chạy chậm hơn một chút so với thời gian thực, khiến phát lại âm thanh bắt đầu bị gián đoạn sau một thời gian vì bộ đệm luồng bị chậm.
Đây là thiết lập: chúng tôi đang chạy RadioDJ bên trong máy ảo Windows 7; VM có 2 lõi được gán và RAM 2 GB. Hệ điều hành máy chủ là CentOS 7, chạy trên lõi tứ Intel Xeon X3440 với HyperThreading ở tốc độ 2,53 GHz (tối đa) và RAM 16 GB; Linux báo cáo 8 lõi.
VM chạy tốt với tải CPU trên cả hai lõi trung bình khoảng 25% và không bao giờ đạt tối đa. Chúng tôi tạo ra 4 luồng bit (MP3 và AAC +) được chuyển tiếp qua IceCast và tất cả đều gặp phải cùng một vấn đề: RadioDJ tạo ra các bit cho các luồng chỉ chậm một chút, do đó, sau vài phút, bộ đệm âm thanh bị trống. Người nghe phải tạm dừng trình phát của mình trong vài giây để điền lại bộ đệm hoặc khởi động lại phát lại (*).
VM này được sử dụng để chạy trên một máy chủ khác mà không gặp vấn đề gì (Xeon X3430 quadcore, không siêu phân luồng, RAM 8 GB). Nó cũng là một phần quá chậm, nhưng sẽ mất 45 phút trước khi các vấn đề đáng chú ý.
Trên máy chủ mới, các vấn đề ban đầu tồi tệ hơn nhiều; bộ đệm sẽ thoát trong 90 giây. Tôi đã tính toán rằng các CPU ảo đang chạy chậm hơn 4,5% so với thời gian thực.
Vì vậy, những gì tôi đã cố gắng:
- Gán 1 lõi cho VM: không cải thiện.
- Chạy lại chỉ số Hiệu suất Windows; không có cải thiện.
- Trình điều khiển âm thanh ảo khác nhau (xem bên dưới); không có cải thiện.
- Đặt Paravirtualization trong VirtualBox thành Hyper-V: điều đó đã giúp một chút.
Có hai thủ phạm có thể. Một là trình điều khiển âm thanh: RadioDJ yêu cầu một audiocard phải có mặt nhưng máy chủ mới không có. Tôi nghi ngờ RadioDJ sử dụng thẻ để định thời cho các audioframes và tạo ra các luồng bit. Vì vậy, tôi đang sử dụng Trình điều khiển âm thanh Null trong VirtualBox và thẻ âm thanh ICH AC97 ảo cho Windows. Vẫn đang trôi ... Tôi đã cài đặt Cáp âm thanh ảo VB với hy vọng nó sẽ sử dụng thời gian CPU cho tỷ lệ mẫu 44100 "thật". Vấn đề là ít hơn, nhưng vẫn còn khoảng 0,68% quá chậm.
Thủ phạm thứ hai có thể là Xeon mới có tốc độ CPU thay đổi (máy chủ cũ dường như là tốc độ cố định), nhưng đặt bộ điều chỉnh Linux thành 'hiệu suất' không có nhiều khác biệt. Trong cả hai trường hợp, Windows 7 cũng có thể xử lý tốc độ CPU động.
Một quan sát thú vị cuối cùng: Tôi đã mở Trình quản lý tác vụ Windows mọi lúc trong khi gõ tin nhắn này và bộ đếm Thời gian lên dường như trôi qua lại so với thời gian đồng hồ treo tường (bởi sự trùng hợp ngẫu nhiên tôi đã khởi động VM ngay trước nửa đêm vì vậy Thời gian lên gần tương ứng với thời gian máy tính để bàn của tôi). Vì vậy, có vẻ như VM không chạy chính xác ... Độ trôi từ +17 đến +37 giây.
Câu hỏi lớn là: làm cách nào để VM hoạt động ở mức 100% hoặc giả sử RadioDJ sử dụng soundcard để định thời gian, một soundcard (ảo) thực sự đang chạy?
(*) Tôi nhận ra rằng do sự khác biệt nhỏ về tốc độ CPU và soundcard, bất kỳ luồng phát lại nào cũng có thể bị trôi đi và làm trống bộ đệm.