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)?"
fonte
Respostas:
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:
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.
fonte
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.
fonte
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.
fonte
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.
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.
fonte
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.
fonte
Respondendo sua pergunta
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.
fonte
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.
fonte
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.
fonte