账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
Linux核心修补程式让第五代树莓派增速18%
 

【作者: 陸向陽】2024年07月31日 星期三

浏览人次:【132】


图一 : 第五代树莓派单板电脑(图片来源:Amazon)
图一 : 第五代树莓派单板电脑(图片来源:Amazon)

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


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


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 %u\n",


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模拟软体,这表示开始有人尝试提升树莓派的记忆体存取效率,会引起各方关注此一环节的效能提升,是真的起用模拟软体来零成本提升效能,还是考虑在下一代的树莓派主控晶片上改善此一环节的硬体设计,对用户而言都是好消息。


(本文由VMAKER授权转载;连结原文网址


延伸阅读


Tvrtko Ursulin提交NUMA模拟的相关讯息(英文):


https://lore.kernel.org/lkml/20240625125803.38038-1-tursulin@igalia.com/


相关文章
树莓派推出AI摄影机、新款显示器
多功能嵌入式系统新未来:从Android到Raspberry Pi 3
第九届盛群杯HOLTEK MCU创意大赛─嵌入式Wi-Fi门诊叫号与报到系统
嵌入式Linux系统转移关键探讨 (上)
让Windows和Linux一起跳桑巴舞
comments powered by Disqus
相关讨论
  相关新闻
» 跨域整合培育创新人才 暨大推动AI赋能资讯科技课程
» Fortinet资安技能落差报告:近9成企业资料外泄因技能落差相关
» 资策会成立全台首家车辆软体评测单位 打造智慧车辆信赖环境
» 震旦家具推动DEI多元共融有成 协助打造幸??职场环境
» 报告:Action12024 年软体漏洞评级五大趋势


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK87VDB09NESTACUKE
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw