编者按:飞腾作为国内 CPU 设计的当先企业,其 CPU 在各行各业曾经取得的广泛应用。为了广大客户更好的应用 CPU、更好的晋升性能,本文将具体介绍飞腾服务器 CPU 的性能调优原理以及相应调优办法。整顿自龙蜥大讲堂,文末附获取 PPT 形式,欢送查看!
一、软件调优的形式
• 算法优化
算法优化是指对算法的无关性能进行优化,比方工夫复杂度等。为了晋升算法的解决问题的能力,通常须要对算法进行正当优化。
• 指令集优化
1)针对程序要害代码段嵌入汇编指令进行优化
2)NEON 是一种 SIMD 指令,能够使用在信号处理,向量运算等场合
• 针对体系结构的性能优化
依据体系结构的特点,针对零碎和应用程序进行合理配置和部署调优。本文次要介绍该调优办法。
二、CPU 外部体系结构
2.1 FT-2000+/64 外部体系结构
• 64 个 CPU 核,8 个 NUMA
• 每 NUMA 含 8 个核,一个 DDR4 控制器
• 每 4 个核共享 2 MB L2 cache
• 两个 PEU 单元、PEU0 连贯在 NUMA0、PEU1 连贯在 NUMA6
(图 1 / FT-2000+/64 外部体系结构图)
2.2 S2500 外部体系结构
(图 2 /S2500 外部体系结构图)
• 64 个 CPU 核、8 个 NUMA
• 每 NUMA 含 8 个核,一个 DDR4 控制器
• 每 4 个核共享 2 MB L2 cache
• 一个 PEU 单元连贯在 NUMA0
• 多路互联 DLU 连贯在 NUMA6
三、CPU 体系结构影响程序性能的因素
3.1 CPU 访存的性能
每个 NUMA 的 CPU 拜访本 NUMA DDR 控制器的内存性能最佳,拜访其余 NUMA 性能有一些差别。
3.2 外设访存的性能
PEU0 上的外设拜访 NUMA0 内存性能最佳,PEU1 拜访 NUMA6 内存性能最佳。
3.3 跨路访存的性能
CPU 和外设拜访其它 socket 的内存比拜访本路内存性能更低。
四、CPU 体系结构相干性能的调优办法
NUMA(Non Uniform Memory Access),即非统一内存拜访,是针对 UMA(Uniform Memory Access)提出的。NUMA 架构下,多 CPU 对主存的拜访并非对等的,每个 CPU 都有本人的主存,CPU 与本人的主存物理上间隔更近,访问速度更快,而拜访远端存储器的速度绝对要慢。
Linux 内核反对这种个性,配置 numa 反对对驱动和应用程序来说的确会有不少的性能晋升。
4.1 CPU 访存类型优化办法 (一)
CPU 访存的性能
实例:多过程的音视频解决服务器,每个过程含 6 个线程,各过程互相独立。运行 8 个服务过程,程序延时抖动很大,性能稳定。
优化原理:每个过程绑定到一个 NUMA 的 8 个 CPU,每个过程从本地 NUMA 分配内存,防止跨 NUMA 分配内存带来的访存带宽变低和提早的影响。
操作步骤:
应用 numcactl 绑定服务器过程,并指定内存调配策略.-C 指定 cpu 号,-l 指定以后的节点分配内存的:
numactl -C $cpus -l 音视频服务器。
(图 3 / 过程调优部署结构图)
4.2 CPU 访存类型优化办法 (二)
实例:飞腾数学解决库,应用多线程进行矩阵运算,应用 NUMA API 分配内存晋升性能。
优化原理:依据每个线程运行的 CPU 所处的 numa 调配矩阵运算所须要的内存,这样运算的线程访存速率最快,同时配合应用 NEON 指令集对程序进行优化。
4.3 IO 访存类型 (内核网卡驱动)(一)
实例:25G 网卡 iperf3 测试性能调优。
优化原理:网卡队列中断亲和性平衡设置到对应 PEU 所在的核,晋升网卡 DMA 访存的性能。
操作步骤:
1)敞开 irqbalance。
systemctl stop irqbalance.service
2)查问网卡中断号。
cat /proc/interrupts | grep $eth | awk -F ':' '{print $1}'
3)依据具体 CPU 的体系结构,应用 lspci -tv 确定网卡所属的 PEU。
4)将每个中断别离绑定在网卡所属 NUMA 对应的一个核上,并且平均调配。cpu 指定 CPU 编号,irq 指定中断编号。
echo $cpu> /proc/irq/$irq/smp_affinity_list
(图 4 / iperf3 测试)
4.4 IO 访存类型 (DPDK)(二)
实例:20G 网卡 dpdk 测试性能调优
优化原理:每个 pci 设施在 pci devie 目录下有一个 numa_node 的属性,记录设施所在的 numa_node 信息,dpdk 内存治理依据该信息从对应 numa 内存区域调配接收缓冲区。确保零碎中 numa_node 信息调配正确,晋升 IO 传输的性能。
操作步骤:
1)依据具体 CPU 的体系结构,应用 lspci -tv 确定网卡所属的 PEU。
2)查看网卡的 numa_node 是否正确配置,其中 pci_addr 示意设施 pci 地址
cat /sys/bus/pci/devices/pci_addr/numa_node
3)依据网卡所连贯的 PEU,配置网卡的 numa_node,其中 numaNode 示意 numa 编号,pci_addr 示意设施 pci 地址。
echo $numaNode > /sys/bus/pci/devices/pci_addr/numa_node
(图 5 /dpdk testpmd 测试数据)
对于技术课件获取形式:
【PPT 课件获取】:关注微信公众号(OpenAnolis),回复“龙蜥课件”即可获取。有任何疑问请随时征询龙蜥助手—小龙(微信:openanolis_assis)。
—— 完 ——