SPRACT8 September   2020 66AK2H06 , 66AK2H12 , 66AK2H14

 

  1.   Abstract
  2.   Trademarks
  3. 1Introduction
    1. 1.1 TI Processor SDK RTOS
    2. 1.2 TI NDK
    3. 1.3 66AK2H Device
    4. 1.4 FTP Offering in TI Processor SDK RTOS
  4. 2Hardware and Software
  5. 3Develop the FTP Server on K2H
    1. 3.1 Reference FTP Server Example
    2. 3.2 Create K2H FTP Server Example
    3. 3.3 Test K2H FTP Server Example
  6. 4Performance Tuning
    1. 4.1 Quick Code Check
      1. 4.1.1 FTP Transmitting Code Check
      2. 4.1.2 FTP Receiving Code Check
      3. 4.1.3 CCS Project Optimization
    2. 4.2 Increase the TCP Buffer Sizes
    3. 4.3 UIA CPU Load Instrumentation
    4. 4.4 What Can We Do on the PC Side?
      1. 4.4.1 TCP Window Scaling Check
      2. 4.4.2 Receive Interrupt Coalescing Check
    5. 4.5 What Else Can We Do on the K2H Side?
      1. 4.5.1 TCP/IP Checksum Offloading Check
      2. 4.5.2 NIMU Driver Efficiency Profiling
      3. 4.5.3 Receive Interrupt Coalescing
    6. 4.6 Final FTP Throughput Results
  7. 5Summary
  8. 6References

Receive Interrupt Coalescing

The idea of interrupt coalescing is experimented on the PC side in Section 4.4.2. This can also be achieved by letting the ACK packets accumulated to certain levels for one-time processing, in case that PC is unable to throttle the ACK packet generation.

This feature is supported by the K2H and explained in the (KeyStone Architecture Multicore Navigator User's Guide) under field Interrupt Pacing Mode with 4 options:

  • 0 = None — interrupt on entry threshold count only (list full)
  • 1 = Time delay since last interrupt. This produces a periodic interrupt (as long as the list does not fill early and descriptors continue arriving).
  • 2 = Time delay since first new packet. This starts the timer countdown with the first packet received following a previous interrupt.
  • 3 = Time delay since last new packet. This restarts the timer countdown with each new packet.

The interrupt pacing mode works with another parameter timerLoadCount, which counts down a global timer ticks to delay interrupt. The pacing mode is configured in the setup_rx_queue() of driver code nimu_eth.c:

  accCfg.timerLoadCount      =   0;
  accCfg.interruptPacingMode =   Qmss_AccPacingMode_LAST_INTERRUPT;

After some trials with different settings and cross-checking with Processor SDK Linux K2H usage in:

The NIMU driver code is updated with the following:

    accCfg.timerLoadCount      =   2;    /* 50us/ACC_DEFAULT_PERIOD(25us by firmware) = 2 */
    accCfg.interruptPacingMode =   Qmss_AccPacingMode_FIRST_NEW_PACKET;