多谢各位的回复。
To 罗辉
alloc_pages分配的最小单位是页,在需要大量内存的时候是个好的解决办法,但是在不需要大内存空间的条件下,或者需求空间不确定的(可能有时候需要较大有时候需求很小)时候会造成浪费。这个是我的理解。
目前的情况是,需要按64字节对齐,而且每次DMA的数据,从用户数据上来看,数据长度不确定,还是以低于4K的情况占绝大多数。所以使用alloc_pages并不是特别理想。
To Adam
那个算法本身没有问题,我的concern只是:
#1 对于某些场景而言,会有一些浪费,比如分配1字节的buffer但是要求64字节,那么浪费的字节数为63字节。
~ 不过这种浪费
#2 需要额外多保存一个指针,那么需要在数据结构里添加,对于想做upsteam的code,似乎不是很合适的改法。如果能有一个更common的改法就更好了。但毫无疑问也是一个解决方法。
不知道我是否把我的意思表达的足够清楚。:)
对于
http://www.linux-mips.org/archives/linux-mips/2004-10/msg00187.html,那个thread没完全看
这个的思路似乎是直接改slab中关于alignment的设定,因为kmalloc其实对于小于8K(?)的空间是会从slab去拿。
但是改slab会影响整个OS,而且对齐字节数越高,slab的效果就越差。 而且本意也只是针对个别设备的特殊要求。
To Xiaotian Feng
kmem_cache 系列函数其实类似于另外一套DMA 分配的方式。
>struct dma_pool *dma_pool_create(const char *name, struct device *dev,
> size_t size, size_t align, size_t boundary)
不想使用这个dma_pool的原因是,每次DMA传输的数据都是不定长度的,而Pool建立会要求size限制,为每次传输create/alloc/destory dma_pool 感觉也会有不小的开销。
谢谢大家的回复,这个问题我清楚多了,之后我会稍微总结下发出来的。
Ze
谢谢t
------------------ 原始邮件 ------------------
发件人: "罗辉"<
luohu...@gmail.com>;
发送时间: 2010年9月8日(星期三) 中午12:34
收件人: "jiehunt"<
jiehu...@gmail.com>;
抄送: "linux-kernel"<
linux-...@zh-kernel.org>;
主题: Re: 回复: LINUX中如何分配按N字节对齐的内存
我测试过用kmalloc()分配的内存最大为128K,这个结果可能是平台相关的,一
般dma内存分配最终都会调用alloc_pages()函数
于 2010年09月08日 12:31, jiehunt 写道:
> 感觉这个方法可行,alloc_pages应该分配的就是连续的页面
>
> 在 2010年9月8日 下午1:26,罗辉 <
luohu...@gmail.com
> <mailto:
luohu...@gmail.com>>写道:
>
> 用 alloc_pages()函数就可以分配页对齐的内存,一般是4k、8k、16k字节
> 对齐等
>
> 于 2010年09月08日 12:14, Yan, Ze 写道:
>
> 请问怎么写这个宏,麻烦给个思路就行了。 谢谢
>
>
> Ze
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "Adam Jiang"<
jiang...@gmail.com
> <mailto:
jiang...@gmail.com>>;
> 发送时间: 2010年9月8日(星期三) 中午12:05
> 收件人: "刘知言"<
lzy...@gmail.com <mailto:
lzy...@gmail.com>>;
> 抄送: "Yan, Ze"<
5412...@qq.com <mailto:
5412...@qq.com>>;
> "linux-kernel"<
linux-...@zh-kernel.org
> <mailto:
linux-...@zh-kernel.org>>;
> 主题: Re: LINUX中如何分配按N字节对齐的内存
>
>
> On Wed, Sep 08, 2010 at 11:50:44AM +0800, 刘知言 wrote:
>
> 写个宏就搞定了
>
> 如何写?用GCC的__attribute__宏么?
>
> /阿当
>
>
> 2010/9/8 Yan, Ze<
5412...@qq.com <mailto:
5412...@qq.com>>:
>
> 限制于总线能力和跨边界导致的性能下降问题,所以DMA需求
> 按照一定字节对齐的内存。
>
>
> Kmalloc似乎是分配不了这样的内存,求教大家,有没有好办法。
>
>
> Ze
> _______________________________________________
> Linux 内核开发中文邮件列表
>
Linux-...@zh-kernel.org
> <mailto:
Linux-...@zh-kernel.org>
>
http://zh-kernel.org/mailman/listinfo/linux-kernel
> Linux 内核开发中文社区:
http://zh-kernel.org
>
> _______________________________________________
> Linux 内核开发中文邮件列表
>
Linux-...@zh-kernel.org <mailto:
Linux-...@zh-kernel.org>
>
http://zh-kernel.org/mailman/listinfo/linux-kernel
> Linux 内核开发中文社区:
http://zh-kernel.org
>
> _______________________________________________
> Linux 内核开发中文邮件列表
>
Linux-...@zh-kernel.org <mailto:
Linux-...@zh-kernel.org>
>
http://zh-kernel.org/mailman/listinfo/linux-kernel
> Linux 内核开发中文社区:
http://zh-kernel.org
>
>
> _______________________________________________
> Linux 内核开发中文邮件列表
>
Linux-...@zh-kernel.org <mailto:
Linux-...@zh-kernel.org>
>
http://zh-kernel.org/mailman/listinfo/linux-kernel
> Linux 内核开发中文社区:
http://zh-kernel.org
>
>
_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.org
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区:
http://zh-kernel.org_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.orghttp://zh-kernel.org/mailman/listinfo/linux-kernelLinux 内核开发中文社区:
http://zh-kernel.org