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.

TMS320C6678: About TCP throughput Issue

Part Number: TMS320C6678

Hi Sir 

We used EVM6678 to do NDK TCP TX throughput Test. and we followed below link to modify NDK to increase TCP throughput.

           https://e2e.ti.com/support/embedded/tirtos/f/355/t/283019

The throughput can be up to 600Mbps.

if we modify the test packet size from  (7 * 1460)  to 200 bytes

TESTSIZE  7*1460

TESTSIZE  200

for( count = 0; count < PACKETS*1000; count++ )
{
   if( ((bytes = send( stcp, pBuf, (int)TESTSIZE, 0 )) < 0) )
   {
      platform_write( "send failed (%d)\n",fdError());
      goto leave;
   }
   totalBytes += bytes;

}

The throughput can be lower than 120Mbps.

Q1: Is the throughput could be the limitation if we set test packet size as 200 bytes ?

Q2: if not. how do we increase the throughput ?

please advise and thanks 

BR

Yimin

  • The team is notified. They will post their feedback directly here.

    BR
    Tsvetolin Shulev
  • Hi,

    Check this e2e thread:
    e2e.ti.com/.../626410

    Best Regards,
    Yordan
  • Hi Yordan,

    Yimin is my colleague.

    For NDK TCP TX throughput testing, I try to do all suggestion as I can.

    But the TCP TX throughput does not reach acceptable value when I send 200 bytes every time.

    All that I have modified are:

    1. Increase TCP buffer.
      Set CFGITEM_IP_SOCKTCPTXBUF to 64000
      Set CFGITEM_IP_SOCKTCPRXBUF to 64000
      Set CFGITEM_IP_SOCKTCPRXLIMIT to 64000

    2. Adject NIMU TX/RX buffer ratio.
      Increase NIMU_NUM_TX_DESC up to 94u
      Decrease NIMU_NUM_RX_DESC down to 32u
      (in pdk\packages\ti\platform\resource_mgr.h)

    3. Increase NDK frame buffer.
      Set PKT_NUM_FRAMEBUF to 960
      (in ndk\packages\ti\ndk\stack\pbm\pbm_data.c)

    4. Locate NDK_PACKTMEM section on MSMCSRAM.
      Program.sectMap[".far:NDK_PACKETMEM"] = {loadSegment: "MSMCSRAM", loadAlign: 128};

    5. Rebuild NDK as release mode and set size optimization from -ms2 to -ms1

    6. Allow more TCP connection.
      Set RAW_PAGE_COUNT to 256
      (in ndk\packages\ti\ndk\os\mem_data.c)

    7. Set NIMU RX accumulator.
    int32_t Setup_Rx (NETIF_DEVICE* ptr_net_device)
    {
        accCfg.timerLoadCount to 5;
        if ((result = Qmss_programAccumulator (Qmss_PdspId_PDSP1, &accCfg)) != QMSS_ACC_SOK)
    }

    According to the link (e2e.ti.com/.../283019)
    TI Employee say : "From many customer experience with NDK in the e2e forum, the TCP throughput is about 600-700Mbps"

    This is fine to us. we probably accept TX throughput on 600-700Mbps.

    But the issue is that,
    when I send a smaller packet size than 7*1460 every time, I got a smaller TX throughput too.
    Our product care about TX latency therefore I have to send packet immediately.

    When I just modify test packet size from (7 * 1460) to 200 bytes,
    The TX throughput is down to 120Mbps.
    It is almost 5 times lower than the reasonable throughput (600Mbps).

    Furthermore, I observe every packet by Wireshark.
    I find test peer's window size never been full.
    Every outgoing packet does not very close.
    I guess that I should modify somewhere NDK code to increase TX throughput.

    Sending 200 bytes packet on general PC can reach 900Mbps easily.

    Following are my test result:

    a) C6678 send 10220 bytes every time.

    TX throughput is 640 Mbps.

    b) C6678 send 1024 bytes every time.

    TX throughput is down to 360 Mbps.

    c) C6678 send 200 bytes every time.

    TX throughput is down to 120 Mbps.

    d) General Linux PC send 200 bytes every time.

    Linux TCP/IP stack do collecting outgoing packet job is well.

    TX throughput is still 900 Mbps.

    Any advice is fine.
    Thank so much,

    Sean Lin

  • Hi Yordan,

    In addition, My modified code are base on ndk_2_25_01_11, pdk_C6678_1_1_2_6 and mcsdk_2_01_02_06.

    Thanks,
    Sean Lin