Solução de problemas nos discos NVMe


Este documento lista erros que podem ser encontrados ao usar discos com a interface de memória não volátil expressa (NVMe).

É possível usar a interface NVMe para SSDs locais e discos permanentes (Persistent Disk ou Google Cloud Hyperdisk). Apenas a série de máquinas mais recente, como Tau T2A, M3, C3, C3D e H3, usa a interface NVMe para o Persistent Disk. As VMs confidenciais também NVMe para o Persistent Disk. Todas as outras séries de máquinas do Compute Engine usam a interface de disco SCSI para discos permanentes.

Erro de tempo limite da operação de E/S

Se você encontrar erros de tempo limite de E/S, a latência talvez esteja excedendo o parâmetro de tempo limite padrão para as operações de E/S enviadas aos dispositivos NVMe.

Mensagem de erro:

[1369407.045521] nvme nvme0: I/O 252 QID 2 timeout, aborting
[1369407.050941] nvme nvme0: I/O 253 QID 2 timeout, aborting
[1369407.056354] nvme nvme0: I/O 254 QID 2 timeout, aborting
[1369407.061766] nvme nvme0: I/O 255 QID 2 timeout, aborting
[1369407.067168] nvme nvme0: I/O 256 QID 2 timeout, aborting
[1369407.072583] nvme nvme0: I/O 257 QID 2 timeout, aborting
[1369407.077987] nvme nvme0: I/O 258 QID 2 timeout, aborting
[1369407.083395] nvme nvme0: I/O 259 QID 2 timeout, aborting
[1369407.088802] nvme nvme0: I/O 260 QID 2 timeout, aborting
...

Resolução:

Para resolver esse problema, aumente o valor do parâmetro de tempo limite.

  1. Veja o valor atual do parâmetro de tempo limite.

    1. Determine qual controlador do NVMe é usado pelo disco permanente ou pelo volume SSD local.
      ls -l /dev/disk/by-id
      
    2. Exiba a configuração io_timeout, especificada em segundos, para o disco.

      cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
      
      Substitua:

      • CONTROLLER_ID: o ID do controlador de disco do NVMe, por exemplo, nvme1.
      • NAMESPACE: o namespace do disco do NVMe, por exemplo, nvme1n1.

      Se você tiver apenas um disco com o NVMe, use o comando:

      cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
      

  2. Para aumentar o parâmetro de tempo limite das operações de E/S enviadas para dispositivos NVMe, adicione as seguintes linhas ao arquivo /lib/udev/rules.d/65-gce-disk-naming.rules e reinicie a VM:

    KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
    

Os discos desconectados ainda aparecem no sistema operacional de uma instância de computação

Em VMs que usam as versões 6.0 a 6.2 do kernel do Linux, as operações envolvendo o método instances.detachDisk da API Compute Engine ou o comando gcloud compute instances detach-disk podem não funcionar como esperado. O console Google Cloud mostra o dispositivo como removido, os metadados da instância de computação (comando compute disks describe) mostram o dispositivo como removido, mas o ponto de montagem do dispositivo e todos os links simbólicos criados por regras udev ainda estão visíveis no sistema operacional convidado.

Mensagem de erro:

A tentativa de ler o disco removido na VM resulta em erros de E/S:

sudo head /dev/nvme0n3

head: error reading '/dev/nvme0n3': Input/output error

Problema:

As imagens do sistema operacional que usam um kernel do Linux 6.0-6.2 e não incluem uma backport de uma correção do NVMe não reconhecem quando um disco NVMe é removido.

Resolução:

Reinicie a VM para concluir o processo de remoção do disco.

Para evitar esse problema, use um sistema operacional com a versão do kernel do Linux que não apresenta esse problema:

  • 5.19 ou mais antigo
  • 6.3 ou mais recente

Use o comando uname -r no SO convidado para visualizar a versão do kernel do Linux.

A seguir