
下图列出了三款处理器的功能部件操作延迟数据,使用的命令是./lat_ops。

龙芯stream数据
LMbench 包含了 STREAM 带宽测试工具,可以用来测试可持续的内存访问带宽情况。图表12.25列 出了三款处理器的 STREAM 带宽数据,其中 STREAM 数组大小设置为 1 亿个元素,采用 OpenMP 版本 同时运行四个线程来测试满载带宽;相应测试平台均为 CPU 的两个内存控制器各接一根内存条, 3A5000 和 Zen1 用 DDR4 3200 内存条,Skylake 用 DDR4 2400 内存条(它最高只支持这个规格)。

从数据可以看到,虽然硬件上 3A5000 和 Zen1 都实现了 DDR4 3200,但 3A5000 的实测可持续带宽 还是有一定差距。用户程序看到的内存带宽不仅仅和内存的物理频率有关系,也和处理器内部的 各种访存队列、内存控制器的调度策略、预取器和内存时序参数设置等相关,需要进行更多分析 来定位具体的瓶颈点。像 STREAM 这样的软件测试工具,能够更好地反映某个子系统的综合能力, 因而被广泛采用。
对比结论
AMD单核跑分数据比较好
MySQL 查询场景下Intel的性能好很多
xdb比社区版性能要好
MySQL8.0比5.7在多核锁竞争场景下性能要好
intel最好,AMD接近Intel,海光差的比较远但是又比鲲鹏好很多,飞腾最差,尤其是跨socket简直是灾难
麒麟OS性能也比CentOS略差一些
从perf指标来看 鲲鹏920的L1d命中率高于8163是因为鲲鹏L1 size大;L2命中率低于8163,同样是因为鲲鹏 L2 size小;同样L1i 鲲鹏也大于8163,但是实际跑起来L1i Miss Rate更高,这说明 ARM对 L1d 使用效率低
整体来说AMD用领先了一代的工艺(7nm VS 14nm),在MySQL查询场景中终于可以接近Intel了,但是海光、鲲鹏、飞腾还是不给力。
附表
鲲鹏920 和 8163 在 MySQL 场景下的 perf 指标对比
整体对比 |
|
|
|
---|
指标 | X86 | ARM | 增加幅度 |
IPC | 0.4979 | 0.495 | -0.6% |
Branchs | 237606414772 | 415979894985 | 75.1% |
Branch-misses | 8104247620 | 28983836845 | 257.6% |
Branch-missed rate | 0.034 | 0.070 | 104.3% |
内存读带宽(GB/S) | 25.0 | 25.0 | -0.2% |
内存写带宽(GB/S) | 24.6 | 67.8 | 175.5% |
内存读写带宽(GB/S) | 49.7 | 92.8 | 86.8% |
UNALIGNED_ACCESS | 1329146645 | 13686011901 | 929.7% |
L1d_MISS_RATIO | 0.06055 | 0.04281 | -29.3% |
L1d_MISS_RATE | 0.01645 | 0.01711 | 4.0% |
L2_MISS_RATIO | 0.34824 | 0.47162 | 35.4% |
L2_MISS_RATE | 0.00577 | 0.03493 | 504.8% |
L1_ITLB_MISS_RATE | 0.0028 | 0.005 | 78.6% |
L1_DTLB_MISS_RATE | 0.0025 | 0.0102 | 308.0% |
context-switchs | 8407195 | 11614981 | 38.2% |
Pagefault | 228371 | 741189 | 224.6% |