性能是CPU最核心的指标之一,特别是RISC-V经过多年发展开始进入中高端市场,包括sifive,ventana和tenstorrent等都有中高端riscv ip,当然也包括中国很多厂商的一直努力,整个市场一触即发,就看什么时候出现爆点。
时间回到2022年,那时我们能买到的板子还是sifive unmatched。这是一款in-order的cpu,甚至连内存prefetcher都没有,我们对比了unmatched和一款老的atom cpu,性能特别是内存带宽差距非常大。性能调试手段也比较有限,比如PMU不够丰富,也不支持PMU counter overflow,为了作热点采样我们只能通过perf的software event。我在RISC-V Summit 2022上讲了Advance the Performance Analysis on RISC-V这个主题,只收到了零星的一些反馈,说明在那个时候性能还不是riscv生态的关注重点,但是这作为riscv社区第一次尝试至少是较早的尝试,我认为是有意义的。对于我们自己来说这也是必要的,是我们去了解riscv生态的第一步。在此期间我们做了:
- 搭建测试框架。从benchmark出发,并最终选定并移植了Linux Kernel Performance (LKP)到riscv上。我们的目标并不只是性能测试,更多的是性能分析和优化从而推进riscv生态建设,所以lkp集成的一些性能分析脚本也是我们比较看重的,这也是当时选择lkp而不是phronix的原因。刚开始的时候我们选择的benchmark更偏向硬件的性能,比如lmbench/stream/coremark等,当然也分析了unixbench等偏os的测试。
- 调研了当时在performance tools上的软硬件生态,包括Linux内核对性能工具的支持程度,riscv pmu相关的extensions,以及riscv spec本身的一些性能特性,比如ipi放在M mode的性能影响。另外,performance tools不只存在于真实硬件上,qemu以及其他很多工具同样可以分析部分性能问题
- 出于兴趣也分析了in-order vs out-of-order, memory prefetcher等对性能的影响。
后面基于t-head c910/c920的产品大量上市,包括sophgo sg2042和lichee pi 4a等,我认为t-head这款产品非常成功,至少把riscv开发版普及到下一个level。因为c910有一个相对不错的性能,riscv变得更加有趣起来。
- 开始更严肃评估c910的性能,包括和其他arch的cpu进行性能对比,考虑是否可以开发基于riscv的商用系统
- 将sg2042作为kernel performance regression的测试平台,通过比较6.1和6.6两个版本上的性能确实发现了一些性能回归,也对benchmark本身有了更多了解。因为sg2042的内核代码没有完全upstream,目前还不适合用作日常的回归
- 使用sg2042作为性能测试和调试的平台,使用上了ebpf和perf-record等,顺便发现和修复了一个perf-record导致kernel panic的bug
- 开始考虑怎么利用好sg2042,毕竟它比qemu执行快了很多
- 因为sg2042是64 core的系统,考虑用来做一些多核方面的分析和研究
- 研究其他arch上性能相关的功能去发现riscv上的gap
在此期间我们也尝试自己动手去优化开源软件,虽然我们初衷是通过我们的测试套件和分析方法能够推动社区一起来做这件事,但是因为公司投入和riscv社区需求以及其他因素,那个时间节点推动起来并不容易。但是现在这个时间节点已经成熟很多,更好性能的riscv cpu很快到来,riscv会进入更多的领域,同时带来了相关软件的优化需求。我希望利用好RISE来推动起来,一个可能的提案是运行在真实硬件的performance ci框架
- 目前大部分软件优化是基于qemu来开发和验证的,比如gcc关于vector的优化,主要是靠统计指令数来验证优化效果。很明显这只是迫于现实条件约束而不是最优选择,动态指令条数并不完全和性能正相关,况且不同rvv硬件实现也可能会有不同效果
- 需要有测试框架能及时发现performance regression,现在大部分软件在riscv上都没有性能回归测试,此时搭建一个能用于不同软件的性能回归测试会有很大收益
- 除了regression,展示riscv software优化进展同样重要,这是riscv社区从用户传递正能量的有效手段。同时,也可以收集到优化方法的数据库,甚至可以将这些优化应用到不同的开源软件。
- 极大提高运行这个perf ci框架的组织社区可见段,不管是RISE还是其他组织,可以很好地参与到各种开源社区
接下来我相信riscv应用会迎来井喷,时间不会太久,到时各种软硬件优化的需求会出来,不像现在偏通用的优化,还有针对各种不同领域不同软件的优化,新的硬件扩展会出现,调试也需要越来越好的PMU和工具的支持。riscv会重走arm走过的路,但是走得更快,所以我们更早地做好准备。