VirtualBox executando apenas um pouco lento demais


2

Resumo: estamos executando uma estação de rádio na Internet no VirtualBox e temos o problema de que a VM está rodando apenas um pouco mais devagar que o tempo real, fazendo com que a reprodução de áudio comece a gaguejar depois de algum tempo porque os buffers de fluxo estão acabando.

Aqui está a configuração: estamos correndo RadioDJ dentro de uma máquina virtual do Windows 7; a VM tem 2 núcleos atribuídos e 2 GB de RAM. O sistema operacional host é o CentOS 7, executado em um quadcore Intel Xeon X3440 com HyperThreading a 2,53 GHz (máx.) E 16 GB de RAM; O Linux reporta 8 núcleos.

A VM funciona bem com a carga da CPU em ambos os núcleos, com uma média de cerca de 25% e nunca maximizando. Produzimos 4 fluxos de bits (MP3 e AAC +) retransmitidos através do IceCast, e todos sofrem do mesmo problema: o RadioDJ produz bits para os fluxos um pouco lentos, então após alguns minutos o áudio gagueja porque os buffers do fluxo ficam vazios. Um ouvinte tem que pausar o player por alguns segundos para voltar a encher o buffer ou reiniciar a reprodução (*).

Esta VM costumava rodar em outro servidor sem grande problema (Xeon X3430 quadcore, sem hyperthreading, 8 GB de RAM). Também foi uma fração muito lenta, mas levaria 45 minutos para os problemas serem notados.

No novo servidor, os problemas foram muito piores no começo; os buffers drenariam em 90 segundos. Calculei que as CPUs virtuais estavam funcionando 4,5% mais lentamente que o tempo real.

Então, o que eu tentei:

  • Atribuindo 1 núcleo à VM: sem melhoria.
  • Reexecutando o índice de desempenho do Windows; sem melhora.
  • Driver de áudio virtual diferente (veja abaixo); sem melhora.
  • Definindo o Paravirtualization no VirtualBox para o Hyper-V: isso ajudou um pouco.

Há dois possíveis culpados. Um é o driver de áudio: o RadioDJ requer um audiocard para estar presente, mas o novo servidor não possui um. Eu suspeito que o RadioDJ usa o cartão para cronometrar os audioframes e a geração de bitstreams. Então, estou usando o Null Audio Driver no VirtualBox e uma placa de som virtual ICH AC97 para Windows. Ainda à deriva ... eu instalei Cabo de Áudio Virtual VB na esperança que usaria o tempo de CPU para uma taxa de amostragem "verdadeira" de 44100. O problema é menor, mas ainda cerca de 0,68% é muito lento.

O segundo culpado pode ser que o novo Xeon tem velocidade de CPU variável (o servidor antigo parecia ter velocidade fixa), mas definir o regulador do Linux como 'performance' não fazia muita diferença. Em ambos os casos, o Windows 7 também pode lidar com velocidades de CPU dinâmicas.

Uma última observação interessante: eu tinha o Gerenciador de Tarefas do Windows aberto o tempo todo enquanto digito esta mensagem e o contador de Tempo para Cima parece ser alternado para a hora do relógio de parede (por pura coincidência eu iniciei a VM pouco antes da meia-noite.) quase corresponde ao meu tempo de desktop). Então, parece que a VM não está funcionando tão bem ... O desvio é de +17 a +37 segundos.

A grande questão é: como faço para que a VM funcione a 100% ou, supondo que o RadioDJ use a placa de som para cronometragem, uma verdadeira placa de som (virtual) em execução?

(*) Eu percebo que, devido a pequenas diferenças na CPU e na velocidade da placa de som, qualquer fluxo de reprodução pode sair e esvaziar o buffer.

Respostas:


1

Bem, no final encontrei uma solução. Eu instalei Virtual Audio Cable de Eugene Muzychenko e isso funciona perfeitamente. É um driver de áudio virtual que mantém o tempo perfeito. Curiosamente, o driver inclui uma correção de relógio muito refinada, então, se você tem hardware que realmente está à deriva, pode compensar até mesmo isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.