Memory management 写入大文件可防止大数据块DMA分配

Memory management 写入大文件可防止大数据块DMA分配,memory-management,linux-kernel,arm,dma,sata,Memory Management,Linux Kernel,Arm,Dma,Sata,我正在使用一个基于ARM处理器的板,该处理器运行linux(3.0.35)。该板具有1GB RAM,并连接到快速SSD HD和5MP摄像头 我的目标是捕获高分辨率图像并将其直接写入磁盘 一切进展顺利,直到我试图保存一个很长的视频(超过1GB的数据) 保存一个大文件后,我似乎无法重新加载相机驱动程序-它无法为流分配足够大的DMA内存块(在调用DMA_alloc_coherent()时) 我把范围缩小到Linux引导的场景(当大部分内存可用时),然后将随机数据写入一个大文件(>1GB),当我尝试加载

我正在使用一个基于ARM处理器的板,该处理器运行linux(3.0.35)。该板具有1GB RAM,并连接到快速SSD HD和5MP摄像头

我的目标是捕获高分辨率图像并将其直接写入磁盘

一切进展顺利,直到我试图保存一个很长的视频(超过1GB的数据)

保存一个大文件后,我似乎无法重新加载相机驱动程序-它无法为流分配足够大的DMA内存块(在调用DMA_alloc_coherent()时)

我把范围缩小到Linux引导的场景(当大部分内存可用时),然后将随机数据写入一个大文件(>1GB),当我尝试加载相机驱动程序时,它失败了

关于我的问题——

当我打开一个文件进行写入,写入大量数据,然后关闭文件时,用于将数据写入HD的内存不应该被释放吗

我可以理解为什么在HD访问期间内存会变得碎片化,但是当HD事务完成时-为什么内存仍然如此碎片化以至于我无法分配15MB的连续RAM

谢谢

[…]关闭文件,用于将数据写入HD的内存不应该被释放吗


否,它将被缓存,您可以为此检查
/proc/meminfo
dma\u alloc\u coherent()
函数是否只使用空闲内存是一个好问题

的确如此。很有可能写入闪存的速度相对较慢,而且DMA没有15MB的免费页面可供pin。谢谢!但是当涉及到新的内存分配时,缓存内存不是被认为是免费的吗?而且,如果我放弃缓存,问题仍然存在。。。