Tenho um servidor Dell executando VMware ESX, com unidades SSD locais de 12 TB, memória de 1 TB, processador Xeon Gold e uma única VM debian.
Nessa VM, quando faço gravações simultâneas no disco, ou apenas executo o seguinte comando:
dd if=/dev/urandom of=/local/ssd/drive/path/largefile bs=1M count=1024
Tenho um alerta crítico de latência de disco no VSphere para essa VM.
O comando dd foi concluído com sucesso após 10 minutos.
Por que o vSphere aciona um alerta crítico que não é crítico?
Como é possível sobrecarregar unidades SSD de última geração com um único comando dd?
EDITAR:
O alerta crítico é acionado se a latência exceder 75 ms em um período de cinco minutos.
Na prática, a latência do disco parece estar em torno de 200-250 ms para essa VM:
EDITAR 2:
- Provisionamento: grosso preguiçoso zerado (não ansioso, infelizmente)
EDITAR 3:
Tentei definir um limite de IOPS nesse disco, no nível da VM (como você pode ver no gráfico abaixo).
Eu tentei 1000 IOPS, depois 800, 600, 400, 200, 100. O alerta de latência crítica do disco é acionado mesmo com 100 IOPS.
O que é estranho (como você pode ver no gráfico) é que diminuir o limite (1000 IOPS para 100 IOPS) tende a aumentar a latência do disco relatada pelo vSphere. Com limite de 100 IOPS, a latência é de 16.000 ms.
EDITAR 4:
No lado do software, tento reduzir o máximo de gravações simultâneas de arquivos de 24 para 4. A latência vai de 200ms para 100ms, mas a largura de banda de gravação vai de 100MB/seg para 50MB/seg.
EDITAR 5:
A mudança do provisionamento de zeros preguiçosos grossos para zeros ávidos grossos não mudou nada em relação à latência, sempre em 200ms
Observe que é um alerta de latência . Isso significa que o sistema emite muitos comandos de E/S, que são enfileirados .
A latência aumenta, pois se um novo comando for emitido ele é anexado ao final da fila e precisa aguardar sua vez de ser executado, o que acontece somente após todos os comandos anteriores serem executados — então esse novo comando precisa esperar muito mais do que o normal. Esse tempo de espera é chamado de latência do sistema. Imagine uma grande loja ou supermercado onde os clientes ficam na fila para finalizar a compra; quando há muitos clientes todos os caixas estarão ocupados, então a latência, o tempo que qualquer cliente fica na fila, aumenta.
Isto pode ser importante, pode não ser. Depende do que este sistema faz. Para o RDBMS on-line, que lida com cargas elevadas em tempo real, isso será inaceitável, porque todo o processamento ficará consideravelmente mais lento, reduzindo o desempenho do banco de dados até o rastreamento. Os bancos de dados são muito sensíveis à latência de armazenamento. Para o sistema interativo, como o desktop, isso é de pequena importância; iniciar um novo programa ou carregar um novo documento será visivelmente mais longo, mas outros padrões de carregamento normalmente não são afetados. Para o servidor de arquivos, isso pode ser tolerado com segurança, porque haverá atrasos muito mais longos na rede e em outros protocolos, portanto, o atraso adicional incorrido pelo armazenamento sobrecarregado não seria tão perceptível.
O VMWare não sabe que tipo de carga de trabalho executa. Assim, fica do lado seguro, alertando que o armazenamento está sobrecarregado. Agir em resposta ou não é uma decisão sua. Também permite definir limites de recursos na instância da VM para que ela não consiga sobrecarregá-la tanto.