linux 中vmalloc实现简述

vmalloc 用途

vmalloc只用于内核模块的逻辑地址分配,也就是说它的逻辑地址是挂在init_mm的pgd页表上的。它可将几段不连续物理区域合并分配一个连续逻辑区域。主要用于内核和驱动。

vmalloc 实现

入口在__vmalloc_node_range。

首先分配一个vm_struct,分配一个逻辑地址区 到给它,并插入全局vmap_area_root红黑树中(__alloc_vmap_area),逻辑地址区的范围在VMALLOC_START(0xffffc90000000000UL)到VMALLOC_END之间,大小为32T。

通过kmalloc_node分配一组struct page,然后用页分配器分配从per cpu page list 分配一批页 (__alloc_pages_bulk,不是调用page_alloc接口去分配多页的块),当pcplist中不足时,会从buddy上再分配一批页到pcplist上。buddy选择numa的顺序,是先从最近的numa节点分配,再按numa距离去找下一个近的numa节点分配,分配过程中是否尝试低水位分配、当指定迁移类型内存不够是否优先从其它numa节点同一迁移类型分配还是由本节点其它迁移类型分配,由vm_area_alloc_pages传入的gfp决定。

最后将分配的一批页逐页映射到init_mm页表的pte上(vmap_pages_range_noflush),实现逻辑地址的连续。

参考

要根据逻辑地址找到对应struct page,或根据struct page找到它的物理地址可以参考: https://blog.csdn.net/qq_37517281/article/details/134713650

一个问题

逻辑上连续的内存映射为物理上不连续内存,相对会比逻辑和物理都连续的内存,会造成更多tlb抖动吗?没学过这个,不知道答案

相关推荐
tg_xianheyun7 分钟前
腾讯云国际账号注册代充值服务商怎么选?
大数据·运维·服务器·云计算·github·腾讯云·cdn加速
w01_02_0318 分钟前
虚拟机, ubuntu , samba
linux·运维·ubuntu
佳&弥19 分钟前
数据库提权
服务器·数据库·安全·web安全·网络安全
渣渣盟23 分钟前
Nginx 从零到上手:Windows & Linux 双环境教程
linux·windows·nginx
Dola_Zou26 分钟前
CodeMeter Linux 部署与配置指南
linux·运维·自动化·软件加密
土星云SaturnCloud30 分钟前
充电站AI视觉算法全方案:安全监管+运营提效+服务升级,土星云边缘计算赋能场站智能化
服务器·人工智能·ai·边缘计算·ai视觉
MSTcheng.32 分钟前
【Linux学习】Linux学习第二弹——Linux基本指令1
linux·运维·服务器·学习·指令
国科安芯35 分钟前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
今天AI了吗38 分钟前
AI 数据安全治理框架:模型能力与数据权限的边界在哪里
java·linux·开发语言·人工智能·python·深度学习·机器学习
不一样的少年_43 分钟前
Docker 容器操作:运行、停止、查看与删除
linux·docker·容器