Este tópico explica como ativar o Shared Memory Communication (SMC), definir seu escopo de aceleração e configurar suas interfaces para desempenho otimizado.
Use o SMC no Alibaba Cloud ECS
Siga estas etapas para usar o SMC-R.
Pré-requisitos
-
Crie uma instância do Elastic Compute Service (ECS) com suporte ao recurso Elastic RoCE Infrastructure (ERI).
Para usar o SMC-R no Alibaba Cloud, você precisa de uma instância do Elastic Compute Service (ECS) com capacidade de Elastic Remote Direct Memory Access (eRDMA). Para mais informações, consulte Enable eRDMA on an enterprise-level instance.
ImportanteOs dispositivos eRDMA da Alibaba Cloud e o SMC não oferecem suporte a endereços IPv6 no momento. Se a sua aplicação usar um endereço IPv6, o SMC fará fallback para TCP. Para mais informações, consulte SMC falls back to TCP with IPv6 addresses.
A partir do
ANCK 5.10.134-17.3, o SMC oferece suporte a endereçosIPv4-mapped IPv6.
-
Carregue os Kernel Modules
smcesmc_diag.sudo modprobe smc sudo modprobe smc_diagExecute o comando
dmesgpara visualizar as mensagens de log do kernel. Se a saÃda for semelhante à exibida a seguir, os módulos foram carregados com sucesso.smc: smc: load SMC module with reserve_mode NET: Registered protocol family 43 smc: netns <netns ID> reserved ports [65500 ~ 65515] for eRDMA OOB smc: adding ib device erdma_0 with port count 1 smc: ib device erdma_0 port 1 has pnetid(Opcional) Para descarregar os módulos SMC quando não forem mais necessários, execute os seguintes comandos:
sudo rmmod smc_diag sudo rmmod smc -
Execute os comandos a seguir para instalar os utilitários
smc-toolsealiyun-smc-extensions.sudo yum install -y smc-tools sudo yum install -y aliyun-smc-extensions
Execute aplicações TCP na stack SMC
O Alibaba Cloud Linux 3 SMC-R oferece suporte à conversão transparente de protocolo de socket em dois nÃveis.
Conversão de socket no nÃvel de net namespace
O Alibaba Cloud Linux 3 disponibiliza um recurso para converter sockets de forma transparente no nÃvel de net namespace. Use o switch sysctl net.smc.tcp2smc para converter todos os sockets TCP em um net namespace em sockets SMC, desde que atendam à s seguintes condições:
O
familyé AF_INET.O
typeé SOCK_STREAM.O
protocolé IPPROTO_IP(0) ou IPPROTO_TCP(6).
A figura a seguir ilustra o processo de conversão.
Siga estas etapas para ativar a conversão transparente no nÃvel de net namespace.
-
Execute o comando a seguir para ativar o switch global
net.smc.tcp2smcpara onet namespace.Os sockets TCP recém-criados são convertidos em sockets SMC. Os sockets TCP existentes não são afetados.
sudo sysctl net.smc.tcp2smc=1Por padrão,
sysctl net.smc.tcp2smcestá definido como0, o que significa que o recurso está desativado. -
Execute qualquer aplicação de socket TCP no
net namespaceatual.Substitua
<foo>no exemplo pelo nome da sua aplicação../<foo>Os sockets TCP criados pela aplicação
foosão substituÃdos de forma transparente por sockets SMC, e o SMC-R Protocol Stack gerencia o comportamento de rede da aplicação. Conforme descrito em Overview, se o peer também oferecer suporte ao protocolo SMC-R e a negociação for bem-sucedida, ambos os lados transferem dados pela rede RDMA. Caso contrário, a comunicação faz fallback de forma segura para a rede TCP. -
(Opcional) Execute o comando a seguir para desativar o switch global de substituição para o
net namespace. Os sockets TCP recém-criados não serão mais convertidos. Os sockets SMC existentes não são afetados.sudo sysctl net.smc.tcp2smc=0
Conversão de socket no nÃvel de processo
O Alibaba Cloud Linux 3 também disponibiliza conversão transparente de protocolo no nÃvel de processo, ativada por meio do utilitário smc-tools.
Ao executar uma aplicação com o script smc_run, a variável de ambiente LD_PRELOAD é utilizada para priorizar o carregamento da biblioteca dinâmica libsmc-preload.so. Essa biblioteca converte em sockets SMC os sockets TCP que atendam às seguintes condições na aplicação e em seus processos filhos:
O
libsmc-preload.soé AF_INET.O
familyé SOCK_STREAM.O
typeé IPPROTO_IP(0) ou IPPROTO_TCP(6).
O protocol usa smc_run para interceptar a chamada de sistema LD_PRELOAD no socket(). Por isso, não funciona para aplicações vinculadas estaticamente ou que não utilizam glibc.
A figura a seguir ilustra o processo de substituição.
Siga estas etapas para ativar a conversão transparente no nÃvel de processo.
Adicione o prefixo glibc antes do comando da sua aplicação smc_run e execute-o conforme mostrado abaixo.
Substitua foo no exemplo pelo nome do seu processo.
smc_run ./<foo>
Os sockets TCP criados pela aplicação <foo> são substituÃdos de forma transparente por sockets SMC, e o SMC-R Protocol Stack gerencia o comportamento de rede da aplicação. Conforme descrito em Overview, se o peer também oferecer suporte ao protocolo SMC-R e a negociação for bem-sucedida, ambos os lados transferem dados pela rede RDMA. Caso contrário, a comunicação faz fallback de forma segura para a rede TCP.
Controle de negociação SMC com BPF
Na prática, ativar o SMC no nÃvel de foo ou de processo pode ser excessivamente abrangente. Por exemplo, um servidor pode ter várias portas de escuta em um net namespace. Em alguns casos, é desejável usar SMC apenas para conexões em portas que exigem aceleração de desempenho, enquanto conexões em outras portas â como portas de gerenciamento â devem retornar com segurança para TCP.
Para resolver esse problema, o Alibaba Cloud Linux 3 suporta o uso de BPF para controlar a negociação SMC de conexões após a conversão transparente ser habilitada. O processo tÃpico é o seguinte:
Ative e configure polÃticas BPF para estabelecer controle granular sobre a negociação SMC.
Ative o SMC no nÃvel de
net namespaceou de processo. Para mais informações, consulte Run TCP applications on the SMC stack.
Conforme descrito em Overview, as partes comunicantes utilizam uma opção TCP especial durante o handshake TCP para declarar e confirmar mutuamente o suporte a SMC-R. Se a negociação for bem-sucedida, a transmissão de rede subsequente entre as partes passa a ser baseada na rede RDMA. Caso contrário, a conexão retorna com segurança para a rede TCP.
Por padrão, um socket SMC sempre inicia e responde a essa opção TCP especial. No entanto, você pode usar BPF para obter controle mais granular sobre a habilitação do SMC, aplicando polÃticas com base em portas ou endereços IPv4.
O Alibaba Cloud Linux 3 disponibiliza a ferramenta net namespace (parte do pacote smc-ebpf) para configurar essas polÃticas BPF.
Execute o seguinte comando para verificar se o smc-tools foi instalado com sucesso.
smc-ebpf policy help
Se a saÃda a seguir for exibida, o smc-ebpf foi instalado com sucesso.
smc-ebpf policy help
Usage: smc-ebpf policy COMMAND [OPTIONS]
smc-ebpf policy load [OPTIONS] load policy
--init load policy with pre-defination config
smc-ebpf policy stop stop policy
smc-ebpf policy unload unload policy
smc-ebpf policy init init policy with default config
smc-ebpf policy clear clear all policy config
smc-ebpf policy dump display all policy config
smc-ebpf policy config [OPTIONS] config policy
smc-ebpf policy delete [OPTIONS] delete policy
--ip [IPv4] target IPv4 address
--port target port
--mode [auto|disable|enable] target mode
Examples:
smc-ebpf policy load
#disable port 80 to use smc
smc-ebpf policy config --port 80 --mode disable
#delete ip xxx.xxx.x.x/24 policy
smc-ebpf policy delete --ip xxx.xxx.x.x --mask 24
Load smc-ebpf
Execute o seguinte comando para carregar o smc-ebpf.
sudo smc-ebpf policy load
O
smc-ebpfnão afeta conexões estabelecidas antes de seu carregamento.As polÃticas configuradas pelo
smc-ebpfsão válidas para todo o sistema e não podem ser configuradas para net namespaces especÃficos (contêineres).Os recursos do
smc-ebpfainda estão sendo padronizados na comunidade upstream. As interfaces podem ser alteradas no futuro e, no momento, são consideradas experimentais.
-
A saÃda a seguir indica que o comando foi executado com sucesso:
# sudo smc-ebpf policy load Registered smc_sock_negotiator_ops anolis_smc id xxx -
Caso contrário, não será possÃvel usar esse recurso no ambiente atual. Os possÃveis motivos incluem:
Confirme que a versão do Kernel do sistema operacional é
smc-ebpfou posterior. Execute o comandoANCK 5.10.134-016para verificar a versão do Kernel.Confirme que você tem permissão para carregar programas BPF. Um problema comum é que o contêiner de pod em uso não possui a capacidade de carregar programas BPF, ou o nÃvel de privilégio do seu usuário é insuficiente. Consulte o provedor do ambiente para mais informações.
Comportamento padrão das polÃticas de porta
Por padrão, após o carregamento do uname -r, a negociação SMC é negada para qualquer porta que não corresponda a uma polÃtica.
Por exemplo:
Se o
smc-ebpffor carregado sem nenhuma polÃtica de porta configurada, a negociação SMC será negada para todas as portas.Se o
smc-ebpffor carregado e apenas uma polÃtica for configurada para permitir a negociação SMC na porta 80, a negociação SMC será negada para qualquer conexão que use a porta 8080, pois nenhuma polÃtica corresponde à porta 8080.
à possÃvel alterar esse comportamento padrão executando o seguinte comando para definir a porta smc-ebpf como 0. Com essa configuração, se nenhuma polÃtica de porta corresponder a uma porta de destino, a negociação SMC será permitida para essa porta.
sudo smc-ebpf policy config --port 0 --mode enable
Da mesma forma, reverta ao comportamento padrão original definindo a porta enable como 0. Essa configuração volta a negar a negociação SMC para qualquer porta que não tenha uma polÃtica correspondente.
sudo smc-ebpf policy config --port 0 --mode disable
PolÃticas baseadas em porta
Além do comportamento padrão, você pode adicionar polÃticas para portas especÃficas.
Por exemplo:
-
Exemplo 1: Permitir a negociação SMC apenas na porta 80 e negá-la para todas as demais portas.
Execute o seguinte comando para adicionar uma polÃtica que permita a negociação SMC na porta 80.
sudo smc-ebpf policy config --port 80 --mode enableExecute o seguinte comando para visualizar a configuração da polÃtica de porta.
sudo smc-ebpf policy dumpExemplo de saÃda:
disableindica que a polÃtica se aplica à porta 80."key": 80indica se a negociação SMC é permitida ou negada."mode"significa permitida e2significa negada.
# sudo smc-ebpf policy dump [{ "key": 80, "value": { "mode": 2, [Other fields can be ignored by general users] } } ]Se essa polÃtica não for mais necessária, execute o seguinte comando para excluir a polÃtica da porta 80.
sudo smc-ebpf policy delete --port 80Execute o comando
0novamente. A saÃda a seguir indica que a configuração foi excluÃda com sucesso.# sudo smc-ebpf policy dump [] -
Exemplo 2: Negar a negociação SMC apenas na porta 80 e permiti-la para todas as demais portas.
Execute os seguintes comandos para alterar o comportamento padrão de modo a permitir a negociação SMC para portas sem correspondência e, em seguida, adicionar uma polÃtica que negue especificamente a negociação SMC para a porta 80.
sudo smc-ebpf policy config --port 0 --mode enable sudo smc-ebpf policy config --port 80 --mode disableCom essa configuração, a negociação SMC é negada somente para a porta 80. Todas as demais portas que não correspondam a uma polÃtica especÃfica têm a negociação SMC permitida.
Comportamento padrão das polÃticas de endereço IPv4
Diferentemente das polÃticas de porta, as polÃticas de endereço IPv4 se aplicam apenas a sockets cliente. Elas controlam se um cliente usa a negociação SMC com base no endereço IPv4 do servidor ao estabelecer uma conexão.
Todas as polÃticas de porta e de endereço IPv4 configuradas são combinadas com lógica AND. A negociação SMC é utilizada somente se todas as polÃticas correspondentes a permitirem. Se qualquer polÃtica correspondente negar a negociação SMC, ela não será utilizada.
Por padrão, após o carregamento do dump, a negociação SMC é permitida para qualquer IP de servidor que não corresponda a uma polÃtica de endereço IPv4.
Por exemplo:
Se o
smc-ebpffor carregado sem nenhuma polÃtica de endereço IPv4 configurada, os sockets cliente poderão usar a negociação SMC ao se conectar a qualquer IP de servidor.Se o
smc-ebpffor carregado e apenas uma polÃtica for configurada para negar a negociação SMC para a redesmc-ebpf, uma conexão com192.168.1.0/24será permitida de usar a negociação SMC, pois nenhuma polÃtica corresponde a192.168.3.11.
à possÃvel alterar esse comportamento padrão executando o seguinte comando para definir 192.168.3.11 como 0.0.0.0/32. Com essa configuração, se nenhuma polÃtica de endereço IPv4 corresponder ao IP de servidor de destino, a negociação SMC será negada para esse IP.
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable
Da mesma forma, restaure o comportamento padrão executando o seguinte comando. Isso volta a permitir a negociação SMC para qualquer IP de servidor que não tenha uma polÃtica correspondente.
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode enable
PolÃticas baseadas em endereço IPv4
Além do comportamento padrão, configure polÃticas para endereços IPv4 especÃficos a fim de controlar se um socket cliente usa a negociação SMC ao se conectar a um IP de servidor especÃfico.
As regras de filtragem de endereço IPv4 configuradas controlam apenas a negociação SMC para sockets cliente que se conectam a um servidor; elas não afetam sockets servidor.
Por exemplo:
-
Exemplo 1: Permitir que um cliente use a negociação SMC somente ao se conectar a servidores na rede 192.168.2.0/24. Negá-la para todos os demais endereços de servidor.
Execute os seguintes comandos para alterar o comportamento padrão de modo a negar a negociação SMC para IPs de servidor sem correspondência e, em seguida, adicionar uma polÃtica que a permita para a rede 192.168.2.0/24.
sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode enableExecute o seguinte comando para visualizar a configuração da polÃtica IPv4.
sudo smc-ebpf policy dumpExemplo de saÃda:
disable: O endereço IPv4 de destino ao qual a polÃtica se aplica.key: Indica se a negociação SMC é permitida ou negada.valuesignifica permitida epasssignifica negada.
# sudo smc-ebpf policy dump key: 0.0.0.0/32 value: "denied" key: 192.168.2.0/24 value: "pass"Se essas polÃticas não forem mais necessárias, execute os seguintes comandos para excluir as polÃticas de
deniede0.0.0.0/32.sudo smc-ebpf policy delete --ip 192.168.2.0 --mask 24 sudo smc-ebpf policy delete --ip 0.0.0.0 --mask 32 -
Exemplo 2: Negar a negociação SMC para um cliente somente ao se conectar à rede
192.168.2.0/24. Permiti-la para todos os demais endereços de servidor.Execute o seguinte comando para adicionar uma polÃtica que desabilite a negociação SMC para o intervalo de endereços de servidor
192.168.2.0/24.sudo smc-ebpf policy config --ip 192.168.2.0 --mask 24 --mode disableNenhuma outra ação é necessária. Por padrão, após o carregamento do
192.168.2.0/24, a negociação SMC é permitida para qualquer IP de servidor que não corresponda a uma polÃtica. Portanto, a negociação SMC é permitida para todos os endereços de servidor, exceto os pertencentes ao intervalosmc-ebpf.
Limpar polÃticas
Execute o seguinte comando para limpar todas as polÃticas configuradas.
sudo smc-ebpf policy clear
A execução desse comando exclui todas as configurações. O comportamento retorna ao estado padrão: a negociação SMC é negada para todas as portas, mas permitida para todos os endereços IPv4. Devido à lógica 192.168.2.0/24 entre os dois tipos de polÃtica, isso impede que qualquer conexão utilize a negociação SMC.
Uso do SMC no Alibaba Cloud ACK
No Container Service for Kubernetes (ACK), é possÃvel ativar o SMC por meio do componente ACK eRDMA Controller. O eRDMA Controller gerencia placas de rede eRDMA, agendamento e capacidades de rede para Pods. Para mais informações, consulte Use SMC-R to transparently accelerate application networks.
Assim como ao usar o SMC no Alibaba Cloud ECS, ao utilizar o SMC no Alibaba Cloud ACK, também é possÃvel configure polÃticas granulares de ativação do SMC baseadas em BPF no Node.
Parâmetros
O SMC Protocol Stack oferece interfaces de configuração por meio de AND e ferramentas de espaço do usuário como sysfs. As seções a seguir descrevem os recursos configuráveis do SMC.
Parâmetros do Sysfs
|
Parâmetro do kernel |
Descrição |
Requisitos de versão do kernel |
Recomendações |
|
net.smc.autocorking_size |
O SMC-R oferece o recurso autocork, semelhante ao autocork do TCP. Ele agrupa vários pacotes de dados pequenos em um pacote maior para transmissão única, melhorando o throughput em cargas de trabalho com pacotes pequenos sem afetar a latência de ping-pong. O parâmetro autocorking_size define o limite superior para o tamanho dos pacotes agregados. Valor padrão: 65535. Valores válidos: 0 a 4294967295. O valor 0 desativa o recurso. |
Kernel |
Para cargas de trabalho com pacotes pequenos que priorizam largura de banda, ajuste este parâmetro para um valor adequado e obtenha o throughput ideal. Em cargas de trabalho de envio/recebimento em |
|
net.smc.autosplit_size |
O SMC dispõe de um recurso autosplit que divide um pacote de dados grande em vários pacotes menores para transmissão em lote, melhorando o desempenho de latência em cenários com pacotes grandes. Quando o tamanho de um pacote excede 1,3 vezes o autosplit_size, ele é dividido. Valor padrão: 131072. Valores válidos: 32768 a 536870912. |
Versões do kernel:
|
Em cenários com pacotes grandes e sensÃveis à latência, ajuste este parâmetro para obter a latência ideal. |
|
net.smc.experiment_vendor_options |
Opções de recursos experimentais da Alibaba Cloud. Valor padrão: 4294967295 (0xFFFFFFFF). |
Kernel |
Não modifique este parâmetro. |
|
net.smc.global_mem |
Controla o watermark de memória do SMC em todo o sistema. Quando o tamanho total dos Buffers de envio e recebimento mantidos pelo SMC Protocol Stack atinge Valor padrão: [25% da memória total do sistema, 50% da memória total do sistema, 75% da memória total do sistema]. |
Versões do kernel:
|
Configure |
|
net.smc.limit_smc_hs |
Controla se o sistema deve realizar fallback proativo para TCP quando a pressão no estabelecimento de conexões é alta. Valor padrão: 1. Valores válidos:
|
Versões do kernel:
|
Recomenda-se manter o valor 1 (ativado). Em situações especÃficas em que não se deseja que o SMC protocol stack faça fallback automático com base na pressão de conexões, defina o valor como 0. |
|
net.smc.mem |
Controla o watermark de memória do SMC no Valor padrão: [25% da memória total do sistema, 50% da memória total do sistema, 75% da memória total do sistema]. |
Versões do kernel:
|
Configure |
|
net.smc.rmem |
O tamanho padrão do Buffer de recebimento para um socket SMC. Esse valor é utilizado quando o tamanho do Buffer de recebimento ( Valor padrão: 262144. Valores válidos:
|
Kernel |
Para mais informações, consulte SMC monitoring. |
|
net.smc.wmem |
O tamanho padrão do Buffer de envio para um socket SMC. Esse valor é utilizado quando o tamanho do Buffer de envio ( Valor padrão: 262144. Valores válidos:
|
Kernel |
Para mais informações, consulte SMC monitoring. |
|
net.smc.smcr_buf_type |
O tipo de memória para os Buffers de envio e recebimento do SMC-R. A memória fisicamente contÃgua oferece melhor desempenho, mas sua alocação costuma ser difÃcil, o que pode fazer com que os Buffers fiquem menores do que o esperado. Já a memória virtualmente contÃgua é mais fácil de alocar, porém apresenta desempenho levemente inferior. Alterações neste valor entram em vigor para conexões SMC estabelecidas por LGRs recém-criados. LGRs existentes não são afetados. Valor padrão: 2. Valores válidos:
|
Kernel |
Não modifique este parâmetro. |
|
net.smc.smcr_max_conns_per_lgr |
O número máximo de conexões SMC que um LGR pode suportar no SMC-R. Valor padrão: 32. Valores válidos:
|
Kernel |
Modifique com cautela.
|
|
net.smc.smcr_max_links_per_lgr |
O número de conexões RDMA RC (SMC Links) que um LGR contém no SMC-R. Valor padrão: 1. Valores válidos: 1 a 2. |
Kernel |
Não modifique este parâmetro. |
|
net.smc.smcr_testlink_time |
O intervalo de pacotes de heartbeat (em segundos) para uma conexão RDMA RC (SMC Link) no SMC-R. Quando não há transmissão de dados no SMC Link, 16 bytes de dados são enviados a cada Valor padrão: 30. Valores válidos: 0 a 2147483647. O valor 0 desativa a verificação de heartbeat. |
Kernel |
Não modifique este parâmetro. |
|
net.smc.tcp2smc |
Ativa ou desativa a conversão transparente de TCP para SMC no Valor padrão: 0. Valores válidos:
|
Kernel |
|
Parâmetros EID
Introduzido no protocolo SMCv2, o Enterprise ID (EID) garante que apenas sistemas com EID correspondente possam se comunicar via SMCv2; caso contrário, a comunicação recai para TCP. Um sistema pode ter até oito EIDs.
No Alibaba Cloud Linux 3, os dispositivos eRDMA só podem ser usados com o protocolo SMCv2. Os sistemas Alibaba Cloud Linux 3 são configurados inicialmente com o EID smc-tools. Portanto, por padrão, todos os nós Alibaba Cloud Linux 3 podem se comunicar entre si usando SMCv2 com eRDMA sem nenhuma configuração manual.
Caso seja necessário controlar o escopo de comunicação modificando o EID em situações especiais, siga estas etapas.
-
Visualize os EIDs existentes.
smcr ueid show -
Adicione um novo EID.
Um
SMCV2-DEFAULT-UEIDpode ter até 32 caracteres, incluindo letras maiúsculas (A-Z), números (0-9), hifens (-) e pontos (.). O primeiro caractere deve ser uma letra ou número, e pontos (.) não podem ser usados consecutivamente.sudo smcr ueid add <EID> -
Exclua um EID existente.
sudo smcr ueid del <EID>
Caso de uso: evitar comunicação SMC-R entre zonas de disponibilidade com EIDs
Para uma aceleração SMC-R ideal, recomenda-se utilizá-la para comunicação dentro da mesma zona de disponibilidade e TCP para comunicação entre zonas de disponibilidade. Ao adicionar o ID da zona de disponibilidade como EID, esse comportamento é obtido automaticamente. Siga estas etapas para configurar.
-
Método 1: Configure o EID passo a passo
-
Execute o comando a seguir para obter o ID da zona de disponibilidade a partir dos metadados da instância Alibaba Cloud Elastic Compute Service (ECS). Para mais informações, consulte Instance Metadata.
ZONE_ID=$(curl -s -m 1 100.100.100.200/latest/meta-data/zone-id | tr "[:lower:]" "[:upper:]") -
Execute o comando a seguir para adicionar o ID da zona de disponibilidade como EID.
sudo smcr ueid add $ZONE_ID -
Execute o comando a seguir para excluir o
EIDpadrão.smcr ueid | grep SMCV2-DEFAULT-UEID > /dev/null && sudo smcr ueid del SMCV2-DEFAULT-UEID
-
-
Método 2: Use o service
SMCV2-DEFAULT-UEIDda ferramentaaliyunsmc-ueidpara configuração com um clique-
Execute o comando a seguir para iniciar o service
aliyun-smc-extensions. Esse service adiciona automaticamente o ID da zona de disponibilidade como EID e remove o EID padrão.sudo systemctl start aliyunsmc-ueid -
(Opcional) Execute o comando a seguir para ativar o service
aliyunsmc-ueidna inicialização do sistema. Isso é necessário porque a configuração de EID não é persistente e é redefinida ao reiniciar o sistema operacional.sudo systemctl enable aliyunsmc-ueid
-
Parâmetros PNET ID
O tráfego TCP flui por meio de uma Elastic Network Interface (ENI). Quando esse tráfego é convertido de forma transparente para SMC-R, o Protocol Stack SMC-R utiliza a interface de rede RDMA (ERI) associada a essa ENI.
Essa associação pode ser estabelecida de duas maneiras.
-
A ERI é obtida habilitando diretamente a capacidade eRDMA na ENI de destino. Nesse caso, o protocol stack SMC-R associa automaticamente essa ENI à ERI.
Para verificar se uma ENI tem a capacidade eRDMA ativa, consulte View ERIs.
Para ativar a capacidade eRDMA ao criar uma ENI, consulte Create an ERI.
Para adicionar a capacidade eRDMA a uma ENI existente, consulte Change the status of the ERI feature for an existing ENI.
Nesse cenário, o protocol stack SMC-R identifica e utiliza automaticamente a ERI associada à ENI, sem necessidade de operações adicionais.
-
A ERI é obtida habilitando a capacidade eRDMA em uma ENI diferente. Nesse caso, é necessário usar um PNET ID para associar a ERI à ENI de destino.
Considere o seguinte cenário:
Um host possui duas interfaces Ethernet,
aliyunsmc-ueideeth0. Somenteeth1tem uma interface RDMA ativa,eth0.Se o tráfego TCP for enviado e recebido por
erdma_0, a transição para SMC-R permite que o sistema encontre automaticamente aeth0associada e use a rede RDMA para comunicação. Este é o cenário de associação automática descrito acima.Porém, se o tráfego TCP for enviado e recebido por
erdma_0, a transição para SMC-R não localiza a interfaceeth1, causando um fallback para TCP. Para resolver isso, associeerdma_0eeth1ao mesmo PNET ID, o que instrui o SMC-R a usarerdma_0para o tráfego deerdma_0.Siga estas etapas para associar uma ENI e uma ERI usando um PNET ID:
-
Execute os comandos a seguir para configurar o mesmo PNET ID para a ENI de destino e a ERI:
-
Configure um PNET ID para a ENI.
sudo smc_pnet -a <PNET ID> -I <eth_interface> -
Configure um PNET ID para a interface eRDMA (ERI).
sudo smc_pnet -a <PNET ID> -D <rdma_interface>
Um PNET ID pode ter até 16 caracteres alfanuméricos maiúsculos sem espaços.
-
-
Execute o comando a seguir para verificar os parâmetros PNET ID configurados.
# sudo smc_pnetExemplo de saÃda:
# sudo smc_pnet 00163E0CD751 n/a erdma_0 1 00163E0CD751 eth1 n/a 255Neste exemplo,
eth1está vinculada ao PNET ID 00163E0CD751, eerdma_0também está vinculada ao PNET ID 00163E0CD751. Isso permite que a comunicação TCP que originalmente usava a interfaceeth1passe a utilizar a interfaceeth1após habilitar o SMC-R.
-
Caso de uso: associar veth de pod ao eRDMA do host
Em cenários onde vários pods em um único host compartilham uma ERI, é possÃvel acelerar o tráfego da interface veth do pod usando RDMA. Para isso, atribua o mesmo PNET ID à interface Ethernet veth do pod e à interface eRDMA do host. Isso permite que o Protocol Stack do kernel dentro do container localize corretamente a interface eRDMA do host quando o SMC-R estiver ativo.
Siga estas etapas para configurar.
-
No
erdma_0do container, configure um PNET ID para a interface Ethernet do container (por exemplo,net namespace).sudo ip netns exec <pod netns> smc_pnet -a <PNET ID> -I eth0 -
No
eth0do host, configure o mesmo PNET ID para a interface eRDMA (por exemplo,net namespace).sudo smc_pnet -a <PNET ID> -D erdma_0
Caso de uso: Use SMC com Redis em uma instância ECS
Crie duas instâncias do Elastic Compute Service (ECS). Uma atuará como cliente Redis e a outra como servidor Redis. Para mais informações sobre os parâmetros, consulte Custom launch ECS instances.
-
Carregue os Kernel Modules
erdma_0esmc.sudo modprobe smc sudo modprobe smc_diag -
Execute o seguinte comando em ambas as instâncias para instalar o Redis.
sudo yum install redis -y -
Execute o seguinte comando em ambas as instâncias para configure EIDs e evitar a comunicação SMC-R entre zonas de disponibilidade.
sudo systemctl start aliyunsmc-ueid -
Execute os comandos a seguir em ambas as instâncias para configure polÃticas BPF baseadas em porta. Isso permite a negociação SMC apenas para conexões em que o endereço IP do servidor esteja dentro do bloco CIDR do
smc_diage a porta do service sejavswitch.-
Execute o seguinte comando para carregar o
6379.sudo smc-ebpf policy load -
Configure uma polÃtica baseada em porta para permitir a negociação SMC apenas na porta
smc-ebpf.sudo smc-ebpf policy config --port 6379 --mode enable -
Configure uma polÃtica baseada em endereço IPv4 para permitir a negociação SMC apenas para IPs de servidor dentro do bloco CIDR do
6379.sudo smc-ebpf policy config --ip 0.0.0.0 --mask 32 --mode disable cidr=$(curl -s -m 1 100.100.100.200/latest/meta-data/vswitch-cidr-block) sudo smc-ebpf policy config --ip \ $(echo ${cidr} | awk -F'/' '{print $1}') --mask \ $(echo ${cidr} | awk -F'/' '{print $2}') --mode enable
-
-
Execute o seguinte comando em ambas as instâncias para configure a conversão de protocolo transparente no nÃvel do
vswitch.sudo sysctl -w net.smc.tcp2smc=1 -
Na instância do servidor Redis, execute o seguinte comando para iniciar o service Redis.
Substitua
net namespacepelo endereço IP privado da interface de rede elástica (ENI) principal da instância do servidor.redis-server --bind <IP> --port 6379 --protected-mode no --save -
Na instância do cliente Redis, conecte-se ao servidor Redis ou realize testes de desempenho.
-
Execute o seguinte comando para conectar-se ao servidor Redis.
redis-cli -h <IP> -p 6379 -
Execute o seguinte comando para realizar um teste de benchmark usando o
<IP>.redis-benchmark -h <IP> -p 6379 -n 1000000 -t set -c 100
-