Linux Slub分配器(三)--创建缓存
Slub分配器创建缓存的过程和Slab差不多,主要的区别在于Slub分配器并不是直接创建一个新的缓存,而是先试图在已有的缓存中找到一个各方面属性和待创建缓存差不多的缓存,如果能找到的话则不会去创建新缓存,而是复用这个已有的缓存,以提高缓存的利用率。
find_mergeable()用来寻找一个可以复用的缓存,它会考察已有缓存和带创建的缓存在各方面是否匹配
再来看一个kmem_cache_create()中比较关键的函数--kmem_cache_open()
至此,关于新缓存各项属性的计算工作已完成,接下来只需在kmem_cache_open()中调用init_kmem_cache_nodes()和alloc_kmem_cache_cpus()来初始化struct kmem_cache_node和struct kmem_cache_cpu结构即可,对于UMA系统,这两种结构都是直接在struct kmem_cache中定义的,因此只需直接初始化即可,而对于NUMA系统,还需为这些对象在普通缓存中申请空间,过程较为繁琐,在此不做介绍了!
- 1楼zi77642475昨天 21:25
- 沙发依然在!