107. Niantic Reta (Redirection table) Tests

This document provides test plan for benchmarking of Rss reta(Redirection table) updating for the Intel® 82599 10 Gigabit Ethernet Controller (Niantic) Poll Mode Driver (PMD) in userland runtime configurations. The content of Rss Redirection table are not defined following reset of the Memory Configuration registers. System software must initialize the table prior to enabling multiple receive queues .It can also update the redirection table during run time. Such updates of the table are not synchronized with the arrival time of received packets.

107.1. Prerequisites

2x Intel® 82599 (Niantic) NICs (2x 10GbE full duplex optical ports per NIC) plugged into the available PCIe Gen2 8-lane slots. To avoid PCIe bandwidth bottlenecks at high packet rates, a single optical port from each NIC is connected to the traffic generator.

107.1.1. Network Traffic

The RSS feature is designed to improve networking performance by load balancing the packets received from a NIC port to multiple NIC RX queues, with each queue handled by a different logical core.

  1. The receive packet is parsed into the header fields used by the hash operation (such as IP addresses, TCP port, etc.)
  2. A hash calculation is performed. The 82599 supports a single hash function, as defined by MSFT RSS. The 82599 therefore does not indicate to the device driver which hash function is used. The 32-bit result is fed into the packet receive descriptor.
  3. The seven LSBs of the hash result are used as an index into a 128-entry ‘redirection table’. Each entry provides a 4-bit RSS output index.

The RSS RETA update feature is designed to make RSS more flexible by allowing users to define the correspondence between the seven LSBs of hash result and the queue id(RSS output index) by themself.

107.2. Test Case: Results - IO Forwarding Mode

The following RX Ports/Queues configurations have to be benchmarked:

  • 1 RX port / 2 RX queues (1P/2Q)
  • 1 RX port / 9 RX queues (1P/9Q)
  • 1 RX ports / 16 RX queues (1P/16Q)

107.2.1. Testpmd configuration - 2 RX/TX queues per port

testpmd -c ffffff -n 3 -b 0000:05:00.1 -- -i --rxd=512 --txd=512 --burst=32 \
--txpt=36 --txht=0 --txwt=0 --txfreet=32 --rxfreet=64 --txrst=32 --mbcache=128 \
--rxq=2 --txq=2

107.2.2. Testpmd configuration - 9 RX/TX queues per port

testpmd -c ffffff -n 3 -b 0000:05:00.1 -- -i --rxd=512 --txd=512 --burst=32 \
--txpt=36 --txht=0 --txwt=0 --txfreet=32 --rxfreet=64 --txrst=32 --mbcache=128 \
--rxq=9 --txq=9

107.2.3. Testpmd configuration - 16 RX/TX queues per port

testpmd -c ffffff -n 3 -b 0000:05:00.1 -- -i --rxd=512 --txd=512 --burst=32 \
--txpt=36 --txht=0 --txwt=0 --txfreet=32 --rxfreet=64 --txrst=32 --mbcache=128 \
--rxq=16 --txq=16

The -n command is used to select the number of memory channels. It should match the number of memory channels on that setup. The -b command is used to prevent the use of pic port to receive packets. It should match the pci number of the pci device.

107.2.4. Testpmd Configuration Options

By default, a single logical core runs the test. The CPU IDs and the number of logical cores running the test in parallel can be manually set with the set corelist X,Y and the set nbcore N interactive commands of the testpmd application.

  1. Reta Configuration. 128 reta entries configuration:

    testpmd command: port config 0 rss reta (hash_index,queue_id)
    
  2. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  3. rss received package type configuration two received packet types configuration:

    testpmd command: port config 0 rss ip/udp
    
  4. Verbose configuration:

    testpmd command: set verbose 8
    
  5. Start packet receive:

    testpmd command: start
    

107.2.5. tester Configuration

  1. In order to make most entries of the reta to be tested, the traffic generator has to be configured to randomize the value of the 5-tuple fields of the transmitted IP/UDP packets, so that RSS hash function output of 5-tuple fields covers most of reta index.
  2. Set the package numbers of one burst to a certain value.

107.2.6. Example output (1P/2Q) received by the dut):::

packet index hash output rss output actual queue id pass
0        
1        
2        
etc.        
125        
126        
127        

107.3. Test Case: Check RSS key size

Different NIC types support different RSS hasd key size. Use the testpmd command:

testpmd command: show port info all

Get the RSS hash key size:

Hash key size in bytes: 52

Check the value to the key size supported by NIC.