The transmission functionality encompasses these features:
- Full line rate host-based transmission
- Up to 128 host buffers/streams supported per SmartNIC
- Traffic merge from TX buffers done in the FPGA
TX architecture overview
This figure illustrates a setup with a TX application.
The application writes frames to network streams, which map to TX host buffers. Data is transferred to the SmartNIC via PCIe using DMA for transmission on the specified port.
Frames can be transmitted in different ways:
- On a single port from a single TX host buffer
- On a single port from multiple TX host buffers
- On multiple ports from a single TX host buffer
- On multiple ports on a single SmartNIC from a single TX host buffer depending on the txPort field in the standard packet descriptor of the individual frames (dynamic transmission – see Dynamic transmission configuration)
The transmission mode can be configured per stream.
Dynamic transmission configuration
By default one TX host buffer is allocated per port that is set in the portMask attribute in a call to one of the NT_NetTXOpen functions, and the txPort field in the standard packet descriptor has no effect.
In order to set up dynamic transmission where the TX port for each individual frame is determined by the txPort field, the NT_NETTX_OPEN_FLAGS_ADAPTER_MULTI_PORT_BUFFER flag must be set before the NT_NetTxOpen_Attr() function is called. The flag is selected in the flags attribute in a call to the NT_NetTxOpenAttrSetFlags() function. This allocates a TX host buffer per SmartNIC, and this host buffer can transmit to all ports on the SmartNIC that are specified in the portMask attribute in the NetTxOpenAttrSetPortMask() function.
Typical TX application process
This is a high-level overview of a typical TX application process:
- The application opens a TX stream using the NT_NetTxOpen function.
- The application obtains a buffer handle using the NT_NetTxGet function.
- The application writes packet data to the buffer as required.
- The application releases the buffer to the stream for transmission using the NT_NetTxRelease function.
- The application repeats Step 2 to Step 5 as required.
- When the transmission is complete, the application closes the stream using the NT_NetTxClose function.
Frames can be transmitted at the speed supported by the ports, the PCIe interface and the transmission pipe, that is typically 200 Gbit/s for NT200C01-2×100, 105 Gbit/s for NT200A01-2×100 running on the capture/replay image, and NT200A02-2×100/40 and NT200A01-2×100/40 running at 2 × 100 Gbit/s, 100 Gbit/s for NT100E3-1-PTP, 80 Gbit/s for NT200A02-2×100/40, NT200A01-2×100/40 and NT200A01-2×25/10/2×40 running at 2 × 40 Gbit/s, NT200A01-2×40, NT200A02-2×40/8×10, NT200A02-8×10/2×40, NT200A01-8×10/2×40, NT80E3-2-PTP and NT80E3-2-PTP-8×10/2×40, 50/20 Gbit/s for NT200A01-2×25/10/2×40 running at 2 × 25/10 Gbit/s, 40 Gbit/s for Intel® PAC A10 GX with Napatech Link™ Capture Software, 40/4 Gbit/s for NT40A01-4×10/1-SLB and NT40E3-4-PTP running on the capture/replay image, 20/2 Gbit/s for NT20E3-2-PTP, and 4 Gbit/s for NT40A01-4×1.
- The actual user application
- The number of host buffers mapped to the individual ports
- The PCIe bus utilization level and hence the PCIe bus latency
- General server performance
It can be configured on which port a frame is to be transmitted, if it is to be transmitted at all, and when it is transmitted. The transmit on time stamp feature (see Transmit on Time Stamp) allows captured traffic to be transmitted, offset in time but with the same relative distance between the frames as when captured.
For each TX port, the transmission rate can be limited to a specific value or a percentage of link speed.
The SmartNICs always generate a new Ethernet CRC for transmitted frames.
Transmit rate limiting
Using NTAPI, the transmit rate can be limited per port using the NT_ConfigWrite function with the NT_CONFIG_PARM_PORT_SETTINGS_V2 parameter and the NtPortSettings_v2_s structure. Set NtPortSettings_v2_s.txPortRateLimit to the desired limit in bit/s (see DN-0449). A value in the range 1 to 100 is interpreted as a percentage of the link speed.
Using the config tool, apply the --tx_port_rate_limit option with a numeric value (see DN-0449). Without a unit, the value is interpreted as bit/s. A unit can be appended to the value. The units b, K, M and G work as ×1, ×1.000, ×1.000.000 and ×1.000.000.000 multipliers. With the unit %, a value in the range 1 to 100 is interpreted as a percentage of the link speed.
Flushing TX packets
Remaining packets in TX segments can be canceled from their queues and not sent, so that a stream can be closed down faster, by setting the CancelTxOnCloseMask parameter in the ntservice.ini file (see DN-0449). This is useful when replaying low-rate traffic.
Transmission of PCAP files
The SmartNICs have native support for transmission of PCAP files. Configuration can be done using the NT_NetTxOpen_v2 and NT_NetFileOpen_v2functions (see DN-0449).