Por que as IOPS são importantes?

32

Entendo o que são IOPS e taxa de transferência. A taxa de transferência mede o fluxo de dados conforme MB / se o IOPS informa 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 os IOPS que eles fornecem. Realmente não vejo nenhum cenário em que eu prefira conhecer o IOPS em vez da taxa de transferência.

Por que as IOPS são importantes? Por que a AWS mostra principalmente suas provisões de armazenamento no IOPS? Onde as IOPS são mais relevantes que a taxa de transferência (MB / s)?


EDITAR:

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

mFeinstein
fonte
3
Se você deseja mover grandes dados, você se preocupa com a taxa de transferência. Se você precisar r / w de muitos dados pequenos, precisará de mais IOPS. eg1 Se houver uma única operação que possa ler MB de dados do dispositivo, você precisará de apenas 1 operação para obter uma alta taxa de transferência. eg2 Se você precisar ler dezenas de atributos de arquivo, não estará visualizando uma grande quantidade de dados a cada vez, mas precisará realizar muitas operações para buscar pequenos pedaços de dados. O rendimento seria baixo, mas você precisaria de muitas operações.
TafT

Respostas:

32

Taxa de transferência

A taxa de transferência é útil quando você faz coisas como copiar arquivos. Quando você está fazendo quase qualquer outra coisa, as leituras e gravações aleatórias no disco limitam você.

IOPS

Os IOPS normalmente especificam o tamanho de cada pacote de dados. Por exemplo, o AWS gp2 pode executar 10.000 IOPS com um tamanho de carga útil de 16 KiB . Isso multiplica para 160MiB / s. No entanto, provavelmente é improvável que você use o tamanho total da carga útil 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 fornece rendimento total. Considerando que a alta taxa de transferência não significa que você tenha IOPS alto.

Cenários

Considere estes cenários:

  • Inicializando seu PC. Considere a diferença entre um SSD e um disco giratório no seu computador, 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, isso pode diminuir de 10 a 15 segundos. Isso ocorre porque um IOPS mais alto leva a uma menor latência quando as informações são solicitadas. A taxa de transferência do disco giratório é muito boa, 150 MB / s, embora o SSD provavelmente seja maior, 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 IOPS baixo, seria lento, independentemente da taxa de transferência.
  • Executando um banco de dados, por exemplo, selecionando uma pequena quantidade de dados de um banco de dados grande. Ele lerá o índice, lerá vários arquivos e retornará um resultado. Novamente, ele está percorrendo todo o disco para coletar as informações.
  • Jogando um jogo no seu PC. Provavelmente carrega um grande número de texturas de todo o disco. Nesse caso, é provável que sejam necessários IOPS e taxa de transferência.

Fita LTO

Considere por um momento um sistema de backup em fita. O LTO6 pode fazer 400 MB / s, mas (suponho aqui) provavelmente não pode nem fazer uma PIO aleatória, pode ser tão baixo quanto segundos por PIO. Por outro lado, provavelmente ele pode executar várias IOPS seqüenciais, se uma IOPS for definida como ler ou gravar uma parcela de dados em fita.

Se você tentasse inicializar um SO com fita, levaria muito tempo, se funcionasse. É por isso que o IOPS geralmente é mais útil que a taxa de transferência.

Para entender um dispositivo de armazenamento, você provavelmente deseja saber se é IOPS aleatório ou seqüencial e o tamanho de IO. A partir disso, você pode derivar a taxa de transferência.

AWS

Observe que a AWS publica números de IOPS e de taxa de transferência para todos os seus tipos de armazenamento, nesta página . O SSD de uso geral (gp2) pode executar 10.000 16KiB IOPS, o que fornece um máximo de 160MB / s. Os IOPS provisionados (io1) são 20.000 IOPS de 16 KiB, o que fornece um máximo de 320 MB / s.

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

Conclusão

A alta taxa de transferência seqüencial é útil e, em alguns casos, é o fator limitador do desempenho, mas é provável que altos IOPS sejam mais importantes na maioria dos casos. É claro que você ainda precisa de uma taxa de transferência razoável, independentemente do IOPS.

Tim
fonte
Entendo que o IOPS mede o desempenho do acesso aleatório, mas na verdade não mostra o quão rápido você está fazendo as coisas ... você pode estar fazendo 10000 IOPS, mas isso pode ser algo lento ou rápido, a única maneira de saber é saber quantas MB / s que a operação está consumindo.
MFeinstein
Os IOPS normalmente especificam o tamanho da carga útil dos dados. AWS diz 16KiB. Portanto, 10.000 IOPS a 16KiB / s oferecem 160 MB / s.
Tim
2
Porém, 10000 IOPS em 16 KB não serão convertidos para 20.000 IOPS em 8 KB (talvez ~ 11000). Isso significa que é necessário conhecer IOPS e taxa de transferência para avaliar uma unidade / carga de trabalho.
Boot4life 23/05
4
Só para ser pedante, ainda são 1 IOPS, não 1 IOP. O s não é um plural
Matthew Steeples
1
Não consigo pensar em nenhum outro. A maioria das coisas que são IOPS altas é uma taxa de transferência razoavelmente alta, mas na maioria dos casos é útil por causa da IOPS e não da taxa de transferência. Outro exemplo pode ser um banco de dados relacional, embora não seja um dispositivo de armazenamento, é um software. Não sei ao certo o que mais você quer desta pergunta. Acho que o conceito foi completamente explicado a você. Qualquer coisa com um alto tempo de busca ou latência provavelmente tem IOPS baixo, mas a taxa de transferência pode ser dissociada e alta em alguns casos.
Tim
57

Isso ocorre porque a taxa de transferência seqüencial não é a que ocorre com a maioria das atividades de E / S.

As operações de leitura / gravação aleatória são mais representativas da atividade normal do sistema e geralmente são vinculadas pelo IOPS.

O streaming de pornografia de um de meus servidores para nossos clientes (ou o upload para nossa CDN) é de natureza mais seqüencial e você verá o impacto da taxa de transferência lá.

Mas manter o banco de dados que cataloga a pornografia e rastreia a atividade do usuário pelo 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.

Talvez eu precise de 2.000 IOPS para poder executar os bancos de dados com o pico de uso, mas apenas vejo uma taxa de transferência de 30 MB / s no nível do disco devido ao tipo de atividade. Os discos são capazes de 1200 MB / s, mas os IOPS são a limitação no ambiente.

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

ewwhite
fonte
Você poderia me dar um exemplo em que o IOPS me daria uma visão do desempenho do meu sistema, onde MB / s não serão úteis?
MFeinstein 22/05
@mFeinstein Veja o exemplo pornô acima.
ewwhite
33
+1 para exemplo pornô lol
mFeinstein
2
Além disso, é provável que um sistema operacional faça vários acessos aleatórios. A taxa de transferência de Seq não ajudará. Essa é uma razão para executar o sistema operacional em um SSD, pelo menos em PCs.
Sudo
3
Costumo ver discos totalmente utilizados com ~ 2 MB / s. Isso porque é 100% IO aleatório. Às vezes, ganhos incríveis de desempenho são possivelmente colocando os dados sequencialmente no disco (por exemplo, removendo a fragmentação, indexando nos bancos de dados).
Boot4life 23/05
6

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

Como o ewwhite já afirmou corretamente, a maioria dos aplicativos sem streaming executa principalmente operações de disco não sequenciais, e é por isso que as IOPS são importantes, além do pico de rendimento teórico.

Quando um colega de trabalho e eu instalamos SSDs em nossos sistemas de desenvolvimento para substituir os HDDs que usamos anteriormente, executamos algumas medições de desempenho nelas que realmente destacavam o motivo:

Resultados do disco rígido SATA:

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

Resultados de SSD conectados ao 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-7x mais rápido que o HDD ao ler arquivos grandes sequencialmente, mas é mais de 100x mais rápido ao ler pequenos pedaços de dados de diferentes partes do disco. Obviamente, com os HDDs, essa limitação se deve em grande parte ao fato de que os HDDs devem mover fisicamente a cabeça r / w para a faixa desejada e esperar os dados desejados girarem sob a cabeça, enquanto os SSDs não têm partes físicas para mover.

Nossos tempos de compilação melhoraram muito mais drasticamente do que uma simples comparação das taxas de transferência máximas sugeriria. As compilações que demoravam mais de 30 minutos agora terminavam em cerca de um minuto, já que a E / S do disco durante uma compilação grande consiste em ler e gravar muitos 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 de IOPS, você pode ter uma idéia muito melhor de como uma determinada carga de trabalho será executada em um determinado dispositivo de armazenamento. Se você estiver apenas transmitindo grandes quantidades de dados que não estão fragmentados, ficará muito próximo da taxa de transferência máxima. 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 pelo IOPS.

reirab
fonte
Você não mediu o IOPS também?
MFeinstein 24/05
3

Para executar uma operação de E / S, os inversores devem passar por uma série de operações. Para um disco rígido mecânico, eles precisam.

  1. Procure o caminho certo e selecione a cabeça certa.
  2. Aguarde o prato girar 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 da manchete e os números de PIOs representam casos extremos. Os números principais de throghput representam o caso em que cada operação envolve um grande bloco de dados; portanto, a unidade passa a maior parte do tempo na verdade movendo dados.

A figura principal das IOPs representa o caso em que os blocos de dados são muito pequenos, portanto, a maior parte do tempo é gasta procurando as cabeças e aguardando a rotação dos pratos.

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.

Peter Green
fonte
2

Existem dois tipos de gargalo que você pode experimentar em volumes de E / S (ou IO em geral, de fato).

O desempenho real é realmente medido para incluir um componente com base no volume de dados movidos, dimensionado pela largura de banda disponível ou tamanho similar, unitcost *, mas também há uma sobrecarga associada às solicitações, que é constante, seja esse disco, rede ou inúmeras outras coisas.

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

Se o custo unitário é grande ou o tamanho é grande, faz sentido cobrar com base nesses volumes, como redes de telefonia móvel, por outro lado, às vezes as despesas gerais são muito mais críticas.

Você mesmo pode fazer um experimento simples, criar um diretório com alguns arquivos de 1 GB (ou o que for prático, algo grande o suficiente para levar alguns segundos para ler / gravar) e criar uma pasta com um milhão de arquivos de 100 bytes (observe, são 0,1 GB de dados) e, em seguida, veja o que acontece com a taxa de transferência quando você começa a tentar mover todas essas coisas, entre diferentes partições / discos - você terá o desempenho otimizado pela taxa de transferência para os arquivos grandes e acelerado por o número de arquivos para os itens menores.

Eu diria que a Amazon está ciente dos dois modelos de carregamento e simplesmente encontrou um que representa melhor as capacidades de sua infraestrutura.

Há um limite no tamanho de uma IOP que está amplamente relacionada à quantidade que a loja pode transferir em um "ciclo" de qualquer maneira, portanto, grandes solicitações ainda acabam custando várias IOPS.

Há uma boa parte aqui da amazon sobre IOPS e custos, e as 'economias' que elas passam através de otimizações

Características e monitoramento de E / S

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

Iain Price
fonte
2

Respondendo sua pergunta

"Que novas informações eu recebo quando vejo um número IOPS e que não vejo um número de taxa de transferência (MB / s)?"

diretamente, é quantas operações de E / S com profundidade de fila e tamanho de arquivo especificados o armazenamento pode fazer por segundo . Você pode calcular o rendimento em determinadas condições usando a seguinte fórmula:

IOPS * tamanho do arquivo = 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 que na profundidade da fila 32, 256, 512 o número aumenta várias vezes e não muda muito. No tamanho do arquivo, a contagem de 128 KB de IOPS pode ser menor ao lado dos arquivos de 4KB, mas a taxa de transferência é maior.

A melhor maneira de avaliar o desempenho de um armazenamento é buscar testes de IOPS e taxa de transferência em vários tamanhos de blocos e profundidade de filas diferentes.

Eugene
fonte
Acredito que você possa confundir IOPS com taxa de transferência um pouco ... Taxa de transferência não é sinônimo de acesso contínuo, mas o total de MB / s que o armazenamento foi capaz de processar em um determinado momento ... Então, quando você diz o HD e o SSD teria a mesma taxa de transferência, é para acesso contínuo ... Como também existe taxa de transferência para acesso aleatório ... Muito menos para HDDs em geral devido ao tempo de busca.
MFeinstein
Portanto, você deve incluir na sua resposta que está se referindo ao acesso contínuo no início e ao acesso aleatório no final, pois o IOPS também não é sinônimo de acesso aleatório ... Justamente quando faz mais sentido usar o IOPS como um medição
mFeinstein 24/05
@mFeinstein Eu editei a resposta, dê uma olhada.
Eugene
1

De um modo geral, é mais difícil obter IOPS do que taxa de transferência. Se você tiver muitas IOPS, terá uma taxa de transferência suficiente na maioria das vezes.

Nos discos rígidos clássicos, o número de eixos é o seu fator limitante, pois a cabeça deve ser movida fisicamente em cada disco: e é terrivelmente lento. Os SSDs têm capacidade IOPS muito melhor.

Se você tiver apenas um usuário, copiando um arquivo grande para a rede, poderá ter apenas uma dúzia de tentativas para obter os dados, e o restante estará apenas transmitindo a partir do disco.

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

Apenas atualizar 10 linhas em paralelo em um banco de dados relacional pode acabar gerando centenas de pedidos de veiculação: 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 tenta arduamente limitar o número de pedidos de veiculação armazenando em cache e atrasando / agrupando os pedidos de veiculação, quando possível.

Xavier Nicollet
fonte
1

Também responderei à minha própria pergunta, porque acho que a maioria das respostas saiu muito problemática e a resposta poderia ser muito mais simples:

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

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

Portanto, analisando IOPS alto, você pode concluir que seu dispositivo de armazenamento está lidando com muitos acessos aleatórios, mesmo que isso ocorra com baixa taxa de transferência .... ou talvez você esteja analisando IOPS baixa com a mesma taxa de transferência baixa, o que significa que seu dispositivo é apenas ocioso.

Portanto, examinando as IOPS, podemos ter uma ideia do que realmente significa a taxa de transferência, elas se complementam.

mFeinstein
fonte
IOPS = Entradas / saídas por segundo, não se trata do plural e o S final não deve ser omitido. :)
Eugene
1
Não se trata de plural, já vi algumas pessoas se referindo à PIO como uma abreviação de "I / O OPeration", como parece ... Mas sim, isso pode causar confusão, então vou substituí-la, obrigado
mFeinstein