O EBS está naturalmente com fome de CPU?

4

Temos uma instância EC2 m1.medium com uma unidade EBS pequena (15G), rodando ambos os Rails 3 e um servidor PostgreSQL. Percebemos picos de CPU em momentos estranhos e, finalmente, percebemos que mesmo o acesso EBS simples e sustentado parece fixar a CPU. Por exemplo, apenas sobre 3G de logs resultou em 100% de uso da CPU - o que significa que ambos os núcleos, que devem ser impossíveis para o grep! A exclusão de vários arquivos de log também usou cerca de 25% da CPU, o que é mais do que eu esperava. Nós não estamos trocando.

Isso é normal? É difícil para o Google, já que "alta CPU" também é o nome de um tipo de instância do EC2. Eu ficaria feliz em fornecer mais detalhes e benchmarks, mas primeiro eu queria verificar se isso era uma coisa.

    
por Jay Levitt 15.11.2011 / 03:23

2 respostas

6

O desempenho dos volumes do EBS pode ser afetado por coisas como:

  • Os novos volumes do EBS têm uma penalidade de primeiro uso, mesmo que sejam criados a partir de um instantâneo do EBS. A primeira vez que você ler ou gravar em cada bloco no volume levará muito mais tempo do que os hits subsequentes.

  • Quando um instantâneo do EBS tiver sido iniciado, o volume do EBS poderá apresentar um alto iowait quando você tentar gravar em um bloco que ainda não tenha sido copiado para o armazenamento de instantâneo do S3.

  • Os volumes do EBS usam a largura de banda da rede na instância. Você pode obter melhor desempenho de IO e reduzir o iowait da CPU se fizer upgrade para um tipo de instância maior.

Aqui está um artigo que eu escrevi sobre o carregamento lento de volumes do EBS a partir de snapshots:

Identifying When a New EBS Volume Has Completed Initialization From an EBS Snapshot
http://alestic.com/2010/03/ebs-volume-initialization-from-snapshot

Aqui está um artigo que escrevi descrevendo porque tivemos que mover nossos snapshots do EBS para um banco de dados escravo ao invés de executá-los no master:

EBS Snapshots of a MySQL Slave Database on EC2
http://alestic.com/2009/08/ec2-mysql-slave-snapshot

    
por 15.11.2011 / 03:48
3

É provável que quase todo o tempo gasto na CPU durante o grep que você mencionou tenha sido devido ao iowait. Execute top em outro terminal durante o grep e observe o valor %wa . Esse valor é o tempo gasto para a conclusão do pedido de veiculação.

É um fato bem conhecido e bem discutido que os volumes do EBS apresentam um desempenho muito ruim quando se trata de IO. É por isso que muitas organizações ligam vários volumes EBS juntos via RAID (geralmente RAID 0, mas possivelmente outros níveis também podem ser úteis) para aumentar o desempenho.

    
por 15.11.2011 / 03:45