Eu tenho algumas opções para você considerar:
Opção 1: Contenção de IO
A disparidade no desempenho da codificação de vídeo provavelmente tem muito pouco a ver com a CPU. Em vez disso, examine a contenção de IO. Enquanto estiver codificando, execute top
e observe o valor de %wa
no cabeçalho. Essa é a porcentagem de tempo que o servidor está tendo que aguardar solicitações de E / S. Você quer esse número tão baixo quanto possível. Nos meus sistemas, eu começo a fazer alterações se vejo um número maior do que 5%, com uma média de 5 minutos.
Se você realmente está vendo uma alta contenção de IO, há algumas coisas que você pode fazer. Primeiro, e talvez mais fácil, seria migrar para um volume EBS de IOPs provisionados (PIOPs). Com estes, você pode especificar quantos IOPs você precisa. Você pagará mais por isso, mas é de longe a maneira mais fácil de aumentar o desempenho de IO.
Se você não quiser fazer isso por algum motivo, você pode associar um monte de volumes do EBS ao seu servidor e juntá-los em um volume RAID0 maior. O IO agregado será bastante aumentado nessa situação, mas também é muito mais arriscado, pois a falha de qualquer volume único do EBS destruirá os dados desse volume.
Eu recomendaria experimentar um volume de PIOPs.
Opção 2: otimização da CPU
Outra coisa a considerar: você está executando um m1.small. Nessas instâncias menores, a AWS é bastante agressiva com o afogamento da CPU, portanto, você pode considerar a migração para uma instância maior, possivelmente um modelo de alta CPU, como o c1.medium. Se a AWS limitar sua CPU, você verá valores altos na coluna %st
(roubar) na saída de top
.
Opção 3: terceirizar
Isso pode ser complicado, mas por que não experimentar o serviço de Elastic Transcoder da AWS? Isso levará toda a carga de codificação do seu servidor completamente.