41 Aceleração vRAN (Intel ACC100/VRB1/VRB2) #
À medida que os provedores de serviços de comunicação migram de redes 4G para 5G, muitos estão adotando arquiteturas de rede de acesso via rádio virtualizada (vRAN) para maior capacidade de canal e implantação mais fácil de serviços e aplicações baseados em borda. As soluções vRAN estão idealmente localizadas para fornecer serviços de baixa latência com a flexibilidade de aumentar ou diminuir a capacidade com base no volume de tráfego em tempo real e na demanda na rede.
Uma das cargas de trabalho 4G e 5G que mais consomem processamento é a camada 1 de RAN (L1) FEC, que resolve erros de transmissão de dados em canais de comunicação não confiáveis ou ruidosos. A tecnologia FEC detecta e corrige um número limitado de erros em dados 4G ou 5G, eliminando a necessidade de retransmissão. Como a transação de aceleração FEC não contém informações de estado da célula, ela pode ser facilmente virtualizada, permitindo benefícios de agrupamento e fácil migração de células.
Historicamente, a Intel fornecia a placa aceleradora vRAN ACC100 para executar rapidamente algoritmos FEC de Camada 1, liberando poder de processamento do host para a CPU principal. Desde então, a Intel integrou essa tecnologia diretamente em CPUs mais novas, começando com Sapphire Rapids, sob o nome Intel vRAN Boost (VRB). O Intel vRAN Boost atua como um acelerador de descarregamento na própria CPU, eliminando a necessidade de uma placa de hardware separada. Esta seção detalha a configuração do SUSE Telco Cloud para que as cargas de trabalho aproveitem o ACC100 ou o Intel vRAN Boost.
41.1 Parâmetros kernel #
Para habilitar a aceleração vRAN, precisamos habilitar os seguintes parâmetros do kernel (se ainda não estiverem presentes):
| parameter | value | descrição |
|---|---|---|
iommu | pt | Esta opção habilita o uso de vfio para as interfaces DPDK. |
intel_iommu or amd_iommu | on | Esta opção habilita o uso de vfio para VFs. |
Modifique o arquivo GRUB /etc/default/grub para adicioná-los à linha de comando do kernel:
GRUB_CMDLINE_LINUX="BOOT_IMAGE=/boot/vmlinuz-6.4.0-9-rt root=UUID=77b713de-5cc7-4d4c-8fc6-f5eca0a43cf9 skew_tick=1 rd.timeout=60 rd.retry=45 console=ttyS1,115200 console=tty0 default_hugepagesz=1G hugepagesz=1G hugepages=40 hugepagesz=2M hugepages=0 ignition.platform.id=openstack net.ifnames=1 intel_iommu=on iommu=pt irqaffinity=0,31,32,63 isolcpus=domain,nohz,managed_irq,1-30,33-62 nohz_full=1-30,33-62 nohz=on mce=off nosoftlockup nowatchdog nmi_watchdog=0 quiet rcu_nocb_poll rcu_nocbs=1-30,33-62 rcupdate.rcu_cpu_stall_suppress=1 rcupdate.rcu_expedited=1 rcupdate.rcu_normal_after_boot=1 rcupdate.rcu_task_stall_timeout=0 rcutree.kthread_prio=99 security=selinux selinux=1 idle=poll"Atualize a configuração do GRUB e reinicie o sistema para aplicar as alterações:
$ transactional-update grub.cfg
$ rebootPara verificar se os parâmetros foram aplicados após a reinicialização, verifique a linha de comando:
$ cat /proc/cmdline41.2 Configure SR-IOV em aceleradores FEC #
Carregue o módulo do kernel
vfio-pcipara habilitar a aceleração vRAN. O primeiro argumento indica o módulovfio-pcipara suportar SR-IOV, e o segundo argumento impede que o dispositivo PCI entre em um estado de baixo consumo de energia quando estiver ocioso.
$ modprobe vfio-pci enable_sriov=1 disable_idle_d3=1Recupere o endereço do dispositivo PCI do acelerador FEC:
$ lspci -DPPnn | grep -i acc
0000:07:00.0 Processing accelerators [1200]: Intel Corporation Device [8086:57c2]
0000:0a:00.0 Processing accelerators [1200]: Intel Corporation Device [8086:57c2]Vincule a interface física (
PF) ao drivervfio-pci:
$ dpdk-devbind.py -b vfio-pci 0000:07:00.0Crie as funções virtuais (
VFs) a partir da interface física (PF).
Verifique a capacidade máxima VF da placa aceleradora. Em seguida, configure a placa para expor o número desejado de VFs, sem exceder o número máximo. Neste exemplo, configuramos a placa para sua capacidade total de 16 VFs:
$ cat /sys/bus/pci/devices/0000:07:00.0/sriov_totalvfs
64
$ echo 16 > /sys/bus/pci/devices/0000:07:00.0/sriov_numvfsConfigure a placa aceleradora e suas funções virtuais com um arquivo de controle 4G ou 5G, selecionando o tipo de dispositivo
vRAN Boostcorreto dependendo da geração exata do processador Intel:VRB1(anteriormente conhecido como ACC200) se for Sapphire Rapids Edge Enhanced (SPR-EE),VRB2para Granite Rapids-D (GNR-D). Um token de VF exclusivo (UUID) deve ser fornecido (a carga de trabalho consumirá este token de VF para utilizar os recursos de aceleração FEC da placa).
Descontinuação a partir de pf-bb-config: a nova versão do RPM que oferece suporte ao tipo de dispositivo VRB2 agora está instalando os arquivos de exemplo de configuração no local /usr/share/pf-bb-config/examples; o caminho antigo /opt/pf-bb-config/ ainda é suportado, mas será removido em versões futuras. Por favor, atualize seus scripts e documentação para refletir o novo caminho (como feito no exemplo abaixo).
$ pf_bb_config VRB2 -c /usr/share/pf-bb-config/examples/vrb2/vrb2_config_vf_5g.cfg -f /usr/share/pf-bb-config/examples/vrb2/srs_fft_windows_coefficient.bin -v 00112233-4455-6677-8899-aabbccddeeff -p 0000:07:00.0
== pf_bb_config Version 25.11 ==
VRB2 PF [0000:07:00.0] configuration complete!
Log file = /var/log/pf_bb_cfg_0000:07:00.0.logVerifique as novas VFs criadas a partir da PF FEC. Observe que as VFs obtiveram o ID de dispositivo
0d5d. Esta informação é necessária na próxima etapa para expor essas VFs como recurso do Kubernetes:
$ # dpdk-devbind.py -s | grep -A18 Baseband
Baseband devices using DPDK-compatible driver
=============================================
0000:07:00.0 'Device 57c2' numa_node=0 drv=vfio-pci unused=
0000:07:00.1 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:00.2 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:00.3 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:00.4 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:00.5 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:00.6 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:00.7 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.0 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.1 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.2 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.3 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.4 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.5 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.6 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:01.7 'Device 57c3' numa_node=0 drv=vfio-pci unused=
0000:07:02.0 'Device 57c3' numa_node=0 drv=vfio-pci unused=
--
Other Baseband devices
======================
0000:0a:00.0 'Device 57c2' numa_node=0 unused=vfio-pci
Other Crypto devices
====================
0000:01:00.0 '420xx Series QAT 4946' numa_node=0 unused=vfio-pci
0000:03:00.0 'Device 2714' numa_node=0 unused=vfio-pci
DMA devices using kernel driver
===============================
0000:00:01.0 'Device 11fb' numa_node=0 drv=idxd unused=vfio-pci
Other Eventdev devices
======================
0000:03:00.0 'Device 2714' numa_node=0 unused=vfio-pci
No 'Mempool' devices detected
=============================41.3 Configurar o Kubernetes para Aceleração FEC #
A etapa final é expor as VFs ao Kubernetes com a ajuda do plugin de dispositivo SR-IOV. Crie um ConfigMap usando o deviceID das VFs coletado na etapa anterior e instale o plugin de dispositivo SR-IOV. Assim que os nós do Kubernetes exibirem as VFs FEC como recursos Allocatable, o cluster estará pronto para que as cargas de trabalho aproveitem a aceleração FEC.
Siga as etapas da Opção 1 no capítulo Chapter 39, SR-IOV. O SRIOV Network Operator não é aplicável para o Acelerador FEC, portanto, a Opção 2 não é aplicável.