FAQ使用gstreamer进行视频解码进程连续创建和销毁。会导致内存泄漏

截至2022/2/28。问题涉及瑞芯微kernel 4.19的所有芯片系列。对使用gstreamer进行视频解码进程连续创建和销毁。会导致内存的buffer/cache不断增加导致触发oom。
测试发现是由于mpp驱动的dma buf不能随进程结束自动释放的原因。
更新时间:2022.03.01 浏览量:0

测试发现是由于mpp驱动的dma buf不能随进程结束自动释放的原因。

复现方法:

# 停止显示服务[root@RK3568:/]# /etc/init.d/S50launcher stop # 确认没有dmabuf注册[root@RK3568:/]# grep objects /sys/kernel/debug/dma_buf/bufinfoTotal 0 objects, 0 bytes # 测试命令[root@RK3568:/]# while true; do timeout 1 gst-play-1.0 --no-interactive --audiosink=fakesink --videosink=fakesink /1.mp4 ;done &>/dev/null &# 监控dma buf数量 正常数量应该保持在一个稳定值[root@RK3568:/]# watch -n 1 "grep objects /sys/kernel/debug/dma_buf/bufinfo"

     


解决方法:kernel中应用以下补丁

--- a/drivers/video/rockchip/mpp/mpp_common.c+++ b/drivers/video/rockchip/mpp/mpp_common.c@@ -319,8 +319,16 @@ int mpp_session_deinit(struct mpp_session *session)        mpp_dbg_session("session %p:%d task %d release\n",                        session, session->index, task_count);-       if (task_count)+       if (task_count) {+               struct mpp_dev *mpp = session->mpp;+               if (mpp) {+                       mpp_session_clear(mpp, session);+                       mpp_iommu_down_write(mpp->iommu_info);+                       mpp_dma_session_destroy(session->dma);+                       mpp_iommu_up_write(mpp->iommu_info);+               }                return -1;+       }

     



  • 上一篇:RK3568使用gstreamer循环播放视频偶发死锁,卡死在最后一帧
  • 下一篇:如何测试评估RK3568 Linux SDK的视频编解码性能