intel/flexran_l1_spreeIntel® 提供的 FlexRAN™ 软件参考栈是一种 vRAN 参考架构,展示了如何利用 Intel® C++ 类库和 Intel® 高级矢量扩展 512(Intel® AVX-512)指令集优化 VDU 软件实现。其多线程设计支持单个 VDU 软件实现扩展,以满足多种部署场景需求,从小型单小区部署、优化的 D-RAN 部署到支持大量 5G 小区的 C-RAN 池化部署。作为软件实现,它还支持通过 O-RAN 7.2x 分割,在同一软件栈中部署 LTE、5G 窄带和 5G 大规模 MIMO。
!FlexRAN™ 软件参考框架
自 2022 年起,Intel® FlexRAN 团队开始在 Docker Hub 发布 Docker 镜像,并自 2024 年起发布 containerd 镜像。其目的是让更多潜在用户能够轻松入门和使用。该 containerd 镜像包含二进制文件、运行时依赖库、配置文件和多个典型用例。已成为 Intel® NDA 客户的用户可获取相应源代码、更多测试用例及 Intel® FlexRAN 团队的支持;新用户若仅需快速试用,可参考以下指南,如需进一步了解,请联系 Intel® FlexRAN 市场团队。
| 类别 | 详细信息 |
|---|---|
| CPU | 第 4 代 Intel® Xeon® 可扩展处理器,带 vRAN Boost MCC,32 核 |
| 内存 | 16×16GB DDR5 |
| 存储 | 2TB INTEL® SSDPE2KX020T8 |
| NIC1 | Intel® Corporation I350(板载,连接至 CPU-0) |
| NIC2 | Intel® Corporation Ethernet Controller E810-C for SFP |
| 基带设备 | SPR-EE CPU 内置 vRAN Boost(可选,无硬件时使用软件模式) |
| 类别 | 组件 | 详细信息 |
|---|---|---|
| 固件 | IFWI | 包含 BIOS、BMC、ME 及 FRUSDR |
| E810 | 版本 4.50 0x8001d8b5 1.3597.0 | |
| 操作系统 | Ubuntu 24.04 | Ubuntu Server 24.04,实时内核 6.8.1-1002 |
| 驱动 | E810 | ice 1.14.11 |
| 云原生组件 | Kubespray | 2.25.0 |
| Kubernetes | 1.28.8 | |
| 容器运行时 | Containerd 1.7.16 | |
| DPDK | DPDK 版本 | dpdk-23.11 |
安装 Ubuntu 实时内核:
参考 Ubuntu 官方文档:<[***]>
安装 TuneD:
shellapt install tuned vim /etc/grub.d/00_tuned
在 /etc/grub.d/00_tuned 文件末尾添加:
shellecho "export tuned_params"
编辑 /etc/tuned/realtime-variables.conf,设置隔离核心:
shellisolated_cores=1-30,33-62
编辑 /usr/lib/tuned/realtime/tuned.conf,添加内核参数:
shellcmdline_realtime=+isolcpus=${managed_irq}${isolated_cores} nohz=on nohz_full=${isolated_cores} rcu_nocb_poll rcu_nocbs=${isolated_cores} nosoftlockup tsc=nowatchdog
激活实时配置文件并更新 grub:
shelltuned-adm profile realtime vim /etc/default/grub
修改 /etc/default/grub 中的内核参数:
shellGRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt vfio_pci.enable_sriov=1 vfio_pci.disable_idle_d3=1 usbcore.autosuspend=-1 selinux=0 enforcing=0 nmi_watchdog=0 crashkernel=auto softlockup_panic=0 audit=0 mce=off hugepagesz=1G hugepages=50 hugepagesz=2M hugepages=0 default_hugepagesz=1G irqaffinity=0,31,32,63" GRUB_CMDLINE_LINUX_DEFAULT="\$tuned_params" GRUB_INITRD_OVERLAY="${GRUB_INITRD_OVERLAY:+$GRUB_INITRD_OVERLAY }\$tuned_initrd"
应用配置并重启:
shellsudo update-grub sudo reboot
验证内核参数:
shellcat /proc/cmdline # 应包含上述配置的参数,如 hugepagesz=1G、isolcpus 等
shell# 设置 CPU 频率为性能模式 cpupower frequency-set -g performance # 固定 CPU 核心频率为 2.5GHz cpupower frequency-set -d 2500000 -u 2500000
安装指定版本的 Kubernetes、containerd:
参考 Kubernetes 官方文档及 containerd 安装指南。
配置 containerd 支持无 root 容器设备访问:
shellvim /etc/containerd/config.toml
添加以下配置:
toml[plugins] [plugins."io.containerd.grpc.v1.cri"] device_ownership_from_security_context = true
重启 containerd:
shellsystemctl restart containerd.service
需在 master 节点安装以下插件:
Calico:
参考官方文档:<[***]>
SRIOV FEC Operator(可选):
参考官方文档:<[***]>
部署后验证插件状态:
json{ "intel.com/intel_fec_5g": "0", "intel.com/intel_fec_acc200": "1" }
SRIOV CNI 和网络设备插件:
参考官方文档:<[***]>
配置示例:
创建 SRIOV 设备插件配置映射:
shellcd sriov-network-device-plugin cat <<EOF > deployments/configMap.yaml apiVersion: v1 kind: ConfigMap metadata: name: sriovdp-config namespace: kube-system data: config.json: | { "resourceList": [ { "resourceName": "intel_fec_5g", "deviceType": "accelerator", "selectors": { "vendors": ["8086"], "devices": ["57c1"] } }, { "resourceName": "intel_sriov_odu", "selectors": { "vendors": ["8086"], "devices": ["1889"], "drivers": ["vfio-pci"], "pfNames": ["ens9f1"] } }, { "resourceName": "intel_sriov_oru", "selectors": { "vendors": ["8086"], "devices": ["1889"], "drivers": ["vfio-pci"], "pfNames": ["ens9f0"] } } ] } EOF kubectl create -f deployments/configMap.yaml kubectl create -f deployments/sriovdp-daemonset.yaml
shellcd /opt/ wget [***] tar xf dpdk-23.11.tar.xz
shellexport RTE_SDK=/opt/dpdk-23.11 modprobe vfio-pci enable_sriov=1 disable_idle_d3=1 echo 1 | sudo tee /sys/module/vfio_pci/parameters/enable_sriov echo 1 | tee /sys/module/vfio_pci/parameters/disable_idle_d3 $RTE_SDK/usertools/dpdk-devbind.py -b vfio-pci f7:00.0 # 绑定 FEC PF export UUID=00112233-4455-6677-8899-aabbccddeeff echo 1 > /sys/bus/pci/devices/0000:f7:00.0/sriov_numvfs # 创建 1 个 FEC VF $RTE_SDK/usertools/dpdk-devbind.py -b vfio-pci 0000:f7:00.1 # 绑定 FEC VF # 配置 FEC VF 参数 git clone [***] cd pf-bb-config ./pf_bb_config VRB2 -v $UUID -c vrb2/vrb2_config_vf.cfg # 配置 DU SRIOV VF echo 4 > /sys/bus/pci/devices/0000:4b:00.0/sriov_numvfs # 创建 4 个 VF ip link set ens9f0 vf 0 mac 00:11:22:33:00:00 ip link set ens9f0 vf 1 mac 00:11:22:33:00:10 ip link set ens9f0 vf 2 mac 00:11:22:33:00:20 ip link set ens9f0 vf 3 mac 00:11:22:33:00:30 $RTE_SDK/usertools/dpdk-devbind.py -b vfio-pci 0000:4b:02.0 0000:4b:02.1 0000:4b:02.2 0000:4b:02.3 # 配置 ORU SRIOV VF echo 4 > /sys/bus/pci/devices/0000:4b:00.1/sriov_numvfs # 创建 4 个 VF ip link set ens9f1 vf 0 mac 00:11:22:33:00:01 ip link set ens9f1 vf 1 mac 00:11:22:33:00:11 ip link set ens9f1 vf 2 mac 00:11:22:33:00:21 ip link set ens9f1 vf 3 mac 00:11:22:33:00:31 $RTE_SDK/usertools/dpdk-devbind.py -b vfio-pci 0000:4b:0a.0 0000:4b:0a.1 0000:4b:0a.2 0000:4b:0a.3
shell# 创建重启脚本 cat <<EOF > /opt/restart_sriov_container.sh #!/bin/bash docker ps | grep sriov docker kill \`docker ps | grep sriov | head -n 1 | awk -F ' ' '{print \$1}'\` while ((\`docker ps | grep sriov | wc -l\` < 2 )); do sleep 3 echo "等待 SRIOV 容器重启..." done EOF chmod +x /opt/restart_sriov_container.sh sh /opt/restart_sriov_container.sh # 验证资源 apt install jq -y kubectl get node <node-name> -o json | jq '.status.allocatable' # 应输出: # { # "intel.com/intel_fec_5g": "1", # "intel.com/intel_sriov_odu": "4", # "intel.com/intel_sriov_oru": "4" # } # 标记节点 kubectl label node <node-name> testnode=worker1
shell# 拉取镜像 docker pull intel/flexran_l1_spree:v24.07 # 导入到 containerd(供 Kubernetes 使用) docker save intel/flexran_l1_spree:v24.07 > flexran_image_24.07.tar ctr -n k8s.io image import flexran_image_24.07.tar
1. 创建配置映射
shellcat <<EOF > /opt/flexran_phycfg_timer.yaml apiVersion: v1 kind: ConfigMap metadata: name: flexran-configmap-timer data: ENABLE_AUTO_CONFIG: "TRUE" # 自动配置 FEC/SRIOV ENABLE_CORE_ASSIGN: "FALSE" # 禁用核心绑定 FEC_SRIOV_INFO_NAME: "PCIDEVICE_INTEL_COM_INTEL_FEC_ACC200_INFO" # FEC 资源名称 FEC_VF_TOKEN: "02bddbbf-bbb0-4d79-886b-91bad3fbb510" # FEC VF UUID flexranPhyCfg: | { "DPDK": { "dpdkIovaMode": 1, # IOVA 模式(1=PA) "dpdkBasebandFecMode": 1 # FEC 模式(1=硬件加速) } } EOF kubectl apply -f /opt/flexran_phycfg_timer.yaml
说明:若使用
pf-bb-config配置 FEC,需修改 `FEC_SRIOV_INFO_NAME: "
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务