Intel FlexRAN™软件参考栈是一种vRAN参考架构,展示了如何使用Intel® C++类库优化VDU软件实现,并利用Intel®高级矢量扩展512(Intel® AVX-512)指令集。其多线程设计使单个VDU软件实现能够扩展以满足多种部署场景需求,从单小型基站部署、优化的D-RAN部署到服务大量5G小区的C-RAN池化部署。作为软件实现,它还能够通过O-RAN 7.2x分裂从同一软件栈支持LTE、5G窄带和5G大规模MIMO部署。
自2022年起,Intel FlexRAN团队开始在Docker Hub发布Docker镜像,旨在让更多潜在用户能够轻松入门和使用。该Docker镜像包含二进制文件、运行时依赖库、配置文件和多个典型案例。
| 类别 | Icelake – SP具体配置 |
|---|---|
| 主板 | Intel Server Board M50CYP2SBSTD |
| CPU | 1x Intel® Xeon® Gold 6338N CPU @2.20 GHz |
| 内存 | 8x16GB DDR4 3200 MHz (Samsung) |
| 存储 | 960 Gb SSD M.2 SATA 6Gb/s |
| 机箱 | 2U机架式服务器机箱 |
| NIC1 | 1x Fortville NIC X722 Base-T(LoM to CPU-0) |
| NIC2 | 1× Fortville 40 Gbe Ethernet PCIe XL710-QDA2 Dual Port QSFP+ (PCIe Add-in-card direct to CPU-0) |
| 基带设备 | 挂载Bryce Card (acc100)至CPU-0, 可选,若无则使用纯软件模式 |
| 类别 | 组件 | 详细信息 |
|---|---|---|
| 固件 | IFWI | 包含BIOS、BMC、ME及FRUSDR |
| Fortville XL710 | 8.20 0x8000a051 1.2879.0 | |
| 操作系统 | Ubuntu 22.04 | Ubuntu Server 22.04 实时内核5.15.0-1009 |
| 驱动 | x700系列i40e驱动 | 使用rt-5.15.0自带版本 |
| 云原生组件 | kubernetes | 1.22.1 |
| 容器运行时 | Docker 0.19.0 | |
| FlexRAN | FlexRAN 22.07包 | 22.07 |
| 工具链 | Intel oneAPI Base Toolkit | 2022.1.2.146 |
| DPDK | DPDK发行版 | 22.11 |
4.3.1 BIOS配置
以下是BIOS的主要配置项(不同服务器或BIOS版本可能存在差异,仅供参考):
| 类别 | 项目 | 设置值 |
|---|---|---|
| 处理器配置 | 超线程(Hyper-Threading) | 启用(enable) |
| LLC预取(LLC prefetch) | 启用(enable) | |
| 扩展APIC(Extended APIC) | 启用(enable) | |
| CPU P-state控制 | 启动性能模式(Boot Performance Mode) | 最大性能(Max. Performance) |
| 节能 Turbo(Energy Efficient Turbo) | 禁用(Disable) | |
| GPSS计时器(GPSS timer) | 0us | |
| Turbo模式(Turbo Mode) | 启用(enable) | |
| 硬件PM状态控制 | HW P-state | 禁用(disable) |
| EPP启用(EPP enable) | 禁用(disable) | |
| CPU C-state控制 | 启用Monitor Mwait(Enable Monitor Mwait) | 启用(enable) |
| 处理器C6/CPU C6报告(ProcessorC6/CPU C6 report) | 启用(enable) | |
| 增强暂停状态(Enhanced Halt State(C1E)) | 禁用(disable) | |
| 封装C-state控制 | 封装C状态(Package C State) | C0/C1 |
| Intel VT-d | Intel VT-d | 启用(enable) |
4.3.2 实时内核配置
安装TuneD:
shell$ apt install tuned $ ln -s /boot/grub/grub.cfg /etc/grub2.cfg $ vim /etc/grub.d/00_tuned
在文件末尾添加以下行:
shellecho "export tuned_params"
编辑/etc/tuned/realtime-variables.conf添加隔离核心:
shellisolated_cores=1-27,29-55
编辑/usr/lib/tuned/realtime/tuned.conf添加nohz和rcu相关参数:
shellcmdline_realtime=+isolcpus=${managed_irq}${isolated_cores} intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=${isolated_cores} rcu_nocbs=${isolated_cores}
激活实时配置文件:
shell$ tuned-adm profile realtime
检查tuned参数:
shell$ grep tuned_params= /boot/grub/grub.cfg set tuned_params="skew_tick=1 isolcpus=1-27,29-55 intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=1-27,29-55 rcu_nocbs=1-27,29-55 rcu_nocb_poll"
在/etc/default/grub中添加其他参数:
shellGRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt usbcore.autosuspend=-1 selinux=0 enforcing=0 nmi_watchdog=0 crashkernel=auto softlockup_panic=0 audit=0 cgroup_disable=memory mce=off hugepagesz=1G hugepages=60 hugepagesz=2M hugepages=0 default_hugepagesz=1G kthread_cpus=0,28 irqaffinity=0,28 "
应用更改并重启:
shell$ sudo update-grub $ sudo reboot
重启后检查内核参数:
shell$ cat /proc/cmdline BOOT_IMAGE=/vmlinuz-5.15.0-1009-realtime root=/dev/mapper/ubuntu--vg-ubuntu--lv ro intel_iommu=on iommu=pt usbcore.autosuspend=-1 selinux=0 enforcing=0 nmi_watchdog=0 crashkernel=auto softlockup_panic=0 audit=0 cgroup_disable=memory mce=off hugepagesz=1G hugepages=60 hugepagesz=2M hugepages=0 default_hugepagesz=1G kthread_cpus=0,28 irqaffinity=0,28 skew_tick=1 isolcpus=1-27,29-55 intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=1-27,29-55 rcu_nocbs=1-27,29-55 rcu_nocb_poll
4.3.3 配置CPU频率和C状态
进一步提高确定性和能效:
shell$ apt install msr-tools $ cpupower frequency-set -g performance
设置CPU核心频率为2.5GHz:
shell$ wrmsr -a 0x199 0x1900
设置CPU uncore为最大允许值,禁用C6和C1E:
shell$ wrmsr -p a 0x620 0x1e1e $ cpupower idle-set -d 3 $ cpupower idle-set -d 2
4.3.4 Kubernetes和Docker安装
确保安装特定版本的Kubernetes和Docker,通常使用kubeadm安装和初始化Kubernetes,步骤参考:<[***]>
4.3.4.1 配置操作系统
shell$ swapoff -a
4.3.4.2 安装Docker
shell$ apt-get install -y ca-certificates curl gnupg lsb-release $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ apt-get update -y $ apt-get install -y docker-ce=5:20.10.13~3-0~ubuntu-jammy docker-ce-cli=5:20.10.13~3-0~ubuntu-jammy containerd.io $ mkdir /etc/docker $ cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF $ systemctl enable docker $ systemctl daemon-reload $ systemctl restart docker
4.3.4.3 通过kubeadm安装Kubernetes
shell$ curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg $ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" \ | sudo tee /etc/apt/sources.list.d/kubernetes.list $ apt update $ apt install -y kubectl=1.21.2-00 kubeadm=1.21.2-00 kubelet=1.21.2-00 --allow-downgrades $ systemctl enable --now kubelet $ systemctl start kubelet # 注意:如果首次运行enable命令时报告"containerd.io: command not found"或"Failed to start kubele.service: Unit kubele.service not found",需重新执行"apt install -y kubectl=1.21.2-00 kubeadm=1.21.2-00 kubelet=1.21.2-00 --allow-downgrades" $ cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sysctl --system
4.3.4.4 配置Docker和Kubernetes使用代理
在~/bashrc中添加环境变量:
shell$ export http_proxy=<proxy_url> $ export https_proxy=<proxy_url> $ export no_proxy=localhost,127.0.0.1,10.244.0.0/16,10.96.0.0/12,<host_ip>
为Docker配置代理(添加到/etc/systemd/system/docker.service.d/http-proxy.conf):
shell[Service] Environment="HTTP_PROXY=<proxy_url>" [Service] Environment="HTTPS_PROXY=<proxy_url>"
重启Docker:
shell$ systemctl daemon-reload $ systemctl restart docker
4.3.4.5 Kubernetes初始化
初始化Kubernetes集群(主节点):
shell$ kubeadm init --kubernetes-version=v1.21.11 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<host_ip> --token-ttl 0 --ignore-preflight-errors=SystemVerification $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config $ export KUBECONFIG=/etc/kubernetes/admin.conf
加入工作节点到集群:
shell$ kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
若工作节点与主节点为同一服务器,忽略上述加入步骤,执行以下命令消除污点:
shell$ kubectl taint nodes --all node-role.kubernetes.io/master-
除Kubernetes和Docker外,还需安装以下插件(从主节点执行):
multus:参考GitHub文档 - https://github.com/intel/multus-cni
calico:参考官方文档 - <[***]>
SRIOV (CNI和网络设备插件):参考GitHub文档 - https://github.com/intel/sriov-network-deviceplugin
SRIOV DP配置示例:
shell$ cd 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": ["0d5d"] } }, { "resourceName": "intel_sriov_odu", "selectors": { "vendors": ["8086"], "devices": ["154c"], "drivers": ["vfio-pci"], "pfNames": ["ens9f1"] } }, { "resourceName": "intel_sriov_oru", "selectors": { "vendors": ["8086"], "devices": ["154c"], "drivers": ["vfio-pci"], "pfNames": ["ens9f0"] } } ] } EOF $ kubectl create -f deployments/configMap.yaml $ kubectl create -f deployments/k8s-v1.16/sriovdp-daemonset.yaml $ kubectl get node <your-k8s-worker> -o json | jq '.status.allocatable'
4.5.1 DPDK安装
下载DPDK:
shell$ cd /opt
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务