不断执行推理,最终🧨 E RKNN: failed to allocate fd, ret: -1, errno: 12, errstr: Cannot allocate memory

  • 下面是补充的日志,可以看到FLASH层面没什么不同。但是程序就是无法再次运行,需要重新拔插。
    爆内存后的 df -h:
    Filesystem Size Used Available Use% Mounted on
    ubi0:rootfs 67.1M 65.8M 1.3M 98% /
    devtmpfs 16.7M 0 16.7M 0% /dev
    tmpfs 16.8M 0 16.8M 0% /dev/shm
    tmpfs 16.8M 172.0K 16.6M 1% /tmp
    tmpfs 16.8M 516.0K 16.3M 3% /run
    /dev/ubi4_0 22.4M 17.1M 5.3M 77% /oem
    /dev/ubi5_0 4.5M 3.1M 1.4M 68% /userdata

    重启后:
    # df -h
    Filesystem Size Used Available Use% Mounted on
    ubi0:rootfs 67.1M 65.9M 1.2M 98% /
    devtmpfs 16.7M 0 16.7M 0% /dev
    tmpfs 16.8M 0 16.8M 0% /dev/shm
    tmpfs 16.8M 152.0K 16.6M 1% /tmp
    tmpfs 16.8M 524.0K 16.3M 3% /run
    /dev/ubi4_0 22.4M 17.1M 5.3M 76% /oem
    /dev/ubi5_0 4.5M 3.1M 1.4M 68% /userdata
  • 您好,资源释放问题可以参考viewtopic.php?t=652,RKNN使用的内存是和多媒体共用的CMA,和linux系统的CMA不一致所以相应的申请释放接口也是不通用的,仅观察内存的占用变化是无法确定此时CMA的使用情况的,可以使用grep -i cma /proc/meminfo查看一下CMA使用情况
  • Crocodile wrote: 2024-06-19 3:27 您好,资源释放问题可以参考viewtopic.php?t=652,RKNN使用的内存是和多媒体共用的CMA,和linux系统的CMA不一致所以相应的申请释放接口也是不通用的,仅观察内存的占用变化是无法确定此时CMA的使用情况的,可以使用grep -i cma /proc/meminfo查看一下CMA使用情况
    您好!我重复了:1. 记录CMA使用情况 2. 测试可以成功运行 3. 重复执行 4. 报错 5. 记录CMA使用情况
    发现CMA的使用情况和内存的使用情况一样,都是相差不大,但是无法再次加载RKNN模型,必须要拔插重启才可以。

    这是重复测试前的CMA,
    # grep -i cma /proc/meminfo
    CmaTotal: 24576 kB
    CmaAllocated: 12 kB
    CmaReleased: 24564 kB
    CmaFree: 0 kB
    这是测试后,fail的CMA:
    # grep -i cma /proc/meminfo
    CmaTotal: 24576 kB
    CmaAllocated: 12 kB
    CmaReleased: 24564 kB
    CmaFree: 0 kB
    # /data/RKNN/rknn_deepsleep_demo /data/RKNN/model/model.rknn /tmp/test.jpg
    E RKNN: failed to allocate fd, ret: -1, errno: 12, errstr: Cannot allocate memory
    E RKNN: failed to allocate model memory!, size: 8239104, flags: #2
    rknn_init fail! ret=-1
    init_yolov5_model fail! ret=-1 model_path=/data/RKNN/model/model.rknn
  • ezreal wrote: 2024-06-19 5:51
    Crocodile wrote: 2024-06-19 3:27 您好,资源释放问题可以参考viewtopic.php?t=652,RKNN使用的内存是和多媒体共用的CMA,和linux系统的CMA不一致所以相应的申请释放接口也是不通用的,仅观察内存的占用变化是无法确定此时CMA的使用情况的,可以使用grep -i cma /proc/meminfo查看一下CMA使用情况
    您好!我重复了:1. 记录CMA使用情况 2. 测试可以成功运行 3. 重复执行 4. 报错 5. 记录CMA使用情况
    发现CMA的使用情况和内存的使用情况一样,都是相差不大,但是无法再次加载RKNN模型,必须要拔插重启才可以。

    这是重复测试前的CMA,
    # grep -i cma /proc/meminfo
    CmaTotal: 24576 kB
    CmaAllocated: 12 kB
    CmaReleased: 24564 kB
    CmaFree: 0 kB
    这是测试后,fail的CMA:
    # grep -i cma /proc/meminfo
    CmaTotal: 24576 kB
    CmaAllocated: 12 kB
    CmaReleased: 24564 kB
    CmaFree: 0 kB
    # /data/RKNN/rknn_deepsleep_demo /data/RKNN/model/model.rknn /tmp/test.jpg
    E RKNN: failed to allocate fd, ret: -1, errno: 12, errstr: Cannot allocate memory
    E RKNN: failed to allocate model memory!, size: 8239104, flags: #2
    rknn_init fail! ret=-1
    init_yolov5_model fail! ret=-1 model_path=/data/RKNN/model/model.rknn
    如果排除CMA资源申请释放问题,那么大概率和内存文件描述符fd申请后没有正确释放有关,可以从改进相应的资源释放函数方向入手。(rknn_model_zoo 之前有一次小更新就是修复资源释放方法的,您可以参考改进)