This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VM:IPC_VRING_MEM内存减少

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1085572/tda4vm-ipc_vring_mem-memory-reducing

部件号:TDA4VM

您好,

我正在使用 ti-processor-SDK-RTOS-j721e-EVM-EVM-08_01_00_11,我希望减少内存布局并检查不同的选项,以便调整RAM消耗。

据我所知,IPC_VRING_MEM用于IPC,接口是完全SW定义的。 我正在尝试将其设置为16M,并已更改 vivity_apps/platform/j721e/RTOS/gen_linker_mem_map.py中相应的字段IPC_vring_mem_size,并已应用更改为Linux内核(A72侧)+ R5_MPU.xs文件。 我还在 ipc_soc.h这里找到了常量宏pdm_Jacinto _08_01_00_33/packages/ti/drv/IPC/soC/V1/ipc/ipc/ipc,这里的ipc_vring_buffer_size是28M并将其更改为16M。 但在所有更改后IPC仍然不起作用。

我在文档 ( ti-processor-sdk-RTos-j721e-EVM-VM-08_01_00_11/PSDK_RTOS/docs/user_guide/developer_notes_memory_map.html#memory-partitions-and_constraints)中发现,该区域至少应为32M,但我不理解该限制的原因--是否仍可以仅使用16M? 我们如何做到这一点?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Grigory:

    J721E上有很多处理器内核,我们的SDK支持所有处理器对之间的IPC。 28 MB 内存用于在所有RTOS到RTOS核心之间建立IPC。 每个远程处理器核心的Linux A72 IPC是独立的。   如果不进行其他更改,就不可能直接减少内存的28 MB。 vring传输使用512字节的vring缓冲区。 同样的内存也用于所有内部Virtio对象,并且对不同对象有对齐限制。

    我们共有10个处理器: 6个R5F + 2个C66x + 1个C71x + 1个SMP A72。   对于Linux,默认SDK将MCU R5F设置为lockstep模式,对于RTOS SDK则设置为拆分模式。

    该代码保留28 MB ,并不是真正需要32 MB。

    您是否能够启动核心,并且只在IPC建立时出现问题?

    此致

    Suman

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是,未建立通过振铃的IPC。  

    是否有办法减少使用的振铃缓冲区的数量/大小,使本节仅使用16M? 在代码中可以更改这些设置的位置?  我们计划关闭多个内核(如C6x,MCU3_0/1),也不计划使用某些功能(如TDA4 ISP)。 我们的平台只有512M,我们必须挤入许多系统部件才能使工作正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Grigory:

    正如我前面提到的,您肯定需要进行更多的更改。 如果要适应内存的16 MB ,则需要将每个方向的缓冲区数减少到128。

    RTOS PDK IPC代码的编写采用了基本设计,IPC vring缓冲区所需的所有内存都是静态预留的控制结构。  考虑到可能的超集用例(将MPU视为非SMP核心),每个vring缓冲区使用512字节,每个方向使用256个vring缓冲区,并假设所有核心都运行RTOS或QNX),SDK保留了28 MB。

    28 MB (0x1C0万)也是一个四舍五入的数字,接近最接近的1 MB 边界,但下面是所使用的计算。

    处理器数量=11 (6个R5F + 3个DSP + 2个MPU A72内核)

    每个方向的缓冲区数= 256

    每个vring传输缓冲区的大小(rpmsg报头16字节+最大有效负载496字节)= 512字节。

    一个方向上的振铃缓冲区的总大小=256*512=0x2万字节

    计算还为每个vring结构保留0x2万字节,导致vring缓冲区的字节总数为0x4万字节,vring结构的字节总数为0x4万字节。

    因此,得出的总规模是  

    11 * 10 * 0x4万 = 0x1B8万 ~ 0x1C0万。

    对28 MB 缓冲区空间进行分区的主要逻辑在中

    <RTOS_SDK>/<PDK>/packages/ti/drv/IPC/src/IPC_virtio.c IPC_updateVirtioInfo()函数,从同一文件中的VirtioIPC_init()函数调用。

    振铃不需要0x2万字节,通常可以将其截断。 减少每个方向上的缓冲区数,并更新上述函数以使更正的逻辑执行较小的大小分配。   

    此致

    Suman