Gigantic巨页与CMA的完全结合

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);

Atmel联手英特尔推出更加安全的物联网应用
高通8155智能座舱测试方案
台积电官宣3nm正式量产,五年产出1.5万亿美元
摩托罗拉改进LTE自组织网络解决方案
14项或将实现的打击犯罪新科技
Gigantic巨页与CMA的完全结合
海尔中央空调通过线上线下N个触点网络 全方位联动升级用户体验
基于GEF的MiniGUI可视化开发工具设计
养老院IPTV数字电视系统概述及功能
Python程序语法元素及程序格式框架分析
高压功率放大器原理和应用场合介绍
如何用板牙套丝呢?
Python爬虫之requests模块教程
【BI系统】选型常见问题解答二
中国移动杨光:打造行业应用示范,全面推动5G融入千行百业
俄罗斯推液体黄金手机?苹果iPhone X只需要3万?
Mouser引入Panasonic PAN1760模块 为您揭秘蓝牙技术
基于芯片实现高精度数字温度计测量系统的设计
魅族PRO 6s直降200,现售2499元!魅族PRO 6s大降价:5.2寸压感屏,4G+64G+24W快充!
被高通骁龙835卡住喉咙的小米6、诺基亚8结局是又被推迟!