Resumo: estamos executando uma estação de rádio da 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. / p>
Aqui está a configuração: estamos executando o 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, rodando em um quadcore Intel Xeon X3440 com HyperThreading a 2,53 GHz (máx.) E 16 GB de RAM; O Linux relata 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 ser executada 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 aprimoramento.
- Reexecutar o índice de desempenho do Windows; sem melhora.
- Driver de áudio virtual diferente (veja abaixo); sem melhora.
- Definindo a paravirtualização no VirtualBox para o Hyper-V: isso ajudou um pouco.
Existem 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 RadioDJ usa o cartão para cronometrar os audioframes e 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 VB Virtual Audio Cable na esperança de que iria usar o tempo de CPU para um "verdadeiro" 44100 taxa de amostragem. O problema é menor, mas ainda é 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 você digitava essa mensagem e o contador de Tempo para Cima parecia ser comparado à hora do relógio (por pura coincidência eu iniciei a VM pouco antes da meia-noite. o Up Time 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.