VirtualBox 运行速度有点太慢

VirtualBox 运行速度有点太慢

摘要:我们在 VirtualBox 中运行一个互联网广播电台,我们遇到的问题是虚拟机的运行速度比实际速度稍微慢一些,导致音频播放在一段时间后开始出现卡顿,因为流缓冲区已不足。

设置如下:我们正在运行电台DJ在 Windows 7 虚拟机中;虚拟机分配了 2 个内核和 2 GB RAM。主机操作系统是 CentOS 7,运行在 Intel Xeon X3440 四核处理器上,超线程频率为 2.53 GHz(最高),16 GB RAM;Linux 报告有 8 个内核。

VM 运行良好,两个核心的 CPU 负载平均约为 25%,从未达到最大值。我们生成了通过 IceCast 中继的 4 个比特流(MP3 和 AAC+),它们都存在相同的问题:RadioDJ 为流生成比特的速度有点太慢,因此几分钟后音频就会卡顿,因为流缓冲区已空。听众要么必须暂停播放器几秒钟以重新填充缓冲区,要么重新启动播放 (*)。

该虚拟机曾经在另一台服务器上运行,没有太多问题(Xeon X3430 四核,无超线程,8 GB RAM)。它也有点慢,但要过 45 分钟才会出现问题。

在新服务器上,问题一开始就严重得多;缓冲区会在 90 秒内耗尽。我计算出虚拟 CPU 的运行速度比实际速度慢 4.5%。

所以我尝试了:

  • 为虚拟机分配 1 个核心:没有改进。
  • 重新运行 Windows 性能指数;没有改善。
  • 不同的虚拟音频驱动程序(见下文);没有改进。
  • 将 VirtualBox 中的半虚拟化设置为 Hyper-V:这确实有点帮助。

有两个可能的罪魁祸首。一个是音频驱动程序:RadioDJ 需要音频卡,但新服务器没有。我怀疑 RadioDJ 使用该卡来计时音频帧和比特流的生成。所以我在 VirtualBox 中使用 Null Audio Driver 和 Windows 的虚拟 ICH AC97 声卡。仍然不确定...我安装了VB 虚拟音频线希望它能使用 CPU 计时来实现“真正的”44100 采样率。问题较少,但仍然慢了约 0.68%。

第二个原因可能是新的 Xeon 具有可变的 CPU 速度(旧服务器似乎是固定速度),但将 Linux 调节器设置为“性能”并没有太大区别。无论哪种情况,Windows 7 都可以很好地处理动态 CPU 速度。

最后一个有趣的观察:我在输入此消息时一直打开 Windows 任务管理器,并且启动时间计数器似乎与挂钟时间来回漂移(纯属巧合,我在午夜前不久启动了 VM,因此启动时间几乎与我的桌面时间相对应)。因此看起来 VM 运行得并不那么准确……漂移从 +17 秒到 +37 秒。

最大的问题是:我如何让 VM 以 100% 的速率运行,或者假设 RadioDJ 确实使用声卡进行计时,即真正运行(虚拟)声卡?

(*) 我意识到由于 CPU 和声卡速度的细微差异,任何播放流都可能会偏离并清空缓冲区。

答案1

好吧,最后我找到了一个解决方案。我安装了 Eugene Muzychenko 的虚拟音频线,它运行完美。这是一个保持完美时间的虚拟音频驱动程序。有趣的是,该驱动程序包含一个非常精细的时钟校正,因此如果您的硬件确实在漂移,您甚至可以对此进行补偿。

相关内容