Por que o IOPS é importante?

30

Eu entendo o que são IOPS e throughput. A taxa de transferência mede o fluxo de dados, pois os MB / s e IOPS informam quantas operações de E / S estão acontecendo por segundo.

O que não entendo é por que muitos serviços de armazenamento mostram apenas as IOPS que fornecem. Eu realmente não consigo ver nenhum cenário em que preferiria conhecer as IOPS em vez da taxa de transferência.

Por que o IOPS é importante? Por que a AWS mostra principalmente suas provisões de armazenamento em IOPS? Onde o IOPS é mais relevante que o throughput (MB / s)?

EDITAR:

Algumas pessoas estão olhando para essa pergunta como se eu perguntasse o que é acesso aleatório e como isso afeta o desempenho ou como o HDD e o SSD funcionam ... embora eu ache que essa informação é útil para pessoas novas no comportamento de armazenamento, muito foco está sendo aplicado a isso e não é o objetivo da pergunta, a questão é sobre "Que nova informação eu recebo quando vejo um número de IOPS, que eu não veria uma taxa de transferência (MB / s) number? "

    
por mFeinstein 22.05.2017 / 23:56

8 respostas

32

Taxa de transferência

O rendimento é útil quando você está fazendo coisas como copiar arquivos. Quando você está fazendo quase tudo, são leituras e gravações aleatórias no disco que o limitarão.

IOPS

As IOPS normalmente especificam o tamanho de cada pacote de dados. Por exemplo, o AWS gp2 pode fazer 10.000 IOPS com um tamanho de carga útil de 16 KiB . Isso se multiplica para 160 MiB / s. No entanto, é improvável que você use o tamanho da carga completa o tempo todo, portanto a taxa de transferência real provavelmente será menor. NB KiB é 1024 bytes, KB é 1000 bytes.

Como o IOPS especifica um tamanho de pacote que também oferece taxa de transferência total. Considerando que alta taxa de transferência não significa que você tenha alta IOPS.

Cenários

Considere estes cenários:

  • Iniciando seu PC. Considere a diferença entre um SSD e um disco giratório em seu computador, que é algo com o qual muitas pessoas têm experiência em primeira mão. Com um disco giratório, o tempo de inicialização pode ser de um minuto, enquanto que, com um SSD, esse tempo pode chegar a 10 - 15 segundos. Isso ocorre porque um IOPS mais alto leva a uma latência menor quando as informações são solicitadas. A taxa de transferência do disco giratório é muito boa, 150MB / s, embora o SSD provavelmente seja mais alto, não é por isso que é mais rápido - é a menor latência para retornar informações.
  • Executando uma atualização do sistema operacional. Está passando por todo o disco, adicionando e corrigindo arquivos. Se você tivesse baixa IOPS, seria lento, independentemente da taxa de transferência.
  • Execução de um banco de dados, por exemplo, selecionando uma pequena quantidade de dados de um banco de dados grande. Ele lerá o índice, lerá de vários arquivos e retornará um resultado. Novamente, vai todo o disco coletar as informações.
  • Jogando um jogo no seu PC. É provável que carregue um grande número de texturas de todo o disco. Nesse caso, o IOPS e a taxa de transferência provavelmente são necessários.

Fita LTO

Considere por um momento um sistema de backup em fita. LTO6 pode fazer 400MB / seg, mas (eu estou supondo aqui) provavelmente não pode nem fazer um IOP aleatório, pode ser tão baixo quanto segundos por IOP. Por outro lado, provavelmente pode fazer muitas IOPS sequenciais, se uma IOPS for definida como ler ou gravar um pacote de dados em fita.

Se você tentasse inicializar um SO sem fita, levaria muito tempo, se funcionasse. É por isso que o IOPS é geralmente mais útil do que o throughput.

Para entender um dispositivo de armazenamento, você provavelmente desejará saber se são IOPS aleatórios ou sequenciais e o tamanho do IO. A partir disso, você pode obter taxa de transferência.

AWS

Observe que a AWS publica números de IOPS e de taxa de transferência para todos os tipos de armazenamento, nesta página . O SSD de finalidade geral (gp2) pode fazer 10.000 IOPS de 16 KiB, o que dá um máximo de 160MB / seg. O IOPS provisionado (io1) é de 20.000 IOPS de 16 KiB, o que dá um máximo de 320 MB / s.

Observe que, com os volumes gp2, você obtém 30IOPS por GB provisionado, portanto, para obter 10.000 IOPS, é necessário um volume de 333,33 GB. Não me lembro se os volumes io1 têm uma limitação semelhante (faz um tempo desde que fiz os exames associados em que esse tipo de coisa é testado), mas suspeito que sim, e se assim for, provavelmente 60IOPS por GB.

Conclusão

Alta taxa de transferência sequencial é útil e, em alguns casos, é o fator limitante do desempenho, mas a alta IOPS provavelmente será mais importante na maioria dos casos. Você ainda precisa, naturalmente, de uma taxa de transferência razoável, independentemente da IOPS.

    
por 23.05.2017 / 00:13
57

Isso ocorre porque a taxa de transferência sequencial não é como a maioria das atividades de E / S ocorre.

Operações de leitura / gravação aleatórias são mais representativas da atividade normal do sistema, e geralmente são vinculadas por IOPS.

Transmitindo pornografia de um dos meus servidores para nossos clientes (ou fazendo o upload para o nosso CDN) é mais sequencial por natureza e você verá o impacto da taxa de transferência.

Mas manter o banco de dados que cataloga a pornografia e rastreia a atividade do usuário através do site será de natureza aleatória e limitado pelo número de pequenas operações de E / S / segundo das quais o armazenamento subjacente é capaz.

Eu posso precisar de 2.000 IOPS para poder executar os bancos de dados no pico de uso, mas só posso ver uma taxa de transferência de 30MB / s no nível do disco devido ao tipo de atividade. Os discos são capazes de 1200MB / s, mas as IOPS são a limitação no ambiente.

Esta é uma maneira de descrever o potencial de capacidade de um sistema de armazenamento. Um SSD pode ter capacidade para 80.000 IOPS e 600MB / s. Você pode obter essa taxa de transferência com 6 discos SAS regulares de 10k, mas o resultado seria apenas cerca de 2.000 IOPS.

    
por 23.05.2017 / 00:05
6

Embora a resposta do ewwhite esteja completamente correta, eu queria fornecer números mais concretos apenas para ajudar a explicar por que a diferença é importante em perspectiva.

Como o ewwhite já afirmou corretamente, a maioria dos aplicativos que não são de fluxo contínuo executam principalmente operações de disco não sequenciais, motivo pelo qual as IOPS são importantes além do pico teórico da taxa de transferência.

Quando um colega de trabalho e eu instalamos os SSDs em nossos sistemas de desenvolvimento para substituir os HDDs que utilizávamos anteriormente, executamos algumas medições de desempenho que realmente destacavam por que isso é importante:

Resultados do HDD SATA:

Taxa de transferência de leitura sequencial: ~ 100 MB / s
Taxa de transferência de leitura não seqüencial (2k blocos, IIRC): ~ 1 MB / s

Resultados de SSD conectados a PCIe:

Taxa de transferência de leitura sequencial: ~ 700 MB / s
Taxa de transferência de leitura não sequencial (2k blocos, IIRC): ~ 125 MB / s

Como você pode ver claramente no exemplo, apenas listar uma taxa de transferência máxima para cada dispositivo forneceria uma imagem extremamente imprecisa de como eles se comparam. O SSD é apenas cerca de 6 a 7 vezes mais rápido que o HDD ao ler arquivos grandes sequencialmente, mas é 100 vezes mais rápido ao ler pequenos trechos de dados de diferentes partes do disco. Naturalmente, com os HDDs, essa limitação deve-se em grande parte ao fato de os HDDs precisarem mover fisicamente a cabeça do r / w para a trilha desejada e esperar que os dados desejados girem sob a cabeça, enquanto os SSDs não têm partes físicas para mover.

Nossos tempos de compilação melhoraram muito mais dramaticamente do que uma simples comparação do throughput máximo teria sugerido. Os builds que anteriormente demoravam mais de 30 minutos agora terminavam em cerca de um minuto, já que a E / S de disco durante uma grande compilação consiste em ler e gravar vários arquivos de origem separados que não são individualmente muito grandes e podem estar espalhados fisicamente por todo o disco .

Ao fornecer números de taxa de transferência e IOPS, você pode ter uma ideia muito melhor de como determinada carga de trabalho será executada em um determinado dispositivo de armazenamento. Se você está apenas transmitindo grandes quantidades de dados que não estão fragmentados, você chegará muito perto do throughput máximo. No entanto, se você estiver fazendo muitas pequenas leituras e / ou gravações que não são armazenadas sequencialmente no disco, você será limitado por IOPS.

    
por 24.05.2017 / 02:31
3

Para executar uma operação de E / S, a (s) unidade (s) deve passar por uma série de operações. Para um disco rígido mecânico, eles precisam.

  1. Procure a faixa certa e selecione a cabeça certa.
  2. Espere que o prato gire para a posição correta.
  3. Realmente, transfira os dados.

O tempo gasto para 3 depende do tamanho do bloco de dados, mas o tempo gasto para 1 e 2 é independente do tamanho da solicitação.

O rendimento do título e os números de IOPs representam casos extremos. Os números de throghput de manchete representam o caso em que cada operação envolve um grande bloco de dados, de modo que o disco gasta a maior parte do tempo realmente movendo dados.

A figura do IOP da manchete representa o caso em que os blocos de dados são muito pequenos, então a maior parte do tempo é gasto procurando as cabeças e esperando que os pratos girem.

Para muitas cargas de trabalho, os blocos são suficientemente pequenos para que o número de blocos a serem transferidos seja muito mais importante que o tamanho dos blocos.

    
por 23.05.2017 / 17:50
2

Existem dois tipos de afunilamento que você pode experimentar em volumes de IO (ou IO em geral, de fato).

O desempenho real é de fato medido para incluir um componente baseado no volume de dados movidos, dimensionado pela largura de banda disponível ou tamanho semelhante, mas há também uma sobrecarga associada a solicitações, que é constante, seja esse disco, rede, ou várias outras coisas.

unitcost * size + overhead. a equação de uma linha.

Se o custo unitário for grande ou o tamanho for grande, faz sentido cobrar com base nesses volumes, como redes de telefonia celular; por outro lado, as despesas gerais são muito mais críticas.

Você pode fazer um experimento simples, criar um diretório com alguns arquivos de 1 GB (ou o que for mais prático, algo grande o suficiente para ler / gravar) e criar uma pasta com um milhão Arquivos de 100 bytes (note que são 0,1 GB de dados) e, em seguida, ver o que acontece com a sua taxa de transferência quando você começa a mover tudo isso entre diferentes partições / discos - você obterá desempenho limitado pela taxa de transferência dos arquivos grandes, e acelerado pelo número de arquivos para o material menor.

Suponho que a Amazon esteja ciente dos dois modelos de cobrança e tenha simplesmente encontrado uma que represente melhor as capacidades de sua infraestrutura.

Existe um limite no tamanho de um IOP que está amplamente relacionado à quantidade que a loja pode transferir em um "ciclo" de qualquer maneira, portanto, as grandes solicitações ainda custam várias IOPS.

Há um bom artigo aqui da própria amazon sobre IOPS e custos, e 'economias' que eles transmitem por meio de otimizações

Características e monitoramento de I / O

Não leia tudo, mas parece interessante, se você está curioso sobre esta área.

    
por 23.05.2017 / 00:27
2

Respondendo sua pergunta

"What new piece of information do I get when I see an IOPS number, that I wouldn't get seeing a throughput (MB/s) number?"

diretamente, é quantas operações de IO da profundidade da fila especificada e do tamanho do arquivo o armazenamento pode fazer por segundo . Você pode calcular o rendimento em determinadas condições usando a seguinte fórmula:

tamanho do arquivo IOPS * = taxa de transferência

Os testes de armazenamento podem gerar um número diferente de IOPS, dependendo do tamanho do arquivo e da profundidade da fila. Na profundidade da fila = 1 ou 2, o controlador não tira proveito do armazenamento em cache, enquanto na profundidade da fila 32, o número 256, 512 aumenta várias vezes e não muda muito. No tamanho de arquivo, a contagem de IOPS de 128 KB pode ser menor ao lado dos arquivos de 4KB, mas com a taxa de transferência maior.

A melhor maneira de avaliar o desempenho de um armazenamento é buscar testes de IOPS e throughput em vários tamanhos de blocos e profundidades de filas diferentes.

    
por 24.05.2017 / 17:50
1

De um modo geral, o IOPS é mais difícil de obter do que o throughput. Se você tiver muitas IOPS, terá uma taxa de transferência suficiente na maior parte do tempo.

Com discos rígidos clássicos, o número de eixos é o seu fator limitante, uma vez que a cabeça deve ser movida fisicamente em cada unidade: e é terrivelmente lenta. SSDs têm capacidade de IOPS muito melhor.

Se você tiver apenas um usuário, copiando um arquivo grande para a rede, talvez tenha apenas uma dúzia de usuários procurando dados, e o restante será transmitido apenas do disco.

No entanto, se você estiver acessando um banco de dados ou tiver muitos usuários simultâneos, terá que acessar diferentes partes do seu armazenamento ao mesmo tempo, com o aumento de disparos de IOPS.

Apenas atualizar 10 linhas em paralelo em um banco de dados relacional pode acabar gerando centenas de IOs: lendo os índices, lendo os dados, anexando o arquivo de log, atualizando os índices e os dados. A maioria dos sistemas operacionais e bancos de dados se esforça muito para limitar o número de IOs armazenando em cache e atrasando / agrupando os IOs quando possível.

    
por 23.05.2017 / 09:57
1

Eu também responderei a minha pergunta porque acho que a maioria das respostas foi muito diferente e a resposta poderia ser muito mais simples:

Se você observar somente a taxa de transferência de seus dispositivos de armazenamento, poderá perder o que está acontecendo ... Se houver baixa taxa de transferência (MB / s) você pode ter um dispositivo lento OU ter muito acesso aleatório em um HDD ou algum outro dispositivo que não lida bem com o acesso aleatório.

Examinando as IOPS e sabendo o tamanho do bloco de cada operação de E / S, você pode saber quantos acessos o dispositivo de armazenamento é capaz de manipular e qual é a taxa de transferência desses IOPS (tamanho de bloco * IOPS).

Portanto, olhando para alta IOPS você pode concluir que seu dispositivo de armazenamento está lidando com um monte de acesso aleatório, mesmo que isso venha com baixo throughput .... ou talvez você esteja procurando IOPS baixos que tenham o mesmo baixo rendimento dispositivo está apenas ocioso.

Então, olhando as IOPS, podemos ter uma ideia do que a taxa de transferência realmente significa, elas se complementam.

    
por 24.05.2017 / 20:22