我们使用模拟视频输入在 imx53 标准平台的屏幕上显示视频,但该平台在长时间显示视频时会出现问题。 平均而言,我们发现在屏幕上显示视频画面大约 3 周后,就会出现 DMA 内存碎片。 DMA 内存碎片过多,导致视频无法启动,因为它无法分配足够大的连续内存块,也就无法显示视频。
Linux 内核为 2.6.35.3 11_09,我们使用命令运行视频
/unit_tests/mxc_v4l2_tvin.out -ow 450 -oh 600 -ol 550 -ot 1 -r 6 -f YU12
我发现 cat /proc/buddyinfo 显示,随着时间的推移,空闲插槽的大小已降至启动视频所需的 0。
我发现这个内核版本不支持内存压缩,该版本旨在重新排序插槽以修复我们看到的内存碎片问题。
问题是
有没有人发现在 imx53 linux 2.6.35.3 11_09 映像上长时间显示视频有问题。
是否有人发现需要压缩内存碎片,因为在 2.6.35 版本中编译不成功。内核
提前感谢!
Tim
我们也开始遇到这种情况了。
在我们的例子中,这是由视频输入定期关闭和打开(以不同的比例显示图像)触发信号的。每次发生这种情况时(在"open()" 上),驱动程序都会分配一个非常大的"假缓冲区" 和四个"屏幕缓冲区" ,所有缓冲区都来自连续的 DMA 内存。
TX53 不断将日志记录到 U 盘上,使情况变得更糟。这些操作会缓存所有文件数据,这就是造成碎片的主要原因。"drop_caches" 的建议可以解决这个问题,但会导致停滞和其他问题。
尝试获取虚拟缓冲区失败。驾驶员有一个问题,那就是他们不能从中恢复过来。即使内存被释放,驱动程序也无法重新工作,直到设备电源循环。那是另一个错误。
有一个 2011 年的补丁"ENGR00159773-1" ,可以缓存虚拟缓冲区。后来有一个补丁"ENGR00169880" 在"probe()" 而不是在第一个"open()" 上分配这个缓冲区。
应用这些补丁(如果你有更新的版本,你应该已经有这些补丁了)会使其持续更长时间,但是它无法分配四个 " 帧缓冲区 " 中的第二个。目前还没有缓存这些数据的补丁(但应该有)。
建议"echo 1> /proc/sys/vm/lowmem_reserve_ratio" 确实解决了我们的问题。
你好
以下是有关该问题的考虑因素。
通常,SoC 外围设备使用 dma_alloc_coherent()分配内存;
该内核函数将返回连续的内存区域。
保留连续内存区域 :
$ echo 1> /proc/sys/vm/lowmem_reserve_ratio
这样设置参数后,内核将防止应用程序和文件
缓存 "过多 "的内存碎片。不过,这将限制应用程序分配的
内存量。
用于删除缓存 :
$ echo 3> /proc/sys/vm/drop_caches
这将释放所有系统缓存,但会对系统中运行
的其他应用程序造成影响,因为每次缓存释放时,这些应用程序都需要加载它们使用的文件。
被放弃。
有一些工具可以避免特定应用程序的文件缓存,如
pagecache-management
https://code.google.com/p/pagecache-mangagement
这是一个开放源码项目,没有得到飞思卡尔公司的维护和支持,
,但无论如何,它都可以帮助实现我们的意图。
祝您愉快,
Yuri
-----------------------------------------------------------------------------------------------------------------------
注:如果本帖回答了您的问题,请点击正确答案按钮。Thank you!
-----------------------------------------------------------------------------------------------------------------------