Facebook的Roman Gushcin發送的這個patch把Gigantic巨頁(SIZE:1GB)與CMA進行了一個完美的結合:
https://lkml.org/lkml/2020/3/9/1135
CMA有利于在開機的時候就預留一大片內存,但是這片內存如果不被cma_alloc()申請走,則可被movable的頁面復用,并不會造成直接的浪費。
而Linux的Gigantic hugepage則要求能夠在運行時通過
echo 10 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
這樣的方法能申請一定數量的1GB Gigantic巨頁,由于運行時內存碎片化掉了,這種1GB的Gigantic巨頁很可能申請不到。通過CMA的方法,則可以讓這種申請在運行時成功。
所以整個故事是:
CMA比如預留4GB內存專門供給hugetlb,如果沒有人去進行Gigantic巨頁設置,則這個4GB就平時被applications的movable頁面使用掉了。
如果有人通過
echo 1 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
拿走1GB,則這1GB就被從CMA拿走,剩下的3GB仍然可以被movable page使用。
用戶可以在開機的時候通過hugetlb_cma bootargs來設置CMA的大小,如果是NUMA架構的(假設有4個NUMA NODE),設置hugetlb_cma=4GB大小,則每個NUMA節點會分配到1GB大小的CMA。
從代碼看起來,現在申請1GB的gigantic頁面的時候,如果有這種CMA區域,是先走CMA區域的:

釋放的時候則是也先看有無這種CMA:

如果這種CMA根本不存在,還是會走到老的代碼路徑:
alloc_contig_pages(nr_pages, gfp_mask, nid, nodemask);
和
free_contig_range(page_to_pfn(page), 1 << order);
-
內存
+關注
關注
9文章
3210瀏覽量
76376 -
CMA
+關注
關注
0文章
31瀏覽量
10236
原文標題:Gigantic巨頁與CMA的完全結合
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
國巨電子榮獲陽光電源2025年度卓越質量獎
國巨薄膜精密貼片電阻RT1210系列在五大領域的典型應用
國巨0805貼片電阻阻值的詳細
yageo電容-國巨陶瓷電容-國巨陶瓷貼片電容的詳細介紹
國巨貼片電容常用的材質有哪些?
昂洋科技教你輕松識別國巨貼片電容
國巨軟端電容CS1206系列在電源電路中具體怎么應用?
杭州巨力絕緣材料有限公司選購我司拉力試驗機
巨霖科技喬遷儀式隆重舉行
Allegro Skill布局功能之按頁擺放器件介紹
國巨電阻的標識解讀
愛普生SG-3031CMA有源晶振在汽車雷達中的應用
Gigantic巨頁與CMA的完全結合
評論