Linux 内存管理 Kmal loc
Linux内存管理: Kmal loc
这里只说物理内存管理l inux内核的看了很多讲解的内存的东西但是自己总结的时候总感觉无从下手这里就从实际物理内存分配接口开始吧。
Kmal loc它分配连续的物理内存空间它不负责把分配的内存空间清
零它能分配多大的呢并且它只能分配ZONE_NORMAL的不能分配dma 和high里的也就是只分配低端内存.一般情况下内存被分为三个zoneNORMAL、 DMA、 HIGH.
这个函数是建立在slab分配器的基础上的,通过cache而cache有通过slab分配obj 。在开始分析kmal loc函数之前我们需要说明一下l inux内核物理内存的分配函数API __get_free_pages它会调用al loc_pages它的特点是不能从HIGHMEM分配内存分配2的幂个连续物理页面。它有简化模式只分配一page __get_free_page,而get_zeroed_page接口分配的页面内容对应填充为0.从dma分配可以调用__get_dma_pages(它本质也是调用__get_free_pages
那么终极接口al loc_pages它可以从任何zone里申请内存 当然前提设置对应的flags.参考内核 l inux3.18.13参考书籍:《l inux内核设计与实现》
《l inux设备驱动程序》 《深入理解l inux设备驱动内核机制》
下面我们就说说kmal loc 关于分配时候的flags这里不讨论具体可以参考资料我们先看头文件#include而关于它的具体实现我们看slab.h
中
一般系统默认#include
这里可以补充下代码关于kmal loc_sizes.h
我们看到函数开头需要说明一下 __bui ltin_constant_p是编译器gcc 内置函数用于判断一个值是否为编译时常量如果是常数函数返回1 否则返回0。此内置函数的典型用法是在宏中用于手动编译时优化显然如果size为常数则用__kmal loc(size, flags);申请内存.
它查询需要分配的内存在哪个系统cache然后调用
我们看具体代码
它实际的分配是slab_al loc
它调用objp=__do_cache_al loc(cachep, flags);除了检查一些标志等继续调用
____cache_al loc(cachep, flags);
它是一个统一的接口 有检测numa和uma l inux默认是uma除非指定了numa
这里我们假定是第一次使用分配内存那么根据在kmem_cache_init 中的mal loc_sizes[]的初始化在kmal loc的时候返回的kmal loc_cache指针指向的cache中用到这样个函数我们知道不论array被赋了什么值最后都要初始化avai l等值.
所以如果array不可用那么就会调用当然如果array可用那么直接返回申请的obj的内存指针.
由于第一次使用nodel ist上slab链表都为空所以must_grow
它调用cache_grow这个函数首先计算了slab着色处理。然后调用kmem_getpages申请page大小根据cache->gfporder它返回申请pages 的虚拟地址.
而关于slab着色跟硬件缓冲有关为了尽量避免缓存冲突不命中问题提高效率cache_l ine问题。可以参考《深入理解计算机系统》。
具体操作见
我们看看另外一个很重要的操作
CUBECLOUD(魔方云)成立于2016年,亚太互联网络信息中心(APNIC)会员,全线产品均为完全自营,专业数据灾备冗余,全部产品均为SSD阵列,精品网络CN2(GIA) CU(10099VIP)接入,与当今主流云计算解决方案保持同步,为企业以及开发者用户实现灵活弹性自动化的基础设施。【夏日特促】全场产品88折优惠码:Summer_2021时间:2021年8月1日 — 2021年8月8日香港C...
Digital-vm是一家成立于2019年的国外主机商,商家提供VPS和独立服务器租用业务,其中VPS基于KVM架构,提供1-10Gbps带宽,数据中心可选包括美国洛杉矶、日本、新加坡、挪威、西班牙、丹麦、荷兰、英国等8个地区机房;除了VPS主机外,商家还提供日本、新加坡独立服务器,同样可选1-10Gbps带宽,最低每月仅80美元起。下面列出两款独立服务器配置信息。配置一 $80/月CPU:E3-...
CloudServer是一家新的VPS主机商,成立了差不多9个月吧,提供基于KVM架构的VPS主机,支持Linux或者Windows操作系统,数据中心在美国纽约、洛杉矶和芝加哥机房,都是ColoCrossing的机器。目前商家在LEB提供了几款特价套餐,最低月付4美元(或者$23.88/年),购买更高级别套餐还能三个月费用使用6个月,等于前半年五折了。下面列出几款特别套餐配置信息。CPU:1cor...