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的值.
这个只是一个小小的开始吧 内存管理本来就博大精深 只有遇到具体问题具体分析来加深理解了.
可以看到这次国庆萤光云搞了一个不错的折扣,香港CN2产品6.5折促销,还送50的国庆红包。萤光云是2002年创立的商家,本次国庆活动主推的是香港CN2优化的机器,其另外还有国内BGP和高防服务器。本次活动力度较大,CN2优化套餐低至20/月(需买三个月,用上折扣+代金券组合),有需求的可以看看。官方网站:https://www.lightnode.cn/地区CPU内存SSDIP带宽/流量价格备注购...
10gbiz发布了9月优惠方案,针对VPS、独立服务器、站群服务器、高防服务器等均提供了一系列优惠方面,其中香港/洛杉矶CN2 GIA线路VPS主机4折优惠继续,优惠后最低每月仅2.36美元起;日本/香港独立服务器提供特价款首月1.5折27.43美元起;站群/G口服务器首月半价,高防服务器永久8.5折等。这是一家成立于2020年的主机商,提供包括独立服务器租用和VPS主机等产品,数据中心包括美国洛...
公司介绍成都随风云科技有限公司成立于2021年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新&...