Linux核心修补程序让第五代树莓派增速18%

Linux核心修补程序让第五代树莓派增速18%
2024年08月13日 15:22 电子产品世界

Linux操作系统的核心(kernel)是不断迭代精进的,包含正式改版或若干程度的修补(patch,对岸称为补丁)等,而在正式迭代前会先有人提交,提交后需要再评估确认,有些会舍弃,有些会纳入后续正式的迭代。

最近64位Arm架构的Linux核心程序,有一家自由软件顾问公司Igalia尝试在树莓派上模拟NUMA(Non-Uniform Memory Access,翻译成非统一内存存取,但使用不普遍),如此可以让第五代树莓派(RPi 5)增速6%~18%,这作法已经在Linux核心清单的相关讨论中,由账号Tvrtko Ursulin所提出。

本文引用地址:

图一:第五代树莓派单板计算机(图片来源:Amazon)

NUMA简述

在这里要先说明一下何谓NUMA,这其实是一种计算机硬件架构,1990年代UNIX高阶服务器飞速发展时,系统内CPU数目的增加、RAM容量的增加,但要让多颗CPU跟过往一样,都存取同一块RAM内存空间,这一段存取变成了效能瓶颈,故系统商开始提倡NUMA。

NUMA把内存分切、配发给CPU,CPU平常多数时间只存取自己所属的内存,必要时才与其他内存快进行数据同步或交换,另外NUMA也可能将内存分层,分成CPU专属层、一个群中的共享层、整体系统的共享等等。

虽然有这些空间切分、数据同步机制,但这些都以硬件方式实现,是在背地里无形中运作,软件执行上感受不到差异,运作上仍然以为是一个整体连续的内存空间。Linux核心在2.5版后也支持NUMA。

效能提升6%~18%

虽然Linux核心支持NUMA,但如果系统硬件设计上本身就没有NUMA,Linux核心的NUMA功能一样无法发挥,RPi 5即是如此,主要是RPi 5的主控芯片BMC2712没有。

不过,前述的Igalia公司提出一个核心修补程序,让树莓派系统跑一个NUMA仿真软件(Emulator),以软件方式实现NUMA(可能搭配运用上BMC2712内的GPU),这个修补程序其实才约100行,主要的C语言程序代码也不到60行。

图二:Igalia公司官网强调该公司擅长的多项技术中,Linux核心效能提升也是其一(图片来源:Igalia)图二:Igalia公司官网强调该公司擅长的多项技术中,Linux核心效能提升也是其一(图片来源:Igalia)

#include

#include "numa_emulation.h"

static unsigned int emu_nodes;

int __init numa_emu_cmdline(char *str)

{

int ret;

ret = kstrtouint(str, 10, &emu_nodes);

if (ret)

return ret;

if (emu_nodes > MAX_NUMNODES) {

pr_notice("numa=fake=%u too large, reducing to %un",

emu_nodes, MAX_NUMNODES);

emu_nodes = MAX_NUMNODES;

}

return 0;

}

int __init numa_emu_init(void)

{

phys_addr_t start, end;

unsigned long size;

unsigned int i;

int ret;

if (!emu_nodes)

return -EINVAL;

start = memblock_start_of_DRAM();

end = memblock_end_of_DRAM() - 1;

size = DIV_ROUND_DOWN_ULL(end - start + 1, emu_nodes);

size = PAGE_ALIGN_DOWN(size);

for (i = 0; i < emu_nodes; i++) {

u64 s, e;

s = start + i * size;

e = s + size - 1;

if (i == (emu_nodes - 1) && e != end)

e = end;

pr_info("Faking a node at [mem %pap-%pap]n", &s, &e);

ret = numa_add_memblk(i, s, e + 1);

if (ret) {

pr_err("Failed to add fake NUMA node %d!n", i);

break;

}

return ret;

修补程序相关的C语言程序代码,一起头即放入Linux内存区块的含括档memblock.h及NUMA模拟的含括档numa_emulation.h(数据源:CNX Software)

相关配套修改也包含在操作系统上要使用一个NUMA_EMULATION的新Kconfig选项,核心启动参数要加入numa=fake=,然后搭配命令行numactl –interleave=all COMMAND等,如此可以改变BMC2712内存储器控制器的存取方式,另外也要透过systemd命令来重新配置系统范围政策(system-wide policy)。

既然NUMA是为了让整体系统更具效能的,那就需要测试看看NUMA仿真软件是否真的有效果,对此用效能基准程序Geekbench 6来测试,发现有无安装修补程序确实有效能差异。

测试的结果显示,安装修补程序后的单核效能提升约6%,多核(RPi 5有4个核心)则提升到18%,这样的提升形同把2.4GHz的RPi 5超频到2.83GHz。

仍待观望

虽然测试结果不错,但目前还有两个问题,一是真的在一般运用上能得到加速感受吗?有时基准检验的跑分不错,实际上没有帮助,类似纸上成绩不错,实际表现不佳,因此信息业界有时也会强调所谓的real application performance,而不是看benchmark。

另一个问题是:这个修补程序提交出去了,但是否能正式列入成Linux核心修补还需要一段时间,且估计时间冗长。目前提交上的相关讨论似乎有不乐意的声音出现,认为这有点变通取巧不正规,不应该正式列入,一旦正式列入就需要后续一连串的相关维护等。

结语

最后笔者觉得,无论提交能否纳入正式核心修补,这一尝试肯定是正向的,过往的树莓派其实在I/O方面已经出现瓶颈(芯片内的Interconnect带宽不足),硬件规格数字虽已与过往PC相仿,效能却仍有落差,估计这是新一代树莓派要额外提出RP1附属搭配芯片的原因。

既然有人提出NUMA仿真软件,这表示开始有人尝试提升树莓派的内存存取效率,会引起各方关注此一环节的效能提升,是真的起用仿真软件来零成本提升效能,还是考虑在下一代的树莓派主控芯片上改善此一环节的硬件设计,对用户而言都是好消息。

新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片