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.

NDK TCP TX speed on EVM6678 lower then expected



Hi,

following ideas of tweaking NDK found here: http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/148585/539803.aspx#539803

# I've increased the PKT_NUM_FRAMEBUF value 6 times (i.e. to 1152) in ndk/stack/pbm/pbm_data.c and rebuilt the NDK library, no debug, and decreased the size optimization form -ms2 to -ms1 because it was suggested it may harm performance (var c6xOpts = " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 -ms1 ";)

# I've increased the  NIMU_NUM_TX_DESC to 126u (to prevent packet dropping as suggested here: http://e2e.ti.com/support/embedded/bios/f/355/t/253488.aspx) and rebulit the PDK

# I've modified helloworld_evmc6678l example to incorparate TCP_perform_send() function from ndkloopback.c of hua_evmc6678l example. It basically connect to iperf server and pushes data in a loop. TESTSIZE is 7 * 1460 ( 7 times MSS)

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;

}

# I've increased the TCP transmit buffer size to 64000

//TCP Transmit buffer size
rc = 64000;
CfgAddEntry( hCfg, CFGTAG_IP, CFGITEM_IP_SOCKTCPTXBUF,
CFG_ADDMODE_UNIQUE, sizeof(uint), (uint8_t *)&rc, 0 );

packet memory is situated in MSMC:

Program.sectMap[".far:NDK_PACKETMEM"] = {loadSegment: "MSMCSRAM", loadAlign: 128};

with all this tweaking I was able to get only aroung 670Mbit/s TX speed between EVM and PC. When I look at the RTOS object view, the CPU load during the transmit is 99.7%. Since NDK does not support multicore, please could you specify under which configuration is it possible to get TX throughput of ~920 Mbits/sec as mentioned by Jack Manbeck in the first link? Also, no retransmissions are occurring acording to NDK's stats and PC is capable to receive at higher speed.

my configuration:

MCSDK_2_01_02_06

BIOS_6_35_01_29

PDK_C6678_1_1_2_6

NDK_2_22_03_20

thank you for advice,

best regards


karel

  • Karel,

    There may be other minor tweaks. From many customer experience with NDK in the e2e forum, the TCP throughput is about 600-700Mbps, that is in range of your testing.

    Regards, Eric 

  • Hi lding,

    thank you for your answer. Please could you be more specific about those minor tweaks? According to the forum post I mentioned previously, your fellow TI employee was able to obtain much better results: With iperf and some tweaking we were able to transmit ~920 Mbits/sec @ 1514 packets and a 4K window size

    We have a need for up to 90% of transmit throughput in marginal cases. As we are evaluating c6678/c6670 as a possible future platform I need to be sure that it can handle the requirements. I don't know whether it's the hardware or software (NDK) limitation, but I would at least like to replicate the best possible results I've got to my hands.

    I would appreciate if someone could share configuration of EVM and NDK with above mentioned transmit performance.

    Thank you

    karel



  • Karel,

    I am checking with my colleague and will let you know how we got 920Mb/s.

    Regards, Eric

  • Karel,

    The worked was done about 2 years ago and we conditionally compiled some code to do the benchmark to achieve the results. Sorry we haven't found out the details yet.

    Regards, Eric