免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1806 | 回复: 9
打印 上一主题 下一主题

slab中初始化的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-10 18:09 |只看该作者 |倒序浏览
slab有优势的原因是说内核中普通对象进行初始化所需的时间超过了对其进行分配和释放所需的时间。那这个初始化是系统自己做的初始化,还是什么?举个例子说 比如我在内核模块中定义了一个struct a的结构,使用slab机制来分配这个对象。那么其中的说的初始化,是指哪方面的工作?

论坛徽章:
0
2 [报告]
发表于 2012-02-11 00:35 |只看该作者
slab有优势的原因是说内核中普通对象进行初始化所需的时间超过了对其进行分配和释放所需的时间。那这个初始化是系统自己做的初始化,还是什么?举个例子说 比如我在内核模块中定义了一个struct a的结构,使用slab机制来分配这个对象。那么其中的说的初始化,是指哪方面的工作?
================================================================
没听过slab有这种初始化对象优势的说法。《深入Linux设备驱动程序内核机制》第三章“分配内存”中slab的叙述,slab在Linux内核中在页分配基础上实现小额度内存分配,一般内核模块开发者或者设备驱动程序员都不会直接和它打交道,因为它对外部的接口是以kmalloc等方式出现的。具体到你的例子,“提供小内存分配并不是slab分配器的唯一用途,在某些情况下,有些内核模块可能需要频繁地分配和释放相同的内核对象。slab分配器在这种情况下可以作为一种内核对象的缓存:对象在slab中被分配,当释放对象时,slab分配器并不会将对象占用的空间返回给伙伴系统,如此,当下次再次分配该对象时,可以从slab中直接得到对象的内存。另外,由于slab分配器代码经过精心的设计,充分利用了CPU硬件的高速缓存,可以想象,在这些内核对象被频繁分配和释放的应用场景中,使用slab分配器的这种优势,可以大大提升系统的性能”..."相对于系统已经定义好的cache_cache与size_cache,这里讨论的内容实际上是内核模块开发者如何定制满足自己特定要求的kmem_cache"。简言之,你可以使用kmem_cache_create来分配你的数据结构。

论坛徽章:
0
3 [报告]
发表于 2012-02-12 16:02 |只看该作者
还有一个优点就是减少内部碎片。具体的信息可以参考《深入理解linux内核》中的323页,内存区管理中有介绍

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2012-02-14 08:21 |只看该作者
回复 2# MagicBoy2010
多谢分享!

   

论坛徽章:
0
5 [报告]
发表于 2012-03-03 12:54 |只看该作者
楼主可能是引用了这段内容吧:
Linux 所使用的 slab 分配器的基础是 Jeff Bonwick 为 SunOS 操作系统首次引入的一种算法。Jeff 的分配器是围绕对象缓存进行的。在内核中,会为有限的对象集(例如文件描述符和其他常见结构)分配大量内存。Jeff 发现对内核中普通对象进行初始化所需的时间超过了对其进行分配和释放所需的时间。因此他的结论是不应该将内存释放回一个全局的内存池,而是将内存保持为针对特定目而初始化的状态。例如,如果内存被分配给了一个互斥锁,那么只需在为互斥锁首次分配内存时执行一次互斥锁初始化函数(mutex_init)即可。后续的内存分配不需要执行这个初始化函数,因为从上次释放和调用析构之后,它已经处于所需的状态中了。


全文链接:https://www.ibm.com/developerworks/cn/linux/l-linux-slab-allocator/

论坛徽章:
0
6 [报告]
发表于 2012-03-05 13:14 |只看该作者
回复 5# __general__


    是的,所以不知道他说的那个初始化指的是什么,是管理内存分配的内核部分要做的一些初始化,还是说,程序员自己程序中的初始化动作?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
7 [报告]
发表于 2012-03-05 14:52 |只看该作者
回复 2# MagicBoy2010

提出SLAB的原始论文中确实提到这个优势。典型例子举的好像是信号量,释放时计数器肯定归0了。但是不典型的例子很多,不知道现在这个优势还算不算数。

论坛徽章:
0
8 [报告]
发表于 2012-03-06 12:01 |只看该作者
提出SLAB的原始论文中确实提到这个优势。典型例子举的好像是信号量,释放时计数器肯定归0了。但是不典型的例子很多,不知道现在这个优势还算不算数。

==========================
问题是现在代码的实际情况呢, A是初始化状态, 经过使用达到B状态,然后释放,它还能回到A吗?如果有这个优势,我猜测它的负担也会转嫁到释放的操作中。。。

论坛徽章:
0
9 [报告]
发表于 2012-03-06 17:00 |只看该作者
回复 6# iceyes342


    /proc/slabinfo列举了当前系统中的slab对象的信息,直观的看的话,都是内核中重要的数据结构,而且用户自定义的数据结构一是随机性很大,二是未必能达到很大的”量“(让系统为它专门维护一个缓冲区),难道有供用户进程使用的通用的slab?本人小白,坐等高手解答。

论坛徽章:
0
10 [报告]
发表于 2012-03-07 10:18 |只看该作者
回复 9# __general__


    我说的用户就是说,用户自己编写的内核模块中的数据结构
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP