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.

omapl138 的arm核跑ndk的网络吞吐问题



请问用NC_SystemOpen、NC_NetStart及DaemonNew等函数调用进行TCP和UDP网络数据传输,配置了全双工百M的RJ45以太网,如何提升最大网络吞吐速率?

有哪些方面需要注意?有可能接近百M吗?有哪些相关参数需要设置?有哪些资料需要参考学习?谢谢!

  • user6619181 说:

    请问用NC_SystemOpen、NC_NetStart及DaemonNew等函数调用进行TCP和UDP网络数据传输,配置了全双工百M的RJ45以太网,如何提升最大网络吞吐速率?

    有哪些方面需要注意?有可能接近百M吗?有哪些相关参数需要设置?有哪些资料需要参考学习?谢谢!

    目前使用ti\ndk\examples\ndk_omapl138_arm9_examples\ndk_evmOMAPL138_arm9_client这个demo验证,最大网络吞吐速率很差...

  • 请问现在测得的吞吐率是多少?
  • 比如使用ndk_evmOMAPL138_arm9_client这个demo里面的dtask_tcp_echo,只有12KB/s... 跑一会儿以后差不多还会掉一半...

  • 感谢提供测试结果,我需要咨询相关工程师再给您回复。
  • 请将使用的SDK版本贴出来一下,并且提供有关如何测量吞吐量的详细信息,谢谢!
  • Nancy Wang 说:
    请将使用的SDK版本贴出来一下,并且提供有关如何测量吞吐量的详细信息,谢谢!

    吞吐测量使用周立功的TCP&UDP测试工具,相关SDK版本如下:

    CCS 7.3.0.00019
    Compiler TI v16.9.9.LTS
    XDCtools version 3.50.8.24_core
    EDMA3 Low level Driver 2.12.5
    IPC 3.50.3.04
    NDK 3.40.1.01
    SYS/BIOS 6.73.1.01
    System Analyzer (UIA Target) 2.30.1.02
    omapl138 PDK 1.0.7
    Target ti.targets.arm.elf.Arm9
    Platform ti.platforms.evmOMAPL138

  • 我们在NDK 3.40.1.01下没有发现这个例程。

    ./ndk/nimu/example/helloWorld/omapl138/c674/bios/NIMU_emacExample_lcdkOMAPL138C674xBiosExampleProject.txt
    ./ndk/nimu/example/helloWorld/omapl138/armv5/bios/NIMU_emacExample_lcdkOMAPL138ARMBiosExampleProject.txt
    ./ndk/nimu/example/helloWorld/omapl137/c674/bios/NIMU_emacExample_evmOMAPL137C674xBiosExampleProject.txt
    ./ndk/nimu/example/helloWorld/omapl137/armv5/bios/NIMU_emacExample_evmOMAPL137ARMBiosExampleProject.txt
    ./ndk/nimu/example/client/omapl138/c674/bios/NIMU_emacExampleclient_lcdkOMAPL138C674xBiosExampleProject.txt
    ./ndk/nimu/example/client/omapl138/armv5/bios/NIMU_emacExampleClient_lcdkOMAPL138ARMBiosExampleProject.txt
    ./ndk/nimu/example/client/omapl137/c674/bios/NIMU_emacExampleClient_evmOMAPL137C674xBiosExampleProject.txt
    ./ndk/nimu/example/client/omapl137/armv5/bios/NIMU_emacExampleClient_evmOMAPL137ARMBiosExampleProject.txt

    再次确认一下您使用的版本,我在 https://e2e.ti.com/support/processors/f/processors-forum/484379/the-problem-with-use-ndk-in-omapl138 看到 nsp_1_10_02_09\packages\ti\ndk\examples\ndk_evmOMAPL138_arm9_client。

  • 请问cache使能了吗?NDK buffer放在哪里?可以分享一下cmd和map文件吗?是否使用的是CPSW?
  • 对,ndk_evmOMAPL138_arm9_client是nsp下的例程,ndk里面没有带。
    使用的不是CPSW,cmd和map文件就是ndk_evmOMAPL138_arm9_client自带的(nsp_1_10_02_09\packages\ti\ndk\examples\ndk_omapl138_arm9_examples\ndk_evmOMAPL138_arm9_client\Debug\configPkg下的linker.cmd,nsp_1_10_02_09\packages\ti\ndk\examples\ndk_omapl138_arm9_examples\ndk_evmOMAPL138_arm9_client\Debug下编译自动生成的map),没有修改过,其实ndk_evmOMAPL138_arm9_client这个例程里面的所有配置都没有动过原模原样直接使用的...
    但是ndk里面带的NIMU_emacExampleClient_lcdkOMAPL138ARMBiosExampleProject也试过,相关配置也没动过,效果也类似,吞吐不高。
    最后,cache的使能和NDK buffer的相关配置方式可以明确指导一下排查步骤吗?

  • NSP比较老了,关于NIMU_emacExampleClient_lcdkOMAPL138ARMBiosExampleProject,如果没有修改那默认cache应该是使能的,.cfg文件中有配置。NDK buffer部分的细节我还需要再确认一下。
    另外您的需求是在arm上跑RTOS+NDK吗?还是只是想测试网口的性能,一般来说都在arm上运行linux。
  • 需求是在138的arm核上跑SYS/BIOS的网口,而且对网口的吞吐有硬性要求,因为是实时数据监控而且流量不低,目前换Linux暂时不太可行,因为前期都是基于SYS/BIOS。
  • 将.cfg中Program.sectMap部分配置的NDK buffer相关段放到内部ram上看一下有没有改善。例如:
    Program.sectMap[".far:NDK_OBJMEM"] = {loadSegment: "DDR", loadAlign: 8};
    Program.sectMap[".far:NDK_PACKETMEM"] = {loadSegment: "DDR", loadAlign: 128};
    另外将您详细的测试步骤(包括ccs console窗口及网络测试工具界面截图)贴出来一下,谢谢!
  • 我看到cfg中的这俩行配置是注释掉的,放开以后重新clean再build试过了,很遗憾,没有改善。

    测试步骤:导入、build然后运行demo工程,利用里面的echo callback服务,朝它发送数据(周立功 TCP&UDP测试工具连接以后,配置好最快时间间隔,每隔0ms发送,发送窗口里面填入数据),勾选自动发送复选框,然后查看周立功 TCP&UDP测试工具 的接收速度。

    CCS的console的话我认为没什么可参考的吧?(除非我printf输出调试信息?)周立功 TCP&UDP测试工具 的界面截图如下:

  • CCS的控制台demo默认自己输出的就是这些内容,看起来也没有什么不正常的:

  • 把 TCP&UDP测试工具 的发送区填满数据,填到不能再多填(大概是32KB左右),看到的demo的echo服务回数据的接收速度最快大概是下面这样子,还不到100KB/s:

    但是按上面的情况,以1秒发送1000次也就是1ms发送一次来低估,32KB*1000 是约能达到30MB/s的发送速度的,之所以发送速度也显示不到100KB/s,应该可以认为受到接收速度的限制导致与接收速度相同吧?

  • 感谢提供信息,再问一下您说的echo callback是以下函数吗?
    hEcho = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_echo,
    OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
  • 是的,就是demo工程里面netHooks.c第23行的这一句调用里面的这个 int dtask_tcp_echo( SOCKET s, UINT32 unused );  回调函数。

  • 请关注该贴的测试结果。
    e2e.ti.com/.../3685796
  • Nancy Wang 说:
    请关注该贴的测试结果。
    e2e.ti.com/.../3685796

    十分感谢帮忙联系转发咨询,看起来在Linux下用iperf TCP能到60多Mb/s,之前也考虑过用iperf来测试,但是最后因为在SYS/BIOS下,没有找到对iperf benchmark服务的实现工具程序,就没有继续。以现在这样的情况看,请问,在SYS/BIOS下,有类iperf的官方吞吐benchmark工具或者demo工程之类的可以参考吗(仍然因为我们前期一直是SYS/BIOS,马上切换到Linux不现实)?

  • Nancy Wang 说:
    请关注该贴的测试结果。
    e2e.ti.com/.../3685796

    从目前最新回复来看,看起来用iperf-2.0.9-win64可以和NDK client example中的UDP服务交互吗?但是提示:
    [ 3] WARNING: did not receive ack of last datagram after 10 tries.
    是否这个也可能是不兼容导致造成“the throughput seems significantly low compared to linux side.”的原因吗?
    因为据我之前的了解,如果没错的话,iperf需要它自己的服务端来配合,才能进行benchmark。


  • user6619181 说:

    在SYS/BIOS下,有类iperf的官方吞吐benchmark工具或者demo工程之类的可以参考吗(仍然因为我们前期一直是SYS/BIOS,马上切换到Linux不现实)?

    没有这样的工具。

    例程应该是可以直接与iperf交互的。

    WARNING: did not receive ack of last datagram after 10 tries 是不是有可能是防火墙的原因,我建议您按照英文论坛上给出的测试方法试一下,看看结果如何?

  • 请问您目前有什么进展吗?