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.

[参考译文] Linux/TCI6638K2K:在 DDR3A 中降低了 DSP 性能

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/803193/linux-tci6638k2k-decreased-dsp-performance-in-ddr3a

器件型号:TCI6638K2K

您好!

我在 TCI6638K2K 中学习了 DDR3、但结果出乎意料。 我在 DSP 多核上下文中进行了两种类型的测试、运行和不运行 Linux 操作系统。

如果没有 Linux、就没有问题了、内核之间的带宽相当共享、最大带宽为1600Mb/s

使用 Linux 时、内核之间的带宽不是公平共享的、最大带宽为100Mb/s 该带宽对于并行的1、2、...、8个 DSP 内核是相同的。

我在器件树中看到、Linux 未使用 DDR3A、但在这种情况下、获得的结果毫无意义。

有人可以帮助我吗?

此致、

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

    您使用的是哪个处理器 SDK Linux 版本?

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

    我使用:

    TI-processor-sdk-rtos-k2hk evm-05.02.00.10

    此致、

    François μ A

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、您在器件上运行 RTOS、而不是 Linux、对吧? 我有点困惑、因为在最初的帖子中、您讨论的是 TCI6638K2K 器件上的 Linux。

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

    我在没有 RTOS (SYS/BIOS)的情况下运行裸机工程、我只需测试一个定义大小的写入算法。

    在第一种情况下、我不使用任何 BIOS (既不使用 Linux、也不使用 SYS/BIOS)。 很不错!
    在第二种情况下、我使用相同的算法、但 Linux 在板上运行。 DSP 内核之间的带宽问题(带宽较低且不共享)。

    您是否更好地理解了我的情况?

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

    是的、现在已清除。
    好的、您知道 Linux 使用 k2hk EVM-cmem.dtsi 来管理共享存储器。 还有一个 IPC 资源表、该表还管理共享内存(processors.wiki.ti.com/.../IPC_Resource_customTable)
    另一方面、您的裸机应用程序还通过 linker.cmd 文件管理存储器映射到某些扩展。
    您是否对齐了所有这些、以便没有 confilcts?

    此外、由于 Linux 仅使用 DDR3A、因此电路板上还有一个仅适用于 DSP 内核的 DDR3B。 是否可以尝试使用 DDR3B?

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

    从.cmc 文件的映射将粘贴到此帖子的末尾。 我为 DDR3选择了此范围:O = 0xB0000000 l = 0x18000000、因为它是 DSP 的保留区域(Linux 不能通过 mmap 访问此区域)。 此外、我同意您的观点、即 Linux 仅使用 DDR3A、但不在之前定义的范围内。

    L2包含数据并用作存储器(而不是高速缓存)。

    我不使用 IPC。

    我知道我可以将 DDR3B 用于 DSP、但我想看到 ARM 对 DDR3中的 DSP 的影响、这就是我将 DDR3A 用于 DSP CorePac 和 ARM CorePac 的原因。 我不理解的是、DDR3A 中的 DSP 性能下降会导致 Linux OS。

    您是否需要更多信息来帮助我?

    存储器

       LOCAL_L2_SRAM: O = 0x00800000 l = 0x00100000  // 1MB 本地 L2/SRAM */

       DDR3:           O = 0xB0000000 l = 0x18000000  // DDR3 SDRAM */

       备份:         O = 0xFFFFFF0000 l = 0x0000C000   //备份可由 ARM 读取*/

       SYNC_DSP:      O = 0xFFFFFFD000 l = 0x00001000   // 4KB 用于 DSP 内核同步*/

       DSP_FLAG:      O = 0xFFFFFFE000 l = 0x00001000   //针对 ARM 和 DSP 内核同步的4KB DSP 标志*

       ARM_FLAG:      O = 0xFFFFFF000 l = 0x00001000   //针对 ARM 和 DSP 内核同步的4KB ARM 标志*


    部分

       .text         > local_L2_SRAM
       .stack        > local_L2_SRAM
       .bss          > local_L2_SRAM
       .cio          > local_L2_SRAM
       .const        > LOCAL_L2_SRAM
       .data         > local_L2_SRAM
       .switch       > LOCAL_L2_SRAM
       .sysmem       > local_L2_SRAM
       .far          > local_L2_SRAM
       .args         > local_L2_SRAM
       .ppdinfo       > local_L2_SRAM
       .ppdata       > local_L2_SRAM

       /* COFF 段*/

       .pinit        > local_L2_SRAM
       .cinit        > local_L2_SRAM

       /* EABI SECTIONS *
       binit        > local_L2_SRAM
       init_array   > local_L2_SRAM
       .neardata     > local_L2_SRAM
       .fardata      > local_L2_SRAM
       .rodata       > local_L2_SRAM
       .c6xabi.exidx > local_L2_SRAM
       .c6xabi.extab > local_L2_SRAM

       /*项目特定部分*/
       .l2sram         >   local_L2_SRAM
       .dr         >   DDR3
       备份         >   备份
       SYNC_DSP      >   SYNC_DSP
       .dsp_flag      >   DSP_FLAG
       .arm_FLAG      >   arm_FLAG

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

    .cmd**


    否则、

    我在 Linux 下使用此设备树:

    /{
       保留存储器{

          cmem_block_mem_0:cmem_block_mem@830000000{
             REG =<0x00000008 0x30000000 0x00000000 0x18000000>;
             无地图;
             状态="正常";
          };
       };

       cmem{
          兼容="ti、cmem";
          #address-cells =<1>;
          #size-cells =<0>;

          #pool-size-cells =<2>;

          状态="正常";

          cmem_block_0:cmem_block@0{
             reg =<0>;
             memory-region =<&cmem_block_mem_0>;
             cmem-buf-pools=<1 0x00000000 0x18000000>;
          };

          cmem_block_1:cmem_block@1{
             reg =<1>;
             SRAM =<&SRAM_cmem>;
          };
       };
    };

    msm_ram{.msm_ram}
       sRAM_cmem:sRAM-cmem@100000{
          REG =<0x100000 0x480000>;
       };
    };

    此致、

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

    你找到了什么吗?

    如果您有疑问、我不会使用#pragma 指令来对齐数据。 但是、如果我对、来自0xC800 0000的别名0xB000 0000仅供 DSP 使用、这在器件树中是说的。 我想知道的是 Linux 在共享 DDR3A 总线时对 DSP (保留区域)的影响。

    我唯一不支持的是、当我使用下面的字体来进行写操作时:


    ptab0 =(volatile int*) ADDR_BASE;

    START = CSL_tscRead ();
    test(((int*)ptab0, size);
    end = CSL_tscRead ();


    void test (int*选项卡、int 大小)

    int i=0;
    (i=0;<size; i++)

    *TAB = 1;
    Tab++;



    我在 DDR3未缓存中工作、但在 DDR3完全缓存能力中是一样的。

    在没有运行任何操作系统的情况下、DDR3A 中1个 DSP 内核的吞吐量未缓存(DSP 视图):DSP 吞吐量= 1600MB/s
    在运行 Linux 操作系统的情况下、DDR3A 中1个 DSP 内核的吞吐量未缓存(DSP 视图):DSP 吞吐量= 100Mb/s

    这是正常的吗? 如何提高 DDR3中的 DSP 吞吐量?

    我目前正在研究 PLL 配置、它可以是一种解决方案。 你怎么看?


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

    Francois、

    您的结果毫无意义。 您能否共享您的 Linux 引导日志以及测试 性能的测试代码?

    此致、
    周德伟

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

    我的团队正在与 Francois (作为学员)就该主题开展合作。

    我们将在内部审查测试设置、然后再与您进一步分析结果。

    关于环境:我们制造的电路板使用此处理器,仅使用 DDR3A (没有适合 DDR3B 的空间)。 我们计划将 ARM 内核与 Linux (ti-processor-sdk-linux-k2hk-evm-05.00.00.15)和 DSP 内核配合使用以进行信号处理。 Francois 作为一名学员的目标是研究在信号处理的同时运行 Linux 的影响。

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

    您好、Clement、

    感谢您的介绍。 我现在将关闭此问题。 当您有更多数据时、请提交一个新数据。

    雷克斯

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

    大家好、

    我们发现了问题、来自 uboot 序列、该序列在所有 DSP 上的启动时预加载映像。 通过在 uboot 序列中移除这些预加载、或者在测试解决性能下降问题之前复位 DSP。

    感谢你能抽出时间。

    此致、

    François μ A

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

    大家好、Francois、

    感谢您将发现结果发布回我们的网站。 我将关闭该问题。

    雷克斯