alloc_page和kmalloc啥区别呢?

449 views
Skip to first unread message

刘知言

unread,
Jun 29, 2010, 3:44:29 AM6/29/10
to linux-kernel
谢谢。

alloc_page按页为单位分,kmalloc从slab分?如果从使用上讲,都是一样的效果么?
_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.org
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区: http://zh-kernel.org

Liu Hui

unread,
Jun 29, 2010, 4:22:06 AM6/29/10
to 刘知言, linux-kernel
你说的对啊,kmalloc有属于自己的slab。
另外,slab底层也是勇alloc_pages来分配页。

主要区别在于使用场合不同,你要是只想分配1KB内存,那用alloc_pages岂不是浪费。


--
Thanks & Best Regards
Liu Hui
--

刘知言

unread,
Jun 29, 2010, 5:18:56 AM6/29/10
to Liu Hui, linux-kernel
那请问get_free_page和alloc_pages/alloc_page区别呢?

如果想在kernel里分配比较多的,4k-64k大小的链表块,用哪个比较合适?还是用kmem_cache_alloc来搞?
为什么呢?

谢谢!

2010/6/29 Liu Hui <only...@gmail.com>:

Liu Lei

unread,
Jun 29, 2010, 5:24:15 AM6/29/10
to 刘知言, linux-kernel

在 2010-6-29,下午5:18, 刘知言 写道:

> 那请问get_free_page和alloc_pages/alloc_page区别呢?
>
> 如果想在kernel里分配比较多的,4k-64k大小的链表块,用哪个比较合适?还是用kmem_cache_alloc来搞?
> 为什么呢?
>

比较多是多少?如果非常多的话,用kmem_cache_alloc比较好吧。
如果一般的话,alloc_pages。

> 谢谢!
>
> 2010/6/29 Liu Hui <only...@gmail.com>:
>> 你说的对啊,kmalloc有属于自己的slab。
>> 另外,slab底层也是勇alloc_pages来分配页。
>> 主要区别在于使用场合不同,你要是只想分配1KB内存,那用alloc_pages岂不是浪费。
>>
>> 在 2010年6月29日 下午3:44,刘知言 <lzy...@gmail.com>写道:
>>>
>>> 谢谢。
>>>
>>> alloc_page按页为单位分,kmalloc从slab分?如果从使用上讲,都是一样的效果么?
>>> _______________________________________________
>>> Linux 内核开发中文邮件列表
>>> Linux-...@zh-kernel.org
>>> http://zh-kernel.org/mailman/listinfo/linux-kernel
>>> Linux 内核开发中文社区: http://zh-kernel.org
>>
>>
>> --
>> Thanks & Best Regards
>> Liu Hui
>> --
>>
> _______________________________________________
> Linux 内核开发中文邮件列表
> Linux-...@zh-kernel.org
> http://zh-kernel.org/mailman/listinfo/linux-kernel
> Linux 内核开发中文社区: http://zh-kernel.org


礼!

────────────────────────────
Liu Lei
<orphen...@gmail.com>

Liu Hui

unread,
Jun 29, 2010, 9:14:16 PM6/29/10
to 刘知言, linux-kernel
get_free_page也是调用alloc_pages,如果你的链表块大小不一样(4K, 5K,16K...),那就用kmalloc吧。

刘知言

unread,
Jun 30, 2010, 12:28:03 AM6/30/10
to Liu Hui, linux-kernel
我理解,
kmalloc只能在896M内核直接映射内存空间分配吧,那机器那末多内存岂不是浪费了?而且kmalloc最大一次只能分配128K,当然这个到不太重要,因为我要存的东西没有那么大。

alloc_pages可以一次分配多少M呢,2MB么?
kmem_cache_alloc是在896M内核直接映射内存空间分配,还是使用896以上的高端内存呢?

我想法是,有个比较长的链表,表项大小在4k-64k之间,可能有很多表项10w-100w左右,那算来要400MB-62GB,有可能把他们放在kernel么?


2010/6/30 Liu Hui <only...@gmail.com>:

刘知言

unread,
Jun 30, 2010, 3:30:45 AM6/30/10
to 蓝天宇, linux-...@zh-kernel.org
忘记抄送高人。

2010/6/30 刘知言 <lzy...@gmail.com>:
> 刘知言
>
> show details 2:34 PM (51 minutes ago)
>
> 呵呵,我是支持fs和raw device的,只是想问问,如果我基于内存能放多少。
>
> 我想问下:
> 1. 超出896MB,kernel映射能用到多少?而不报low_mem错误。
> 2. 如果按我上面的idea,我想肯定要映射高端内存吧?那用啥函数/方法最合适呢?kmem_cache_alloc or
> alloc_pages or somthing else.
>
> 多谢!
>
> @蓝天宇:
> 如果我尽可能映射高端内存,能用到大概多少?什么量级.
> kmap肯定是要用到的。那你的意思就是用alloc_page+kmap喽?
>
> 以上
>
> 2010/6/30 刘知言 <lzy...@gmail.com>:
>> 呵呵,我是支持fs和raw device的,只是想问问,如果我基于内存能放多少。
>>
>> 我想问下:
>> 1. 超出896MB,kernel映射能用到多少?而不报low_mem错误。
>> 2. 如果按我上面的idea,我想肯定要映射高端内存吧?那用啥函数/方法最合适呢?kmem_cache_alloc or
>> alloc_pages or somthing else.
>>
>> 多谢!
>>
>> 2010/6/30 蓝天宇 <lantia...@gmail.com>:
>>> ...
>>> 400MB-62GB,你把内存当硬盘用啊,这么大的东西,只能放在硬盘里了。可以参考文件系统。

Reply all
Reply to author
Forward
0 new messages