IOPS - Conceito ? Qual importância ?

O que são IOPS, como calcular, e porque são importantes para meu projeto de TI?

 

Uma palavra que apareceu nos últimos anos nos projetos de TI foi IOPS, e embora alguns fornecedores já comecem a medir a mesma e considerar nos projetos, nem sempre são entendidas e calculadas corretamente.

IOPS é uma abreviação para Input/Output per Second, ou operações de entrada e saída por segundo, aplicada sobre dispositivos de armazenamento, como drives de discos, drives SSD e Storages.

Sua importância para os projetos de TI é que ele indica quantas operações de leitura e escrita o dispositivo é capaz de realizar por segundo e essa quantidade impacta diretamente na performance.

Novos HDDs tem sido vendidos com cada vez mais capacidade de armazenamento e podem dar a sensação de que precisamos de menos HDs para compor a solução, mas um determinado ambiente precisa de uma determinada performance e só é possível alcançar a performance adicionando a quantidade adequada de discos.

O problema: leis da física


O problema de performance dos drives de disco se dá por limitações físicas mesmo, veja a situação da figura abaixo, onde o HDD girando no sentido horário precisa ler as informações localizadas nos pontos 1, 2 e 3.

Leitura Aleatória em HDDs

Para fazer a leitura nessa sequência, o HDD precisa dar quase uma volta inteira para cada bloco. Considerando um HDD que trabalha a 7200 RPM (rotações por minuto), uma volta demora cerca de 8,3ms, esse é o tempo mínimo entre essas leituras, o que permitiria até 120 leituras por segundo.

Só que, como o bloco 2 é em um extremo do HDD e o bloco 3 é em outro extremo, pode ser que a cabeça de leitura não se movimente rápido o suficiente para ler o bloco 3, o que obriga a cabeça a esperar por mais uma volta para fazer a leitura do dado, reduzindo a capacidade de leituras por segundo.

Assim, o cálculo de IOPS de um disco é dado pela fórmula:

 
Fórmula para Cálculo de IOPS
 
 
Onde Rotational Latency  é o tempo de espera até o disco girar onde precisamos ler o dado, e Seek Latency é o tempo de deslocamento da cabeça de leitura até o ponto no HD. Divide-se por mil para ter o número em segundos, pois normalmente os outros dois parâmetros são indicados em milissegundos pelos fabricantes.
 
Claro que, numa situação ideal, onde os dados estão alinhados, as latências de rotação e de procura diminuem, aumentando a capacidade de leitura dos HDs, mas isso só é possível em situações bem particulares, com um HD sendo acessado por uma única aplicação que tenha os dados alinhados corretamente, o que não acontece em um ambiente de desktop ou servidor comum.
 
Leitura Sequencial em HDDs
 

Discos mais rápidos

Discos de 15000 RPMs são mais rápidos que discos de 10000 RPMs ou 7200 RPMs, pois em um disco de 15000 RPMs, o tempo para dar uma volta completa é de 4ms, versus 6ms em discos de 10000 RPMs, 8,3ms em discos de 7200 RPMs, 10,1ms em discos de 5900 RPMs e 11,1ms em discos de 5400 RPMs (usado em notebooks e desktops de baixo custo).

Também, discos de 2,5" são ligeiramente mais rápidos do que discos de 3,5" com a mesma capacidade, pois a cabeça precisa movimentar menos para passar por toda a área útil do disco, trazendo um ganho de 20% a 30%.

E ainda os discos com maior capacidade (600Gb versus 146Gb por exemplo) podem ser mais rápidos quando usada a mesma quantidade de dados. Isso é comum depois de uma migração, por exemplo, se tiver 100Gb no servidor antigo com discos de 146Gb, ao migrar para um servidor novo com discos de 600Gb, os mesmos 100Gb estarão posicionados no início do HD, exigindo muito menos movimentação da cabeça de leitura.

Uso de disco versus IOPS

Isso também explica porque depois de uma desfragmentação do disco, a performance melhora significativamente.

Alternativas


Uma das alternativas para acelerar os drives de discos seria aumentar a velocidade, mas experimentos feitos a 20000 RPMs indicaram que os discos seriam mais sensíveis a vibrações, podendo apresentar defeitos mais facilmente, além de consumir mais energia elétrica e aquecer mais.

Outro fator contra acelerar os discos é a limitação da capacidade, quanto mais rápido a rotação, menor a densidade de trilhas por polegada. Para se ter ideia, um disco de 2Tb tem 236000 trilhas por polegada.

Outra alternativa seria acrescentar duas ou mais cabeças de leituras independentes, como já até existe patente para isso, propriedade da Seagate, mas os custos de fabricação seriam maiores, o espaço do HD seria maior  (deixando os novos HDs incompatíveis com os equipamentos atuais), consumiria mais energia elétrica e geraria mais calor.

HDD de duas cabeças

A possibilidade é que com duas cabeças de leitura tivesse um ganho de até o dobro de IOPS para a mesma capacidade e rotação de disco, pois o tempo de rotação poderia ser cortado pela metade (já que cada cabeça está em um lado do disco) e a capacidade de deslocamento da cabeça seria o dobro, pois existem duas.


Mas já que duas cabeças independentes não é possível por questões de mercado, os fabricantes poderiam no mínimo considerar dois leitores na mesma cabeça, isso reduziria o Seek Time pela metade, a cabeça teria que movimentar apenas metade do percurso, diminuindo o consumo de energia e gerando ganhos de IOPS de até 50%.

HDD com cabeça alienígena


Como nenhuma dessas soluções são cogitadas hoje pelos fabricantes, ficamos com a solução mais "convencional" de performance.

A solução do mercado para performance

Mais memória nos servidores, mais cache nos HDs não resolvem a limitação física dos drives de disco (HDD ou Hard Disk Drives), por isso muitos fabricantes tem incluído SSD (Solid State Drives) nas soluções, para atingir a performance necessária pelas aplicações.

Para comparação, esses são os números de IOPS médios dos HDs de mercado: 

IOPS por tipo de disco

Pode-se observar que os discos mecânicos, por mais rápidos que sejam, não chegam nem perto dos drives SSD em quantidade de IOPS.

Mas os drives SSD também são bem mais caros por GB, então, uma solução ideal deve incluir discos SSD e HDD para balancear entre custo de aquisição, espaço disponível e performance

A solução ideal também deve incluir software inteligente o suficiente para mover os dados mais acessados para os discos mais rápidos e os dados menos acessados para os discos de maior capacidade.

Juntando tudo numa solução

A melhor parte ao montar um projeto é que podemos somar a performance de vários discos usando RAID (Redundant Array of Independent Disks).

Por exemplo, com RAID 0 em dois discos de 7200 RPMs, os dados são distribuídos em ambos os discos por igual, isso permite atingir a velocidade de até 150 IOPS, que seria alcançada apenas com um disco de 15000 RPMs, mas o custo de aquisição para a mesma quantidade de espaço pode ser menor usando discos de 7200 RPMs.

Claro que não recomendamos usar RAID 0 numa solução empresarial, por isso veja o exemplo abaixo com RAID 10 e RAID 5:

Cálculo de IOPS com RAID



Os dois cenários apresentados são bem parecidos em espaço disponível e performance, mas a chance é que o cenário 1 com discos de 7200 RPMs seja bem mais em conta que o cenário 2 com discos de 15000 RPMs.

Existem outros fatores a serem considerados, 6 discos consomem mais energia, geram mais calor e tem maior probabilidade de quebra do que 4 discos, mas o RAID 10 utilizado é mais seguro. Em um projeto de poucos servidores o cenário 1 é sem dúvida mais vantajoso, em um projeto com centenas de servidores, o cenário 2 deve ser considerado.

Quantos IOPS preciso no meu projeto?

Essa é a pergunta chave. O ideal é que o fornecedor do sistema informe quantos IOPS são necessários por usuário conectado no sistema, daí você pode fazer a projeção de crescimento e calcular os IOPS necessários no ambiente.

Mas, o mesmo sistema, rodando em empresas similares, pode ter comportamentos diferentes por pequenas alterações, e, na prática, poucos fornecedores de sistemas estão prontos para medir e recomendar essa informação. 

Então, a melhor forma é medir a quantidade de IOPS utilizado no ambiente atual e fazer o projeto baseado nessa análise.

É possível utilizar ferramentas do próprio sistema operacional, no Windows basta usar o "Performance Monitor", e no Linux usando um utilitário como o "iotop" .

Depois de saber quantos IOPS são necessários, basta fazer o cálculo de quantos discos são necessários.


Como calcular a demanda de IOPS no storage ?

Para calcular a demanda de IOPS (Input/Output Operations Per Second) em um sistema de armazenamento (storage), você precisa considerar alguns fatores importantes:

  1. Tipo de carga de trabalho: O primeiro passo é entender o tipo de carga de trabalho que será executado no storage. Por exemplo, se é uma carga de trabalho de banco de dados, processamento de transações online (OLTP) ou análise de dados em larga escala (OLAP). Cada tipo de carga de trabalho tem diferentes requisitos de IOPS.

  2. Taxa de transferência: Além dos IOPS, é necessário considerar a taxa de transferência (throughput) necessária. A taxa de transferência é a quantidade total de dados que precisa ser lida ou gravada por segundo. Essa informação pode ser usada em conjunto com os requisitos de IOPS para dimensionar adequadamente o sistema de armazenamento.

  3. Tamanho das requisições: É importante conhecer o tamanho médio das requisições de entrada e saída. Isso afetará a quantidade de IOPS necessária para atender à carga de trabalho. Por exemplo, se as requisições forem pequenas, será necessário um maior número de IOPS para lidar com a mesma quantidade de dados em comparação com requisições maiores.

  4. Latência tolerável: A latência é o tempo decorrido entre a solicitação de uma operação de E/S e a conclusão dessa operação. É importante considerar a latência tolerável para a carga de trabalho em questão. Latências mais baixas geralmente exigem uma capacidade maior de IOPS do sistema de armazenamento.

  5. Redundância e proteção de dados: Se você estiver planejando usar alguma forma de redundância ou proteção de dados, como RAID (Redundant Array of Independent Disks), isso também afetará a demanda de IOPS. Dependendo do nível de proteção escolhido, como RAID 1, RAID 5 ou RAID 10, a demanda de IOPS pode variar.

Uma vez que você tenha todas essas informações, você pode usar as seguintes fórmulas básicas para calcular a demanda de IOPS:

  • Para carga de trabalho de leitura: IOPS de leitura = (Taxa de transferência em bytes por segundo) / (Tamanho médio das requisições em bytes)

  • Para carga de trabalho de gravação: IOPS de gravação = (Taxa de transferência em bytes por segundo) / (Tamanho médio das requisições em bytes)

Lembre-se de considerar a proporção entre leitura e gravação na sua carga de trabalho para calcular a demanda total de IOPS.

Essas fórmulas fornecem apenas uma estimativa básica e podem variar dependendo de outros fatores específicos do seu ambiente de armazenamento. É sempre recomendável consultar as especificações e documentação do fornecedor do storage ou buscar a orientação de um especialista em armazenamento para obter uma análise mais precisa e detalhada da demanda de IOPS.