Linux内存管理 Kmem_cache_init
之前多多少少接触过cache之类的东西总觉的很神秘 当然cache 就是为了读写内存更高效。 比如查看meminfo或者slabinfo的时候你是否真的对内存机制理解的很清晰 参考内核l inux
3.8.13
我们看看调用它的函数接口
这个函数在start_kernel里调用.下面我们就看看kmem_cache_init();//默认slab分配器第一行来自一个全局的指针变量即为创建第一个cache
kmem_cache
在mm/slab_common.c中struct kmem_cache*kmem_cache;
创建的所有cache都会挂在LIST_HEAD(slab_caches);这个全局链表上.在cat/proc/slabinfo可以查看》 这里可以看看struct kmem_cache在slab_def.h中
这个结构体里面几个关键的元素之前在kmal loc里已经说到了。 而kmem_cache_boot则是注释解释的已经很清晰了.
而setup_nodel ists_pointer的作用就是把struct kmem_cache里array 指针地址存放在nodel ists.目的是为了便于操作指针.对于一致性内存访问inode只有一个.
它是slab.c中静态全局变量kmem_l ist3_init初始化slab的三个链表slabs_ful l 、 slabs_partial、slabs_free.为什么初始化这个和cache
组成结构有关系可以看个图
这里CACHE_CACHE在文件的开头部分被定义为0.
接着就要开始了真正的创建cache的工作并且给出了初始化步骤和说明
首先创建第一个cache它名为kmem_cache并且kmem_cache指针变量指向
了kmem_cache_boot.下面我们看看create_boot_cache函数
而它接着调用了__kmem_cache_create这是最关键的函数
它里面有个很有趣的函数很关键的一个函数它泄露了slab具体管理obj的布局和方法.
经过上面的初始化和设置最后调用setup_cpu_cache就完成了一个创建cache的工作.接着进行第2、 3步的工作
这里在说一下cache_names和mal loc_sizes
这里就不扩展开了.create_kmal loc_cache实际上是调用create_boot_cache.把kernel预定义的通用cache创建一遍.之后我们进入第四步、第5步
最后把slab_state状态设置为up即已经可以正常使用了。虽然上面大部分是代码具体申请内存的流程前面kmal loc已经讲过了。仅仅是为了弄明白cache到底是个什么玩意 以及如何初始化的。
在kmem_cache_init后还有一个kmem_cache_init_late函数.它主要是调用
了enable_cpucache和注册一个cpu通知连
还记不记得之前我们分析batchcount的时候的矛盾点
它会根据obj size计算l imit值再去计算batchcount的值.
这个只是一个小小的开始吧 内存管理本来就博大精深 只有遇到具体问题具体分析来加深理解了.
轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。活动规则:用户购买任意全区域云服务器月付以上享受免费更换IP服...
PhotonVPS 服务商我们是不是已经很久没有见过?曾经也是相当的火爆的,我们中文习惯称作为饭桶VPS主机商。翻看之前的文章,在2015年之前也有较多商家的活动分享的,这几年由于服务商太多,乃至于有一些老牌的服务商都逐渐淡忘。这不有看到PhotonVPS商家发布促销活动。PhotonVPS 商家七月份推出首月半价Linux系统VPS主机,首月低至2.5美元,有洛杉矶、达拉斯、阿什本机房,除提供普...
上次部落分享过VirMach提供的End of Life Plans系列的VPS主机,最近他们又发布了DEDICATED MIGRATION SPECIALS产品,并提供6.5-7.5折优惠码,优惠后最低每月27.3美元起。同样的这些机器现在订购,将在2021年9月30日至2022年4月30日之间迁移,目前这些等待迁移机器可以在洛杉矶、达拉斯、亚特兰大、纽约、芝加哥等5个地区机房开设,未来迁移的时...