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.
Veja o valor atual do parâmetro de tempo limite.
- Determine qual controlador do NVMe é usado pelo disco permanente ou pelo
volume SSD local.
ls -l /dev/disk/by-id
Exiba a configuração
io_timeout
, especificada em segundos, para o disco. Substitua:cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
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
- Determine qual controlador do NVMe é usado pelo disco permanente ou pelo
volume SSD local.
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 do Google Cloud mostra o dispositivo como removido, os metadados da instância da 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.
Links simbólicos não criados em VMs C3 e C3D com SSD local
Se você anexar discos SSD locais a uma VM C3 ou C3D, talvez seja necessário seguir mais etapas a fim de criar os links simbólicos para os discos SSD locais. Essas etapas serão necessárias apenas ao usar uma das seguintes imagens públicas oferecidas pelo Google Cloud:
- SLES 15 SP4 e SP5
- SLES 12 SP4
Essas etapas extras só se aplicam a discos SSD locais. Não é preciso fazer nada em relação aos volumes do Persistent Disk.
As imagens públicas do Linux listadas anteriormente não têm a configuração
udev
correta a fim de criar links simbólicos para dispositivos SSD locais anexados às
VMs C3 e C3D. As imagens personalizadas também podem não incluir as regras udev
necessárias para
criar links simbólicos para dispositivos SSD locais anexados a VMs C3D.
Use estas instruções para adicionar regras udev
para imagens personalizadas ou do SUSE.
- Localize o diretório de regras udev. Geralmente, é
/lib/udev/rules.d
ou/usr/lib/udev/rules.d
. A imagem pode ter um diretório de regrasudev
diferente. - Localize o arquivo
65-gce-disk-naming.rules
no diretório de regras udev. Se o arquivo
65-gce-disk-naming.rules
contiver a linha a seguir, a imagem será compatível com as novas regras, e você poderá parar por aqui:KERNEL=="nvme*n*", ATTRS{model}=="nvme_card[0-9]*",IMPORT{program}="google_nvme_id -d $tempnode"
Se a linha anterior não estiver presente ou se o arquivo
65-gce-disk-naming.rules
não existir, substitua o arquivo existente ou crie um novo com o conteúdo deste URL: https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/rules.d/65-gce-disk-naming.rules. Esse arquivo contém o conteúdo atualizado do arquivo65-gce-disk-naming.rules
, incluindo a linha da etapa anterior e outras regras necessárias para a nomeação do disco do Compute Engine. Exemplo: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
Acesse o diretório
udev
.Localize o arquivo
google_nvme_id
no diretórioudev
.Substitua o conteúdo do arquivo
google_nvme_id
atual ou crie um novo com o conteúdo deste URL:sudo curl -o google_nvme_id https://raw.githubusercontent.com/GoogleCloudPlatform/guest-configs/20230630.00/src/lib/udev/google_nvme_id
Verifique se o arquivo
google_nvme_id
é executável.sudo chmod 755 google_nvme_id
Reinicialize a VM.
Verifique se os links simbólicos foram criados.
ls -l /dev/disk/by-id/google-local-nvme-ssd*
A saída deve listar o mesmo número de links que há SSDs locais anexados à instância, e cada link precisa apontar para um caminho de dispositivo
/dev/nvme
diferente. Exemplo: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 ver mais informações sobre nomes de dispositivos, consulte Nomenclatura de dispositivos.
Execute
lsblk
para verificar se os caminhos do dispositivo/dev/nvme
são dispositivos SSD locais. Os dispositivos NVMe que mostram375G
no tamanho são dispositivos SSD locais.
A seguir
- Saiba mais sobre o Persistent Disk.
- Saiba mais sobre SSDs locais.
- Configurar discos para atender aos requisitos de desempenho.
- Saiba mais sobre links simbólicos.