Solucionar problemas con discos NVMe


En este documento se enumeran los errores que pueden producirse al usar discos con la interfaz Non-Volatile Memory Express (NVMe).

Puedes usar la interfaz NVMe para las unidades SSD locales y los discos persistentes (Persistent Disk o Hyperdisk de Google Cloud). Solo las series de máquinas más recientes, como Tau T2A, M3, C3, C3D y H3, usan la interfaz NVMe para Persistent Disk. Las máquinas virtuales confidenciales también usan NVMe para los discos persistentes. Todas las demás series de máquinas de Compute Engine usan la interfaz de disco SCSI para los discos persistentes.

Error de tiempo de espera de operación de E/S

Si se producen errores de tiempo de espera de E/S, es posible que la latencia supere el parámetro de tiempo de espera predeterminado de las operaciones de E/S enviadas a dispositivos NVMe.

Mensaje de error:

[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
...

Resolución:

Para solucionar este problema, aumente el valor del parámetro de tiempo de espera.

  1. Ver el valor actual del parámetro de tiempo de espera.

    1. Determina qué controlador NVMe utiliza el volumen de disco persistente o SSD local.
      ls -l /dev/disk/by-id
      
    2. Muestra el ajuste io_timeout, especificado en segundos, del disco.

      cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
      
      Sustituye lo siguiente:

      • CONTROLLER_ID: el ID del controlador del disco NVMe, por ejemplo, nvme1
      • NAMESPACE: el espacio de nombres del disco NVMe. Por ejemplo, nvme1n1.

      Si solo tienes un disco que usa NVMe, utiliza el siguiente comando:

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

  2. Para aumentar el parámetro de tiempo de espera de las operaciones de E/S enviadas a dispositivos NVMe, añade la siguiente línea al archivo /lib/udev/rules.d/65-gce-disk-naming.rules y, a continuación, reinicia la VM:

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

Los discos independientes siguen apareciendo en el sistema operativo de una instancia de proceso

En las máquinas virtuales que usan la versión del kernel de Linux de 6.0 a 6.2, es posible que las operaciones que impliquen el método instances.detachDisk de la API de Compute Engine o el comando gcloud compute instances detach-disk no funcionen como se espera. La consola Google Cloud muestra que el dispositivo se ha eliminado, los metadatos de la instancia de computación (comando compute disks describe) muestran que el dispositivo se ha eliminado, pero el punto de montaje del dispositivo y los enlaces simbólicos creados por las reglas de udev siguen visibles en el sistema operativo invitado.

Mensaje de error:

Si intentas leer datos del disco independiente en la VM, se producirán errores de E/S:

sudo head /dev/nvme0n3

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

Problema:

Las imágenes del sistema operativo que usan un kernel de Linux 6.0-6.2, pero no incluyen un backport de una corrección de NVMe, no reconocen cuando se desconecta un disco NVMe.

Resolución:

Reinicia la VM para completar el proceso de eliminación del disco.

Para evitar este problema, utiliza un sistema operativo con una versión del kernel de Linux que no lo tenga:

  • 5.19 o versiones posteriores
  • 6.3 o versiones posteriores

Puedes usar el comando uname -r en el SO invitado para ver la versión del kernel de Linux.

Siguientes pasos