前言
工作中,我们经常能够遇到一些对内存有特殊要求的硬件,有些是其本身的设计要求所至,而另一些则是从系统性能考虑(如不能支持Scatter/gather DMA ),两种情况下都必须为其driver 分配大块的物理地址连续内存块。更槽糕的是,系统连续运行时间越长,大块物理地址连续的内存块分配到的可能性就越低。大多数情况下(内存泄露除外),你会发现系统的剩余内存( free 或cat /proc/meminfo )足够大却依然无法分配到,很显然,内存碎片( memory fragmentation )出现了。在uClinux系统中,由于没有VM的存在,问题更加突出。当你播放一个H.264 或者WMV HD(1920x1080p) 的视频时,甚至播放一个WMA Pro,系统都有可能“Out of memory",根本原因还是系统此时无法为video decode 或audio decoder 分配一个大块的物理地址连续内存。
全文概要
本文首先简单介绍了Linux kernel 中常用的几种内存分配方式(kmalloc, vmalloc, alloc_page类函数),从能分配的上限和分到的可能性来看是否能够满足需求;接着 介绍了两个具体的实际解决方案:
1. 预留内存(mem=)
2. bigphysarea kernel patch.
附件为全文pdf.
|
文件: |
bigphysarea.pdf |
大小: |
280KB |
下载: |
下载 | |
阅读(8721) | 评论(0) | 转发(0) |