帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
Linux核心修補程式讓第五代樹莓派增速18%
 

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

瀏覽人次:【127】


圖一 : 第五代樹莓派單板電腦(圖片來源: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多元共融 協助打造幸褔職場環境
» 報告:2024年軟體漏洞評級見五大趨勢


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

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.3.147.69.132
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: webmaster@ctimes.com.tw