Configuração das redes InfiniBand e RDMA
Um guia para configurar as redes InfiniBand e RDMA no Red Hat Enterprise Linux 8
Resumo
Fornecendo feedback sobre a documentação da Red Hat
Agradecemos sua contribuição em nossa documentação. Por favor, diga-nos como podemos melhorá-la. Para fazer isso:
Para comentários simples sobre passagens específicas:
- Certifique-se de que você está visualizando a documentação no formato Multi-page HTML. Além disso, certifique-se de ver o botão Feedback no canto superior direito do documento.
- Use o cursor do mouse para destacar a parte do texto que você deseja comentar.
- Clique no pop-up Add Feedback que aparece abaixo do texto destacado.
- Siga as instruções apresentadas.
Para enviar comentários mais complexos, crie um bilhete Bugzilla:
- Ir para o site da Bugzilla.
- Como Componente, use Documentation.
- Preencha o campo Description com sua sugestão de melhoria. Inclua um link para a(s) parte(s) relevante(s) da documentação.
- Clique em Submit Bug.
Capítulo 1. Entendendo InfiniBand e RDMA
InfiniBand se refere a duas coisas distintas:
- O protocolo de camada de ligação física para redes InfiniBand
- O InfiniBand Verbs API, que é uma implementação da tecnologia de acesso remoto direto à memória (RDMA)
RDMA fornece acesso à memória de um computador para a memória de outro computador sem envolver o sistema operacional de nenhum dos computadores. Esta tecnologia permite uma rede de alto rendimento e baixa latência com baixa utilização da CPU.
Em uma típica transferência de dados IP, quando uma aplicação em uma máquina envia dados para uma aplicação em outra máquina, o seguinte acontece no lado do receptor:
- O núcleo deve receber os dados.
- O núcleo deve determinar que os dados pertencem à aplicação.
- O núcleo acorda a aplicação.
- O núcleo espera que a aplicação execute uma chamada de sistema para o núcleo.
- A aplicação copia os dados do próprio espaço de memória interna do kernel para o buffer fornecido pela aplicação.
Este processo significa que a maioria do tráfego de rede é copiada através da memória principal do sistema se o adaptador host usar acesso direto à memória (DMA), ou pelo menos duas vezes. Além disso, o computador executa uma série de trocas de contexto para alternar entre o kernel e o contexto da aplicação. Ambas as trocas de contexto podem causar uma alta carga de CPU com altas taxas de tráfego e diminuir a velocidade de outras tarefas.
A comunicação RDMA ultrapassa a intervenção do kernel no processo de comunicação, ao contrário da comunicação IP normal. Isto reduz a sobrecarga da CPU. O protocolo RDMA permite que o adaptador host saiba quando um pacote chega da rede, qual aplicação deve recebê-lo e onde, no espaço de memória da aplicação, o pacote deve ser armazenado. Em vez de enviar o pacote para o kernel para ser processado e depois copiado na memória da aplicação do usuário, com InfiniBand, o adaptador host coloca o conteúdo do pacote diretamente no buffer da aplicação. Este processo requer uma API separada, a InfiniBand Verbs API, e as aplicações devem suportar esta API antes de poderem usar o RDMA.
O Red Hat Enterprise Linux 8 suporta tanto o hardware InfiniBand quanto o InfiniBand Verbs API. Além disso, o Red Hat Enterprise Linux suporta as seguintes tecnologias que permitem o uso da API InfiniBand Verbs em hardware não InfiniBand:
- Internet Wide Area RDMA Protocol (iWARP): Um protocolo de rede que implementa o RDMA sobre redes IP.
- RDMA sobre Ethernet convergente (RoCE), também conhecida como InfiniBand over Ethernet (IBoE): Um protocolo de rede que implementa as redes RDMA sobre Ethernet.
Recursos adicionais
- Para detalhes sobre a implementação de um software RoCE, veja Capítulo 2, Configuração do RoCE.
Capítulo 2. Configuração do RoCE
Esta seção explica informações de fundo sobre RDMA sobre Ethernet convergente (RoCE), bem como como alterar a versão padrão RoCE, e como configurar um adaptador de software RoCE.
Observe que existem diferentes fornecedores, tais como Mellanox, Broadcom e QLogic, que fornecem hardware RoCE.
2.1. Visão geral das versões do protocolo RoCE
O RoCE é um protocolo de rede que permite o acesso remoto direto à memória (RDMA) via Ethernet.
A seguir são apresentadas as diferentes versões RoCE:
- RoCE v1
O protocolo RoCE versão 1 é um protocolo de camada de link Ethernet com ethertype
0x8915
que permite a comunicação entre quaisquer dois hosts no mesmo domínio de transmissão Ethernet.Por default, ao usar um adaptador de rede Mellanox ConnectX-3, o Red Hat Enterprise Linux usa o RoCE v1 para o RDMA Connection Manager (RDMA_CM).
- RoCE v2
O protocolo RoCE versão 2 existe sobre o protocolo UDP sobre IPv4 ou o UDP sobre IPv6. A porta de destino UDP número 4791 é reservada para o RoCE v2.
Por default, ao usar um adaptador de rede Mellanox ConnectX-3 Pro, ConnectX-4 Lx ou ConnectX-5, o Red Hat Enterprise Linux usa o RoCE v2 para o RDMA_CM, mas o hardware suporta tanto o RoCE v1 quanto o RoCE v2.
O RDMA_CM estabelece uma conexão confiável entre um cliente e um servidor para a transferência de dados. O RDMA_CM fornece uma interface RDMA neutra em termos de transporte para estabelecer conexões. A comunicação usa um dispositivo RDMA específico, e as transferências de dados são baseadas em mensagens.
O uso de RoCE v2 no cliente e RoCE v1 no servidor não é suportado. Neste caso, configure tanto o servidor quanto o cliente para se comunicar através da RoCE v1.
Recursos adicionais
2.2. Alteração temporária da versão padrão RoCE
O uso do protocolo RoCE v2 no cliente e RoCE v1 no servidor não é suportado. Se o hardware em seu servidor suporta apenas o RoCE v1, configure seus clientes para se comunicar com o servidor usando o RoCE v1. Esta seção descreve como aplicar o RoCE v1 no cliente que usa o driver mlx5_0
para o dispositivo Mellanox ConnectX-5 Infiniband. Observe que as mudanças descritas nesta seção são apenas temporárias até que você reinicialize o host.
Pré-requisitos
- O cliente utiliza um dispositivo InfiniBand que utiliza, por padrão, o protocolo RoCE v2.
- O dispositivo InfiniBand no servidor suporta apenas o RoCE v1.
Procedimento
Criar o
/sys/kernel/config/rdma_cm/mlx5_0/
diretório:# mkdir /sys/kernel/config/rdma_cm/mlx5_0/
Exibir o modo RoCE padrão. Por exemplo, para exibir o modo para a porta 1:
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2
Mude o modo RoCE padrão para a versão 1:
# eco {\i1}"IB/RoCE v1}" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
2.3. Configurando o Soft-RoCE
Soft-RoCE é uma implementação de software de acesso remoto direto à memória (RDMA) sobre Ethernet, que também é chamado de RXE. Esta seção descreve como configurar o Soft-RoCE.
Use Soft-RoCE em hosts sem adaptadores de canal host RoCE (HCA).
Pré-requisitos
- Um adaptador Ethernet é instalado no sistema.
Procedimento
Instale os pacotes
libibverbs
,libibverbs-utils
, einfiniband-diags
:# yum instalar libibverbs libibverbs-utils infiniband-diags
Carregue o módulo do kernel
rdma_rxe
e exiba a configuração atual:# rxe_cfg start Name Link Driver Speed NMTU IPv4_addr RDEV RMTU enp7s0 yes virtio_net 1500
Acrescentar um novo dispositivo RXE. Por exemplo, para adicionar o dispositivo Ethernet
enp7s0
como um dispositivo RXE, entre:# rxe_cfg adicionar enp7s0
Exibir o status do dispositivo RXE:
# rxe_cfg status Name Link Driver Speed NMTU IPv4_addr RDEV RMTU enp7s0 yes virtio_net 1500 rxe0 1024 (3)
Na coluna
RDEV
, você vê que oenp7s0
está mapeado para o dispositivorxe0
.Opcional: liste os dispositivos RDMA disponíveis no sistema:
# ibv_devices device node GUID ------ ---------------- rxe0 505400fffed5e0fb
Alternativamente, use o utilitário
ibstat
para exibir um status detalhado:# ibstat rxe0 CA 'rxe0' CA type: Number of ports: 1 Firmware version: Hardware version: Node GUID: 0x505400fffed5e0fb System image GUID: 0x0000000000000000 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x00890000 Port GUID: 0x505400fffed5e0fb Link layer: Ethernet
Capítulo 3. Configuração do subsistema central RDMA
Esta seção descreve como configurar o serviço rdma
e aumentar a quantidade de memória que os usuários têm permissão de fixar no sistema.
3.1. Configurando o serviço rdma
O serviço rdma
gerencia a pilha RDMA no núcleo. Se o Red Hat Enterprise Linux detectar dispositivos InfiniBand, iWARP, ou RoCE, o gerente do dispositivo udev
instrui systemd
a iniciar o serviço rdma
.
Procedimento
Edite o arquivo
/etc/rdma/rdma.conf
e defina as variáveis dos módulos que você deseja habilitar parayes
. O seguinte é o padrão/etc/rdma/rdma.conf
no Red Hat Enterprise Linux 8:# Load IPoIB IPOIB_LOAD=yes # Load SRP (SCSI Remote Protocol initiator support) module SRP_LOAD=yes # Load SRPT (SCSI Remote Protocol target support) module SRPT_LOAD=yes # Load iSER (iSCSI over RDMA initiator support) module ISER_LOAD=yes # Load iSERT (iSCSI over RDMA target support) module ISERT_LOAD=yes # Load RDS (Reliable Datagram Service) network protocol RDS_LOAD=no # Load NFSoRDMA client transport module XPRTRDMA_LOAD=yes # Load NFSoRDMA server transport module SVCRDMA_LOAD=no # Load Tech Preview device driver modules TECH_PREVIEW_LOAD=no
Reinicie o serviço
rdma
:# systemctl restart rdma
3.2. Renomeando os dispositivos IPoIB
Por padrão, os nomes dos kernel IP sobre dispositivos InfiniBand (IPoIB), por exemplo, ib0
, ib1
, e assim por diante. Para evitar conflitos, a Red Hat recomenda a criação de uma regra no gerenciador de dispositivos udev
para criar nomes persistentes e significativos, tais como mlx4_ib0
.
Pré-requisitos
- Um dispositivo InfiniBand é instalado no host.
Procedimento
Mostrar o endereço do hardware do dispositivo. Por exemplo, para exibir o endereço do dispositivo chamado
ib0
, digite:# ip link show ib0 8: ib0: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 65520 qdisc pfifo_fast state UP mode DEFAULT qlen 256 link/infiniband 80:00:02:00:fe:80:00:00:00:00:00:00:00:02:c9:03:00:31:78:f2 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
Os últimos oito bytes do endereço, marcados em negrito no exemplo, são necessários para criar uma regra
udev
na próxima etapa.Edite o arquivo
/etc/udev/rules.d/70-persistent-ipoib.rules
, e anexe uma regraACTION
. Por exemplo, para configurar uma regra que renomeia o dispositivo com o endereço de hardware00:02:c9:03:00:31:78:f2
paramlx4_ib0
, anexe a seguinte linha:ACTION==="add==="add==", SUBSYSTEM==="net===="DRIVERS==="?*", ATTR{tipo}=="32=", ATTR{address===="?*00:02:c9:03:00:31:78:f2", NAME="mlx4_ib0"
Reiniciar o anfitrião:
# reinicialização
Recursos adicionais
-
Para detalhes sobre as regras
udev
, consulte a página de manualudev(7)
. -
Para detalhes, por que os primeiros 12 bytes do endereço de hardware não são utilizados na regra
udev
, ver Seção 5.2, “Entendendo os endereços de hardware IPoIB”.
3.3. Aumentar a quantidade de memória que os usuários têm permissão de fixar no sistema
As operações RDMA requerem o acionamento da memória física. Isto significa que o kernel não pode gravar memória no espaço swap. Se um usuário pinta muita memória, o sistema pode ficar sem memória, e o kernel encerra os processos para liberar mais memória. Por esta razão, o pino de memória é uma operação privilegiada.
Se os usuários não-rooticiais executam grandes aplicações RDMA, pode ser necessário aumentar a quantidade de memória que esses usuários podem fixar no sistema. Esta seção descreve como configurar uma quantidade ilimitada de memória para o grupo rdma
.
Procedimento
Como usuário do
root
, crie o arquivo/etc/security/limits.d/rdma.conf
com o seguinte conteúdo:@rdma soft memlock unlimited @rdma hard memlock unlimited
Etapas de verificação
Faça o login como membro do grupo
rdma
depois de editar o arquivo/etc/security/limits.d/rdma.conf
.Note que o Red Hat Enterprise Linux aplica as configurações atualizadas do
ulimit
quando o usuário faz o login.Use o comando
ulimit -l
para exibir o limite:$ ulimit -l unlimited
Se o comando retornar
unlimited
, o usuário pode fixar uma quantidade ilimitada de memória.
Recursos adicionais
-
Para mais detalhes sobre a limitação de recursos do sistema, consulte a página de manual
limits.conf(5)
.
Capítulo 4. Configuração de um gerenciador de sub-rede InfiniBand
Todas as redes InfiniBand devem ter um gerenciador de sub-rede em funcionamento para que a rede funcione. Isto é verdade mesmo que duas máquinas estejam conectadas diretamente, sem nenhum switch envolvido.
É possível ter mais de um gerente de sub-rede. Nesse caso, um atua como um master e outro atua como um escravo que assumirá o controle caso o master falhe.
A maioria dos interruptores InfiniBand contém um gerenciador de sub-rede incorporado. Entretanto, se você precisar de um gerenciador de sub-rede mais atualizado ou se precisar de mais controle, use o gerenciador de sub-rede OpenSM
fornecido pelo Red Hat Enterprise Linux.
4.1. Instalando o gerenciador de sub-rede OpenSM
Esta seção descreve como instalar o gerenciador de sub-rede OpenSM.
Procedimento
Instale o pacote
opensm
:# yum instalar opensm
Configure o OpenSM se a instalação padrão não for compatível com seu ambiente.
Se apenas uma porta InfiniBand estiver instalada, o host deverá atuar como o gerente da subrede mestre, e nenhuma mudança personalizada é necessária. A configuração padrão funciona sem nenhuma modificação.
Habilite e inicie o serviço
opensm
:# systemctl habilitado --agora aberto
Recursos adicionais
-
Para uma lista de opções de linha de comando para o serviço
opensm
, bem como descrições adicionais das configurações das partições, Qualidade de Serviço (QoS) e outros tópicos avançados, consulte a página de manualopensm(8)
.
4.2. Configuração do OpenSM usando o método simples
Esta seção descreve como configurar o OpenSM se você não precisar de nenhuma configuração personalizada.
Pré-requisitos
- Uma ou mais portas InfiniBand são instaladas no servidor.
Procedimento
Obter os GUIDs para os portos usando o utilitário
ibstat
:# ibstat -d device_name CA 'mlx4_0' CA type: MT4099 Number of ports: 2 Firmware version: 2.42.5000 Hardware version: 1 Node GUID: 0xf4521403007be130 System image GUID: 0xf4521403007be133 Port 1: State: Active Physical state: LinkUp Rate: 56 Base lid: 3 LMC: 0 SM lid: 1 Capability mask: 0x02594868 Port GUID: 0xf4521403007be131 Link layer: InfiniBand Port 2: State: Down Physical state: Disabled Rate: 10 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x04010000 Port GUID: 0xf65214fffe7be132 Link layer: Ethernet
NotaAlguns adaptadores InfiniBand usam o mesmo GUID para o nó, sistema e porta.
Edite o arquivo
/etc/sysconfig/opensm
e defina os GUIDs no parâmetroGUIDS
:GUIDS="GUID_1 GUID_2 "
Opcionalmente, defina o parâmetro
PRIORITY
se vários gerentes de sub-rede estiverem disponíveis em sua sub-rede. Por exemplo:PRIORIDADE=15
Recursos adicionais
-
Para informações adicionais sobre os parâmetros que você pode definir em
/etc/sysconfig/opensm
, veja a documentação nesse arquivo.
4.3. Configuração do OpenSM através da edição do arquivo opensm.conf
Esta seção descreve como configurar o OpenSM, editando o arquivo /etc/rdma/opensm.conf
. Use este método para personalizar a configuração do OpenSM se apenas uma porta InfiniBand estiver disponível.
Pré-requisitos
- Apenas uma porta InfiniBand está instalada no servidor.
Procedimento
-
Edite o arquivo
/etc/rdma/opensm.conf
e personalize as configurações de acordo com seu ambiente. Reinicie o serviço
opensm
:# systemctl restart opensm
Recursos adicionais
-
Quando você instala um pacote
opensm
atualizado, o utilitárioyum
armazena o novo arquivo de configuração do OpenSM como/etc/rdma/opensm.conf.rpmnew
. Compare este arquivo com seu arquivo personalizado/etc/rdma/opensm.conf
e incorpore manualmente as mudanças.
4.4. Configuração de múltiplas instâncias OpenSM
Esta seção descreve como configurar múltiplas instâncias de OpenSM.
Pré-requisitos
- Uma ou mais portas InfiniBand são instaladas no servidor.
Procedimento
Opcionalmente, copiar o arquivo
/etc/rdma/opensm.conf
para o arquivo/etc/rdma/opensm.conf.orig
:# cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.orig
Quando você instala um pacote
opensm
atualizado, o utilitárioyum
substitui o/etc/rdma/opensm.conf
. Com a cópia criada nesta etapa, você pode comparar o arquivo anterior com o novo para identificar as alterações e incorporá-las manualmente nos arquivosopensm.conf
específicos da instância.Crie uma cópia do arquivo
/etc/rdma/opensm.conf
:# cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.1
Para cada instância criada, anexe um número único e contínuo à cópia do arquivo de configuração.
-
Edite a cópia que você criou na etapa anterior e personalize as configurações da instância para adequá-la ao seu ambiente. Por exemplo, defina os parâmetros
guid
,subnet_prefix
, elogdir
. -
Opcionalmente, criar um arquivo
partitions.conf
com um nome exclusivo especificamente para esta sub-rede e referenciar esse arquivo no parâmetropartition_config_file
, na cópia correspondente do arquivoopensm.conf
. - Repita os passos anteriores para cada instância que você deseja criar.
Iniciar o serviço
opensm
:# systemctl start opensm
O serviço
opensm
inicia automaticamente uma instância única para cada arquivoopensm.conf.*
no diretório/etc/rdma/
. Caso existam vários arquivosopensm.conf.*
, o serviço ignora as configurações no arquivo/etc/sysconfig/opensm
, bem como no arquivo base/etc/rdma/opensm.conf
.
Recursos adicionais
-
Quando você instala um pacote
opensm
atualizado, o utilitárioyum
armazena o novo arquivo de configuração do OpenSM como/etc/rdma/opensm.conf.rpmnew
. Compare este arquivo com seus arquivos personalizados/etc/rdma/opensm.conf.\*
e incorpore manualmente as mudanças.
4.5. Criação de uma configuração de partição
Esta seção descreve como criar configurações de partição InfiniBand para OpenSM. As partições permitem aos administradores criar sub-redes em InfiniBand similares às VLANs Ethernet.
Se você definir uma partição com uma velocidade específica, como 40 Gbps, todos os hosts dentro desta partição devem suportar pelo menos esta velocidade. Se um host não atender aos requisitos de velocidade, ele não poderá aderir à partição. Portanto, defina a velocidade de uma partição para a velocidade mais baixa suportada por qualquer host com permissão para entrar na partição.
Pré-requisitos
- Uma ou mais portas InfiniBand são instaladas no servidor.
Procedimento
Edite o arquivo
/etc/rdma/partitions.conf
e configure as partições.NotaTodos os tecidos devem conter a divisória
0x7fff
, e todos os interruptores e todos os hospedeiros devem pertencer a esse tecido.Por exemplo, adicione o seguinte conteúdo ao arquivo para criar a partição padrão
0x7fff
a uma velocidade reduzida de 10 Gbps, e uma partição0x0002
com uma velocidade de 40 Gbps:# For reference: # IPv4 IANA reserved multicast addresses: # http://www.iana.org/assignments/multicast-addresses/multicast-addresses.txt # IPv6 IANA reserved multicast addresses: # http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xml # # mtu = # 1 = 256 # 2 = 512 # 3 = 1024 # 4 = 2048 # 5 = 4096 # # rate = # 2 = 2.5 GBit/s # 3 = 10 GBit/s # 4 = 30 GBit/s # 5 = 5 GBit/s # 6 = 20 GBit/s # 7 = 40 GBit/s # 8 = 60 GBit/s # 9 = 80 GBit/s # 10 = 120 GBit/s Default=0x7fff, rate=3, mtu=4, scope=2, defmember=full: ALL, ALL_SWITCHES=full; Default=0x7fff, ipoib, rate=3, mtu=4, scope=2: mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address mgid=ff12:401b::1 # IPv4 All Hosts group mgid=ff12:401b::2 # IPv4 All Routers group mgid=ff12:401b::16 # IPv4 IGMP group mgid=ff12:401b::fb # IPv4 mDNS group mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group mgid=ff12:401b::101 # IPv4 NTP group mgid=ff12:401b::202 # IPv4 Sun RPC mgid=ff12:601b::1 # IPv6 All Hosts group mgid=ff12:601b::2 # IPv6 All Routers group mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group mgid=ff12:601b::fb # IPv6 mDNS group mgid=ff12:601b::101 # IPv6 NTP group mgid=ff12:601b::202 # IPv6 Sun RPC group mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group ALL=full, ALL_SWITCHES=full; ib0_2=0x0002, rate=7, mtu=4, scope=2, defmember=full: ALL, ALL_SWITCHES=full; ib0_2=0x0002, ipoib, rate=7, mtu=4, scope=2: mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address mgid=ff12:401b::1 # IPv4 All Hosts group mgid=ff12:401b::2 # IPv4 All Routers group mgid=ff12:401b::16 # IPv4 IGMP group mgid=ff12:401b::fb # IPv4 mDNS group mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group mgid=ff12:401b::101 # IPv4 NTP group mgid=ff12:401b::202 # IPv4 Sun RPC mgid=ff12:601b::1 # IPv6 All Hosts group mgid=ff12:601b::2 # IPv6 All Routers group mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group mgid=ff12:601b::fb # IPv6 mDNS group mgid=ff12:601b::101 # IPv6 NTP group mgid=ff12:601b::202 # IPv6 Sun RPC group mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group ALL=full, ALL_SWITCHES=full;
Capítulo 5. Configurando o IPoIB
Por padrão, o InfiniBand não utiliza o protocolo de Internet (IP) para comunicação. Entretanto, o IP sobre InfiniBand (IPoIB) fornece uma camada de emulação de rede IP sobre as redes de acesso remoto direto à memória (RDMA) InfiniBand. Isto permite que aplicações existentes não modificadas transmitam dados sobre redes InfiniBand, mas o desempenho é menor do que se a aplicação usasse RDMA nativamente.
As redes Internet Wide Area RDMA Protocol (iWARP) e RoCE já são baseadas em IP. Portanto, não se pode criar um dispositivo IPoIB em cima de dispositivos IWARP ou RoCE.
5.1. Os modos de comunicação IPoIB
Você pode configurar um dispositivo IPoIB no modo Datagram
ou Connected
. A diferença é o tipo de par de filas que a camada IPoIB tenta abrir com a máquina na outra extremidade da comunicação:
No modo
Datagram
, o sistema abre um par de filas desconectado e não confiável.Este modo não suporta pacotes maiores que a Unidade Máxima de Transmissão (MTU) da camada de ligação InfiniBand. A camada IPoIB adiciona um cabeçalho IPoIB de 4 bytes no topo do pacote IP que está sendo transmitido. Como resultado, a MTU IPoIB deve ser 4 bytes menor do que a MTU da camada de link InfiniBand. Como 2048 é um MTU de camada de link InfiniBand comum, o MTU do dispositivo IPoIB comum no modo
Datagram
é 2044.No modo
Connected
, o sistema abre um par de filas conectado e confiável.Este modo permite mensagens maiores que a MTU de camada de link InfiniBand, e o adaptador do host trata da segmentação e remontagem de pacotes. Como resultado, não há limite de tamanho imposto ao tamanho das mensagens IPoIB que podem ser enviadas pelos adaptadores InfiniBand no modo
Connected
. Entretanto, os pacotes IP são limitados por causa do camposize
e dos cabeçalhos TCP/IP. Por este motivo, o MTU IPoIB no modoConnected
é de no máximo65520
bytes.O modo
Connected
tem um desempenho superior, mas consome mais memória do kernel.
Se um sistema é configurado para usar o modo Connected
, ele ainda envia tráfego multicast no modo Datagram
, porque as chaves InfiniBand e o tecido não podem passar tráfego multicast no modo Connected
. Além disso, o sistema volta ao modo Datagram
, quando se comunica com qualquer host que não esteja configurado no modo Connected
.
Ao executar a aplicação que envia dados multicast até o MTU máximo na interface, você deve configurar a interface no modo Datagram
ou configurar a aplicação para limitar o tamanho do envio de pacotes a um tamanho que caberá em pacotes do tamanho de datagramas.
5.2. Entendendo os endereços de hardware IPoIB
Os dispositivos IPoIB têm um endereço de hardware de 20 bytes que consiste das seguintes partes:
- Os primeiros 4 bytes são bandeiras e números de pares de filas.
Os próximos 8 bytes são o prefixo da sub-rede.
O prefixo padrão da sub-rede é
0xfe:80:00:00:00:00:00:00
. Após o dispositivo se conectar ao gerenciador de sub-rede, o dispositivo muda este prefixo para corresponder ao configurado no gerenciador de sub-rede.- Os últimos 8 bytes são o Identificador Global Único (GUID) da porta InfiniBand a que o dispositivo IPoIB está anexado.
Como os primeiros 12 bytes podem mudar, não os utilize nas regras do gerenciador de dispositivos udev
.
Recursos adicionais
- Para detalhes sobre como renomear os dispositivos IPoIB, veja Seção 3.2, “Renomeando os dispositivos IPoIB”.
5.3. Configuração de uma conexão IPoIB usando comandos nmcli
Este procedimento descreve como configurar uma conexão IPoIB usando os comandos nmcli
.
Pré-requisitos
- Um dispositivo InfiniBand é instalado no servidor, e o módulo do kernel correspondente é carregado.
Procedimento
Criar a conexão InfiniBand. Por exemplo, para criar uma conexão que utilize a interface
mlx4_ib0
no modo de transporteConnected
e o máximo de MTU de65520
bytes, entre:# nmcli conexão adicionar tipo infiniband con-name mlx4_ib0 ifname mlx4_ib0 modo de transporte Connected mtu 65520
Opcional: definir uma interface
P_Key
. Por exemplo, para definir0x8002
comoP_Key
interface da conexãomlx4_ib0
, entre:# nmcli conexão modificar mlx4_ib0 infiniband.p-key 0x8002
Configurar as configurações do IPv4. Por exemplo, para configurar um endereço IPv4 estático, máscara de rede, gateway padrão e servidor DNS da conexão
mlx4_ib0
, entre:# nmcli connection modify mlx4_ib0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify mlx4_ib0 ipv4.gateway '192.0.2.254' # nmcli connection modify mlx4_ib0 ipv4.dns '192.0.2.253' # nmcli connection modify mlx4_ib0 ipv4.method manual
Configurar as configurações IPv6. Por exemplo, para configurar um endereço IPv6 estático, máscara de rede, gateway padrão e servidor DNS da conexão
mlx4_ib0
, entre:# nmcli connection modify mlx4_ib0 ipv6.addresses '2001:db8:1::1/32' # nmcli connection modify mlx4_ib0 ipv6.gateway '2001:db8:1::fffe' # nmcli connection modify mlx4_ib0 ipv6.dns '2001:db8:1::fffd' # nmcli connection modify mlx4_ib0 ipv6.method manual
Ativar a conexão. Por exemplo, para ativar a conexão
mlx4_ib0
:# nmcli conexão up mlx4_ib0
5.4. Configuração de uma conexão IPoIB usando um editor de nm-conexão
Este procedimento descreve como configurar uma conexão IPoIB usando a aplicação nm-connection-editor
.
Pré-requisitos
- Um dispositivo InfiniBand é instalado no servidor, e o módulo do kernel correspondente é carregado.
-
O pacote
nm-connection-editor
está instalado.
Procedimento
Abra um terminal, e entre:
Monitor de conexão de $ nm
- Clique no botão para adicionar uma nova conexão.
-
Selecione o tipo de conexão
InfiniBand
, e clique em Criar. Na aba
InfiniBand
:- Opcionalmente, mudar o nome da conexão.
- Selecione o modo de transporte.
- Selecione o dispositivo.
- Opcional: definir uma MTU.
-
Na aba
IPv4 Settings
, configure as configurações do IPv4. Por exemplo, defina um endereço IPv4 estático, máscara de rede, gateway padrão e servidor DNS -
Na aba
IPv6 Settings
, configure as configurações IPv6. Por exemplo, configure um endereço IPv6 estático, máscara de rede, gateway padrão e servidor DNS - Clique em Salvar para salvar a conexão da equipe.
-
Fechar
nm-connection-editor
. Opcional: definir uma interface
P_Key
. Note que você deve definir este parâmetro na linha de comando, pois a configuração não está disponível emnm-connection-editor
.Por exemplo, para definir
0x8002
comoP_Key
interface da conexãomlx4_ib0
, entre:# nmcli conexão modificar mlx4_ib0 infiniband.p-key 0x8002
Capítulo 6. Teste de redes InfiniBand
Esta seção fornece procedimentos para testar as redes InfiniBand.
6.1. Teste das primeiras operações InfiniBand RDMA
Esta seção descreve como testar as operações de acesso remoto direto à memória InfiniBand (RDMA).
Esta seção se aplica apenas aos dispositivos InfiniBand. Se você usa dispositivos iWARP ou RoCE/IBoE, que são baseados em IP, veja:
Pré-requisitos
- O RDMA está configurado.
-
Os pacotes
libibverbs-utils
einfiniband-diags
estão instalados.
Procedimento
Liste os dispositivos InfiniBand disponíveis:
# ibv_devices device node GUID ------ ---------------- mlx4_0 0002c903003178f0 mlx4_1 f4521403007bcba0
Exibir as informações para um dispositivo InfiniBand específico. Por exemplo, para exibir as informações do dispositivo
mlx4_1
, entre:# ibv_devinfo -d mlx4_1 hca_id: mlx4_1 transport: InfiniBand (0) fw_ver: 2.30.8000 node_guid: f452:1403:007b:cba0 sys_image_guid: f452:1403:007b:cba3 vendor_id: 0x02c9 vendor_part_id: 4099 hw_ver: 0x0 board_id: MT_1090120019 phys_port_cnt: 2 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 2048 (4) sm_lid: 2 port_lid: 2 port_lmc: 0x01 link_layer: InfiniBand port: 2 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
Exibir o status básico de um dispositivo InfiniBand. Por exemplo, para exibir o status do dispositivo
mlx4_1
, entre:# ibstat mlx4_1 CA 'mlx4_1' CA type: MT4099 Number of ports: 2 Firmware version: 2.30.8000 Hardware version: 0 Node GUID: 0xf4521403007bcba0 System image GUID: 0xf4521403007bcba3 Port 1: State: Active Physical state: LinkUp Rate: 56 Base lid: 2 LMC: 1 SM lid: 2 Capability mask: 0x0251486a Port GUID: 0xf4521403007bcba1 Link layer: InfiniBand Port 2: State: Active Physical state: LinkUp Rate: 40 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x04010000 Port GUID: 0xf65214fffe7bcba2 Link layer: Ethernet
Use o utilitário
ibping
para pingar de um cliente para um servidor usando InfiniBand:No host que atua como um servidor, inicie
ibping
no modo servidor:# ibping -S -C mlx4_1 -P 1
Este comando usa os seguintes parâmetros:
-
-S
: Habilita o modo servidor. -
-C InfiniBand_CA_name
: Definir é o nome CA a ser usado. -
-P port_number
: Define o número da porta a ser utilizada, se a InfiniBand fornecer várias portas.
-
No anfitrião que atua como cliente, use
ibping
como segue:# ibping -c 50 -C mlx4_0 -P 1 -L 2
-
-c number
: Envia este número de pacotes para o servidor. -
-C InfiniBand_CA_name
: Definir é o nome CA a ser usado. -
-P port_number
: Define o número da porta a ser utilizada, se a InfiniBand fornecer várias portas. -
-L port_LID
: Define o identificador local (LID) a ser utilizado.
-
Recursos adicionais
-
Para mais detalhes sobre os parâmetros
ibping
, consulte a página de manualibping(8)
.
6.2. Teste de um IPoIB usando o utilitário ping
Depois de configurar o IPoIB, use o utilitário ping
para enviar pacotes ICMP para testar a conexão IPoIB.
Pré-requisitos
- Os dois anfitriões RDMA estão conectados no mesmo tecido InfiniBand com portas RDMA.
- As interfaces IPoIB em ambos os hosts são configuradas com endereços IP dentro da mesma sub-rede.
Procedimento
Use o utilitário
ping
para enviar pacotes ICMP para o adaptador InfiniBand do host remoto:# ping -c5 192.0.2.1
Este comando envia cinco pacotes ICMP para o endereço IP
192.0.2.1
.
6.3. Teste de uma rede RDMA usando qperf após IPoIB ser configurado
Este procedimento descreve exemplos de como exibir a configuração do adaptador InfiniBand e medir a largura de banda e a latência entre dois hosts usando o utilitário qperf
.
Pré-requisitos
-
O pacote
qperf
está instalado em ambos os hosts. - O IPoIB é configurado em ambos os hosts.
Procedimento
Inicie
qperf
em um dos hosts sem nenhuma opção para atuar como servidor:# qperf
Use os seguintes comandos sobre o cliente. Os comandos utilizam a porta
1
do adaptador do canal hostmlx4_0
no cliente para conectar ao endereço IP192.0.2.1
atribuído ao adaptador InfiniBand no servidor.Para exibir a configuração, entre:
qperf -v -i mlx4_0:1 192.0.2.1 conf ------------------------- conf: loc_node = rdma-dev-01.lab.bos.redhat.com loc_cpu = 12 Cores: Mixed CPUs loc_os = Linux 4.18.0-187.el8.x86_64 loc_qperf = 0.4.11 rem_node = rdma-dev-00.lab.bos.redhat.com rem_cpu = 12 Cores: Mixed CPUs rem_os = Linux 4.18.0-187.el8.x86_64 rem_qperf = 0.4.11 -------------------------
Para exibir a Conexão Confiável (RC) com largura de banda bidirecional, entre:
# qperf -v -i mlx4_0:1 192.0.2.1 rc_bi_bw ------------------------- rc_bi_bw: bw = 10.7 GB/sec msg_rate = 163 K/sec loc_id = mlx4_0 rem_id = mlx4_0:1 loc_cpus_used = 65 % cpus rem_cpus_used = 62 % cpus -------------------------
Para exibir o RC streaming de largura de banda unidirecional, entre:
# qperf -v -i mlx4_0:1 192.0.2.1 rc_bw ------------------------- rc_bw: bw = 6.19 GB/sec msg_rate = 94.4 K/sec loc_id = mlx4_0 rem_id = mlx4_0:1 send_cost = 63.5 ms/GB recv_cost = 63 ms/GB send_cpus_used = 39.5 % cpus recv_cpus_used = 39 % cpus -------------------------
Recursos adicionais
-
Para mais detalhes sobre
qperf
, consulte a página de manualqperf(1)
.