Este documento enumera los errores que puede encontrar al utilizar discos con la interfaz de memoria no volátil rápida (NVMe).
Puede utilizar la interfaz NVMe para SSD locales y discos persistentes (Disco persistente o Google Cloud Hyperdisk). Solo las series de máquinas más recientes, como Tau T2A, M3, C3, C3D y H3, utilizan la interfaz NVMe para disco persistente. Las máquinas virtuales confidenciales también usan NVMe para disco persistente. Todas las demás series de máquinas Compute Engine utilizan la interfaz de disco SCSI para discos persistentes.
Error de tiempo de espera de operación de E/S
Si encuentra errores de tiempo de espera de E/S, la latencia podría estar excediendo el parámetro de tiempo de espera predeterminado para 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 resolver este problema, aumente el valor del parámetro de tiempo de espera.
Ver el valor actual del parámetro de tiempo de espera.
- Determine qué controlador NVMe utiliza el disco persistente o el volumen SSD local.
ls -l /dev/disk/by-id
Muestra la configuración
io_timeout
, especificada en segundos, para el disco. Reemplace lo siguiente:cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
-
CONTROLLER_ID
: el ID del controlador de disco NVMe, por ejemplo,nvme1
-
NAMESPACE
: el espacio de nombres del disco NVMe, por ejemplo,nvme1n1
Si solo tiene un disco que usa NVMe, use el comando:
cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
-
- Determine qué controlador NVMe utiliza el disco persistente o el volumen SSD local.
Para aumentar el parámetro de tiempo de espera para las operaciones de E/S enviadas a dispositivos NVMe, agregue la siguiente línea al archivo
/lib/udev/rules.d/65-gce-disk-naming.rules
y luego reinicie la VM:KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
Los discos desconectados todavía aparecen en el sistema operativo de una instancia informática
En las máquinas virtuales que usan la versión 6.0 a 6.2 del kernel de Linux, es posible que las operaciones que involucran el método de la API de Compute Engine instances.detachDisk
o el comando gcloud compute instances detach-disk
no funcionen como se esperaba. La consola de Google Cloud muestra el dispositivo como eliminado, los metadatos de la instancia informática ( compute disks describe
comando) muestran el dispositivo como eliminado, pero el punto de montaje del dispositivo y cualquier enlace simbólico creado por las reglas de udev aún están visibles en el sistema operativo invitado.
Mensaje de error :
Intentar leer desde el disco desconectado en la VM produce errores de E/S:
sudo head /dev/nvme0n3 head: error reading '/dev/nvme0n3': Input/output error
Asunto :
Las imágenes del sistema operativo que utilizan un kernel Linux 6.0-6.2 pero que no incluyen un puerto posterior de una solución NVMe no reconocen cuando se desconecta un disco NVMe.
Resolución :
Reinicie la VM para completar el proceso de extracción del disco.
Para evitar este problema, utilice un sistema operativo con una versión del kernel de Linux que no tenga este problema:
- 5.19 o más
- 6.3 o más reciente
Puede utilizar el comando uname -r
en el sistema operativo invitado para ver la versión del kernel de Linux.
Enlaces simbólicos no creados en máquinas virtuales C3 y C3D con SSD local
Si conecta discos SSD locales a una máquina virtual C3 o C3D, es posible que deba realizar pasos adicionales para crear los enlaces simbólicos para los discos SSD locales. Estos pasos son necesarios solo si utiliza cualquiera de las siguientes imágenes públicas ofrecidas porGoogle Cloud:
- SLES 15 SP4 y SP5
- SLES 12 SP4
Estos pasos adicionales sólo se aplican a los discos SSD locales; no necesita hacer nada con los volúmenes de disco persistente.
Las imágenes públicas de Linux enumeradas anteriormente no tienen la configuración udev
correcta para crear enlaces simbólicos para dispositivos SSD locales conectados a máquinas virtuales C3 y C3D. Es posible que las imágenes personalizadas tampoco incluyan las reglas udev
necesarias para crear enlaces simbólicos para dispositivos SSD locales conectados a máquinas virtuales C3 y C3D.
Utilice estas instrucciones para agregar reglas udev
para SUSE o imágenes personalizadas.
- Localice el directorio de reglas de udev. Suele ser
/lib/udev/rules.d
o/usr/lib/udev/rules.d
. Es posible que su imagen tenga un directorio de reglasudev
diferente. - Localice el archivo
65-gce-disk-naming.rules
en el directorio de reglas udev. Si el archivo
65-gce-disk-naming.rules
contiene la siguiente línea, su imagen admite las nuevas reglas y puede detenerse aquí:KERNEL=="nvme*n*", ATTRS{model}=="nvme_card[0-9]*",IMPORT{program}="google_nvme_id -d $tempnode"
Si la línea anterior no está presente, o si el archivo
65-gce-disk-naming.rules
no existe, reemplace el archivo existente o cree un archivo nuevo con el contenido del archivo de esta URL: https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules . Este archivo contiene el contenido actualizado del archivo65-gce-disk-naming.rules
, incluida la línea del paso anterior y otras reglas necesarias para la denominación de discos de Compute Engine. Por ejemplo:sudo curl -o 65-gce-disk-naming.rules https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules
Vaya al directorio
udev
.Localice el archivo
google_nvme_id
en el directorioudev
.Reemplace el contenido del archivo
google_nvme_id
existente o cree un archivo nuevo con el contenido de esta URL:sudo curl -o google_nvme_id https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/google_nvme_id
Asegúrese de que el archivo
google_nvme_id
sea ejecutable.sudo chmod 755 google_nvme_id
Reinicie la máquina virtual.
Verifique que los enlaces simbólicos se hayan creado correctamente.
ls -l /dev/disk/by-id/google-local-nvme-ssd*
El resultado debe enumerar la misma cantidad de enlaces que SSD locales conectados a la instancia, y cada enlace debe apuntar a una ruta de dispositivo
/dev/nvme
diferente. Por ejemplo:lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-0 -> ../../nvme0n1 lrwxrwxrwx 1 root root 13 Jul 19 22:52 /dev/disk/by-id/google-local-nvme-ssd-1 -> ../../nvme1n1
Para obtener más información sobre los nombres de dispositivos, consulte Nombres de dispositivos .
Puede verificar que las rutas del dispositivo
/dev/nvme
sean dispositivos SSD locales ejecutandolsblk
. Los dispositivos NVMe que muestran un tamaño de375G
son dispositivos SSD locales.
¿Qué sigue?
- Obtenga más información sobre el disco persistente .
- Obtenga más información sobre los SSD locales .
- Configure los discos para cumplir con los requisitos de rendimiento .
- Obtenga más información sobre los enlaces simbólicos .