Capítulo 13. Visão geral da NVMe sobre dispositivos de tecido
Non-volatile Memory Express (NVMe)
é uma interface que permite que o utilitário de software hospedeiro se comunique com as unidades de estado sólido.
Use os seguintes tipos de transporte de tecido para configurar NVMe
sobre dispositivos de tecido:
-
NVMe
sobre tecidos usandoRemote Direct Memory Access (RDMA)
. Para informações sobre como configurar o NVMe/RDMA, ver Seção 13.1, “NVMe sobre tecidos usando RDMA”. -
NVMe
sobre tecidos usandoFibre Channel (FC)
. Para informações sobre como configurarFC-NVMe
, ver Seção 13.2, “NVMe sobre tecidos usando FC”.
Ao utilizar FC e RDMA, o acionamento em estado sólido não precisa ser local para seu sistema; ele pode ser configurado remotamente através de um controlador FC ou RDMA.
13.1. NVMe sobre tecidos usando RDMA
Em NVMe/RDMA
setup, NVMe
target e NVMe
initiator está configurado.
Como administrador do sistema, complete as tarefas nas seções seguintes para distribuir o NVMe
sobre tecidos usando RDMA
(NVMe/RDMA
):
13.1.1. Estabelecimento de um alvo NVMe/RDMA usando configfs
Use este procedimento para configurar um alvo NVMe/RDMA
usando configfs
.
Pré-requisitos
-
Verifique se você tem um dispositivo de bloqueio para atribuir ao subsistema
nvmet
.
Procedimento
Criar o subsistema
nvmet-rdma
:# modprobe nvmet-rdma # mkdir /sys/kernel/config/nvmet/subsystems/testnqn # cd /sys/kernel/config/nvmet/subsystems/testnqn
Substituir testnqn pelo nome do subsistema.
Permitir que qualquer anfitrião se conecte a este alvo:
# echo 1 > attr_allow_any_host
Configurar um
namespace
:# mkdir namespaces/10 # cd namespaces/10
Substitua 10 pelo número do namespace
Estabeleça um caminho para o dispositivo
NVMe
:#echo -n /dev/nvme0n1 > device_path
Habilite o espaço de nomes:
# echo 1 > habilitar
Criar um diretório com uma porta
NVMe
:# mkdir /sys/kernel/config/nvmet/ports/1 # cd /sys/kernel/config/nvmet/ports/1
Mostrar o endereço IP de mlx5_ib0:
# ip addr show mlx5_ib0 8: mlx5_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4092 qdisc mq state UP group default qlen 256 link/infiniband 00:00:06:2f:fe:80:00:00:00:00:00:00:e4:1d:2d:03:00:e7:0f:f6 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff inet 172.31.0.202/24 brd 172.31.0.255 scope global noprefixroute mlx5_ib0 valid_lft forever preferred_lft forever inet6 fe80::e61d:2d03:e7:ff6/64 scope link noprefixroute valid_lft forever preferred_lft forever
Defina o endereço de transporte para a meta:
# echo -n 172.31.0.202 > addr_traddr
Definir
RDMA
como o tipo de transporte:# echo rdma > addr_trtype # echo 4420 > addr_trsvcid
Defina a família de endereços para o porto:
# echo ipv4 > addr_adrfam
Criar um elo suave:
# ln -s /sys/kernel/config/nvmet/subsystems/testnqn /sys/kernel/config/nvmet/ports/1/subsystems/testnqn
Etapas de verificação
Verifique se o alvo
NVMe
está escutando na porta determinada e pronto para pedidos de conexão:# dmesg | grep "enabling port" [ 1091.413648] nvmet_rdma: enabling port 1 (172.31.0.202:4420)
Recursos adicionais
-
A página do homem
nvme
.
13.1.2. Estabelecendo o alvo NVMe/RDMA usando nvmetcli
Use o site nvmetcli para editar, visualizar e iniciar a meta NVMe
. O nvmetcli
fornece uma linha de comando e uma opção de shell interativa. Use este procedimento para configurar o alvo NVMe/RDMA
por nvmetcli
.
Pré-requisitos
-
Verifique se você tem um dispositivo de bloqueio para atribuir ao subsistema
nvmet
. -
Executar as operações do
nvmetcli
como usuário root.
Procedimento
Instale o pacote
nvmetcli
:# yum instalar nvmetcli
Baixe o arquivo
rdma.json
# wget http://git.infradead.org/users/hch/nvmetcli.git/blob_plain/0a6b088db2dc2e5de11e6f23f1e890e4b54fee64:/rdma.json
-
Edite o arquivo
rdma.json
e altere o valortraddr
para 172.31.0.202. Configure o alvo carregando o arquivo de configuração do alvo NVMe:
# nvmetcli restore rdma.json
Se o nome do arquivo de configuração do alvo NVMe não for especificado, o nvmetcli
usa o arquivo /etc/nvmet/config.json
.
Etapas de verificação
Verifique se o alvo
NVMe
está escutando na porta determinada e pronto para pedidos de conexão:#dmesg | tail -1 [ 4797.132647] nvmet_rdma: enabling port 2 (172.31.0.202:4420)
(Opcional) Limpar o alvo atual da NVMe:
# nvmetcli clear
Recursos adicionais
-
A página do homem
nvmetcli
. -
A página do homem
nvme
.
13.1.3. Configuração de um cliente NVMe/RDMA
Use este procedimento para configurar um cliente NVMe/RDMA
usando a ferramenta de linha de comando de gerenciamento NVMe (nvme-cli
).
Procedimento
Instale a ferramenta
nvme-cli
:# yum instalar nvme-cli
Carregue o módulo
nvme-rdma
se não estiver carregado:# modprobe nvme-rdma
Descubra os subsistemas disponíveis na meta
NVMe
:# nvme discover -t rdma -a 172.31.0.202 -s 4420 Discovery Log Number of Records 1, Generation counter 2 =====Discovery Log Entry 0====== trtype: rdma adrfam: ipv4 subtype: nvme subsystem treq: not specified, sq flow control disable supported portid: 1 trsvcid: 4420 subnqn: testnqn traddr: 172.31.0.202 rdma_prtype: not specified rdma_qptype: connected rdma_cms: rdma-cm rdma_pkey: 0x0000
Conectar com os subsistemas descobertos:
# nvme connect -t rdma -n testnqn -a 172.31.0.202 -s 4420 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 464.8G 0 part ├─rhel_rdma--virt--03-root 253:0 0 50G 0 lvm / ├─rhel_rdma--virt--03-swap 253:1 0 4G 0 lvm [SWAP] └─rhel_rdma--virt--03-home 253:2 0 410.8G 0 lvm /home nvme0n1 #cat /sys/class/nvme/nvme0/transport rdma
Substituir testnqn pelo nome do sub-sistema
NVMe
.Substituir 172.31.0.202 pelo endereço IP de destino.
Substituir 4420 pelo número da porta.
Etapas de verificação
Liste os dispositivos NVMe que estão atualmente conectados:
# lista nvme
(Opcional) Desconectar do alvo:
# nvme disconnect -n testnqn NQN:testnqn disconnected 1 controller(s) # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 464.8G 0 part ├─rhel_rdma--virt--03-root 253:0 0 50G 0 lvm / ├─rhel_rdma--virt--03-swap 253:1 0 4G 0 lvm [SWAP] └─rhel_rdma--virt--03-home 253:2 0 410.8G 0 lvm /home
Recursos adicionais
-
A página do homem
nvme
. - Nvme-cli Repositório Github