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.

C6678 EDMA throughput

Hi,

I am trying to benchmark the EDMA performance on transferring data across LL2 <-> DDR, LL2 <-> MSMC, MSMC <-> DDR.  I am encountering a discrepancy on EDMA throughput between the values described in "sprabh2a.pdf" and my measured values.

The environment that I use:

- platform: C6678 EVM (TMDSEVM6678LE)

- initialize DDR3 with the TI provided default GEL file for 1333MHz

- C6678 is set to run at 1GHz

- elapse Time computed with hardware timer 8 (setup according to datasheet)

- transfer rate equation in MBps: dataSizeInKBytes * 1GHz / (elapseTime * 6 * 1024)

- initialize EDMA transfer as per the CSL EDMA example in the following steps:

 1. CSL_edma3Init

 2. CSL_edma3Open (using CC1)

 3. CSL_edma3HwControl (DMAREGION_ENABLE, using shadow region 2)

 4. CSL_edma3HwControl (INTR_ENABLE, enabling interrupt for shadow region 2)

 4. CSL_edma3HwChannelOpen (opening channel 0)

 5. CSL_edma3HwChannelSetupQue (mapping channel 0 to TC0 queue of CC1)

- trigger EDMA transfer as per the CSL EDMA example in the following steps:

 1. CSL_edma3MapDMAChannelToParamBlock (with the OPT, SRC, ACnt, BCnt, etc. setup)

 2. CSL_edma3GetParamHandle (to get the handle)

 3. CSL_edma3ParamSetup (to write the setup to PARAM)

 4. CSL_edam3DMAChannelEnable (to enable the channel)

 5. CSL_edma3SetDMAChannelEvent (to tribber event)

- wait for the EDMA tranfer to finish by polling the interrupt bit, using the following CSL call:

  CSL_edma3HwControl (QUERY_INTRPEND)

- After that resetting the channel:

 1. CSL_edma3HwControl (INTERPEND_CLEAR)

 2. CSL_edma3ClearDMACHannelEvent

 3. CSL_edma3DMAChannelDisable

I am expecting my result would be close to what it published in Table 15 of sprabh2a.pdf for DDR-LL2 transfer (theoretical thruput: 10664MBPS, aggregate thruput: 10132.3 MBPS), but I am getting less than half of it between DDR & LL2 transfer, and worse between LL2 & MSMC in which cases the published values are much better.  Let me provide some of my test result for your reference:

------ LL2 to DDR Test:

LL2 to DDR 8MB transfer elapse Time: 1604.142000 us; Transfer rate = 4987.089672 MBps

LL2 to DDR 1MB transfer elapse Time: 208.914000 us; Transfer rate = 4786.658625 MBps

LL2 to DDR 100KB transfer elapse Time: 22.128000 us; Transfer rate = 4413.243312 MBps

LL2 to DDR 32KB transfer elapse Time: 8.466000 us; Transfer rate = 3691.235530 MBps

 ------ DDR to LL2 Test:

DDR to LL2 100KB transfer elapse Time: 22.500000 us; Transfer rate = 4340.277689 MBps

 ------ MSMC to LL2 Test:

MSMC to LL2 100KB transfer elapse Time: 22.506000 us; Transfer rate = 4339.120590 MBps

 ------ LL2 to MSMC Test:

MSMC to SL2 100KB transfer elapse Time: 22.530000 us; Transfer rate = 4334.498358 MBps

(FYI, an extra note: I have preformed similar EDMA throughput benchmarking on C6472.  It's similar setup and I could get pretty close to theoretical throughput value for C6472 EDMA transfer.)

Can anyone let me know what could the source of the problem may be?  Any initialization problem?  Anything I might have missed, and/or anything I should pay attention to?

 

Thanks,

-- Louis