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/66AK2H12:DDR3性能问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/611277/linux-66ak2h12-question-of-ddr3-performance

器件型号:66AK2H12

工具/软件:Linux

我的板是66ak2hk、我的板和 EVM、我测试了所有这些器件。

电路板上有 Tow DDR、DDR3A 8G DIMM 和 DDR3B 2G 芯片。

DDR3A_REMAP_EN 引脚在芯片上为浮点型。

/proc/iomem 例如:

8000000000-9ffffffff:系统 RAM (引导别名)
a0000000-affffffffff:pcie 内存
b0000000-b7ffff:系统 RAM (引导别名)
f0000000-ffffff:系统 RAM (引导别名)
80000000000-81FFFFFF:系统 RAM
80000008000-80092f023:内核代码
80097c000-800a0d143:内核数据
830000000-837ffff:系统 RAM
838000000-86fffffff: CMEM
870000000-8ffff:系统 RAM
980000000-99ffffffff:CMEM
9a0000000-9ffff:系统 RAM

我认为 DDR3B lacte 2G、DDR3A lacte 8G DIMM 和操作系统在 DDR3A 上运行。

OS 是 Linux 版本4.4.41、而不是 RT。

我在 DDR3B 上使用 mmap /dev/mem 到 malloc RAM、在 DDR3A 上使用 malloc 函数获取 RAM。

使用 memcpy() truans 数据 on DDR3A and DDR3B

FMEM 表示 DDR3B 上的 mmap RAM、malloc 表示 DDR3A 上的 RAM

测试结果为:

root@k2hk EVM:~#./mem  
memp1 addr = b6fd2000!
memP2 addr = b6fcc000!
mallocp1 addr = 0x00021008!
mallocp2 addr = 0x00026010!
memcpy  malloc -> FMEM
I = 100000、blocksize = 20480、dur = 3 (s) 163514 (us)!
memcpy  FMEM -> malloc
I = 100000、blocksize = 20480、dur = 92 (s) 300060 (us)!
memcpy  malloc -> malloc
I = 100000、blocksize = 20480、dur = 0 (s) 254845 (us)!
memcpy  FMEM -> FMEM
I = 100000、blocksize = 20480、dur = 183 (s) 6233 (us)!

看看、为什么要将数据从 FMEM 传输到 malloc 那么慢?在一个周期内传输20480字节数据。

然后我运行 TI 示例 edmabw、结果是

以 GB/s 为单位的单通道 EDMA 带宽
===================
来自 DSP 内核:0 1 2 3 4 5 6 7
===================
DDR => DDR:0.030 0.030 0.048 0.047 0.042 0.042 0.048 0.047
DDR => MSMC:0.104 0.111 0.124 0.123 0.126 0.125 0.128 0.127
DDR => L2:0.105 0.112 0.130 0.129 0.130 0.129 0.129 0.130 0.130 0.129
MSMC => DDR:0.049 0.049 0.078 0.079 0.077 0.077 0.079 0.079 0.079
MSMC => MSMC:0.293 0.295 0.294 0.295 0.295 0.295 0.295 0.468 0.462
MSMC => L2:0.295 0.296 0.296 0.296 0.296 0.296 0.296 0.296 0.297 0.295
L2 => DDR:0.049 0.050 0.081 0.080 0.080 0.080 0.081 0.082
L2 => MSMC:0.294 0.296 0.295 0.295 0.296 0.296 0.296 0.296 0.296 0.296 0.295
L2 => L2:0.278 0.279 0.279 0.280 0.295 0.295 0.279 0.277

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

    我们将对此进行研究。 反馈将发布在此处。

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

    [报价]为什么将数据从 FMEM 传输到 malloc 如此缓慢?
    您是否正在使用最新的 SDK?

    对于 DDR 写入、请参阅吞吐量性能指南中的第3.2节:存储器写入性能和4个 DDR3吞吐量:
    www.ti.com/.../sprabk5b.pdf

    66AK2H12 EVM 上的结果是否相似(www.ti.com/.../evmk2h)

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

    这些数字看起来可能未启用高速缓存、也可能与 MMU 设置相关。 但可能需要回答为什么在 Linux 中未启用它。 但一般来说、Linux 只处理一个大的平面存储器、而不喜欢两个主存储器。 这也可能对低性能产生一些影响。

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

    我使用 的是 ti-processor-sdk-linux-k2hk EVM-03.03.00.04、而不是4.0.0.4、因为没有时间为电路板添加器件。

    我查看了 PDF、但无法获得相同的 DDR 性能结果。

    EVM 上的结果喜欢我的板。

    所以我不知道原因!

    在 Linux 内核中、我只添加 USB 引导和 PCIe 设备。我使用  tisdk-server-ext-rootfs-image-k2hk-evm.tar.xz 作为我的 rootfs!

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

    在66ak2h12数据表中,tow DDR loacte at tow phy addr。

    DDR3b 0x8000000~0xFFFFFFFF

    DDR3a 0x8000000~0x9FFFFFFFF

    您能告诉我如何在 Linux 中启用缓存吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高速缓存配置通过 ARM 寄存器 cp15进行。 请参阅 ARM TRM。 配置在 ProcSDK 的 Boot Monitor 中完成、需要通过 SMC 调用进入 ARM 安全模式。

    TI 使用 Stream 和 LMBench 基准来测量存储器性能、但仅在 DDR3A 上测量。 ARM/Linux 不使用 DDR3B。

    雷克斯