快速业务通道

Linux slab分配器剖析

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-21
后, kmem_cache_create 函数会返回对它的引用.注意这个函数并没有向缓存分配任何内存.相反,在试图从缓存(最初为空)分配对象时,refill 操作将内存分配给它.当所有对象都被使用掉时,也可以通过相同的操作向缓存添加内存.

  kmem_cache_destroy

  内核函数 kmem_cache_destroy 用来销毁缓存.这个调用是由内核模块在被卸载时执行的.在调用这个函数时,缓存为空.

  void kmem_cache_destroy( struct kmem_cache *cachep );

  kmem_cache_alloc

  要从一个命名的缓存中分配一个对象,可以使用 kmem_cache_alloc 函数.调用者提供了从中分配对象的缓存以及一组标志:

  void kmem_cache_alloc( struct kmem_cache *cachep, gfp_t flags );

  这个函数从缓存中返回一个对象.注意如果缓存目前为空,那么这个函数就会调用 cache_alloc_refill 向缓存中增加内存. kmem_cache_alloc 的 flags 选项与 kmalloc 的 flags 选项相同.表 2 给出了标志选项的部分列表.

  表 2. kmem_cache_alloc 和 kmalloc 内核函数的标志选项

  

标志

说明

GFP_USER

为 用户分配内存(这个调用可能会睡眠).

  要调优特定的 slab 缓存,可以简单地向 /proc/slabinfo 文件中以字符串的形式回转 slab 缓存名称和 3 个可调整的参数.下面的例子展示了如何增加 limit 和 batchcount 的值,而保留 shared factor 不变(格式为 “cache name limit batchcount shared factor”):

  # echo "my_cache 128 64 8" > /proc/slabinfo

  limit 字段表示每个 CPU 可以缓存的对象的最大数量. batchcount 字段是当缓存为空时转换到每个 CPU 缓存中全局缓存对象的最大数量. shared 参数说明了对称多处理器(Symmetric MultiProcessing,SMP)系统的共享行为.

  注意您具有超级用户的特权才能在 proc 文件系统中为 slab 缓存调优参数.

  SLOB 分配器

  对于小型的嵌入式系统来说,存在一个 slab 模拟层,名为 SLOB.这个 slab 的替代品在小型嵌入式 Linux 系统中具有优势,但是即使它保存了 512KB 内存,依然存在碎片和难于扩展的问题.在禁用 CONFIG_SLAB 时,内核会回到这个 SLOB 分配器中.更多信息请参看 参 考资料 一节.

  结束语

  slab 缓存分配器的源代码实际上是 Linux 内核中可读性较好的一部分.除了函数调用的间接性之外,源代码也非常直观,总的来说,具有很好的注释.如果您希望了解更多有关 slab 缓存分配器的内容,建议您从源代码开始,它是有关这种机制的最新文档.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号