From 00e18de91c1e22b0b452869aaa87f7bcf10efe09 Mon Sep 17 00:00:00 2001 From: Virendra Kakade Date: Wed, 30 Mar 2022 13:01:31 -0500 Subject: docs: add 100GigE documentation Signed-off-by: Virendra Kakade Co-authored-by: Wade Fife --- host/docs/dpdk.dox | 13 ++++++++++--- host/docs/transport.dox | 31 +++++++++++++++++++++++++++---- host/docs/usrp_x4xx.dox | 4 ++-- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/host/docs/dpdk.dox b/host/docs/dpdk.dox index 539a6ce18..0b86c78ba 100644 --- a/host/docs/dpdk.dox +++ b/host/docs/dpdk.dox @@ -142,6 +142,9 @@ options: dpdk_driver=/usr/local/lib/x86_64-linux-gnu/dpdk/pmds-21.0/ ;dpdk_corelist is the -l flag for the DPDK EAL. See more at the link ; https://doc.dpdk.org/guides-21.11/linux_gsg/build_sample_apps.html#running-a-sample-application + ;Note if you use multiple SFP ports in a streaming application simultaneously, + ;you can specify multiple cores in the core list (e.g. 0, 1, 2) and then assign + ;them each to the separate SFP port/NIC. dpdk_corelist=0,1 ;dpdk_num_mbufs is the total number of packet buffers allocated ;to each direction's packet buffer pool @@ -161,9 +164,11 @@ case, and octets must be separated by colons. Here is an example: [dpdk_mac=3c:fd:fe:a2:a9:09] ;dpdk_lcore selects the lcore that this NIC's driver will run on ;Multiple NICs may occupy one lcore, but the I/O thread will completely - ;consume that lcore's CPU. Also, 0 is reserved for the master thread (i.e. - ;the initial UHD thread that calls init() for DPDK). Attempting to - ;use it as an I/O thread will only result in hanging. + ;consume that lcore's CPU. When using dual SFP configuration, using a + ;different dpdk_lcore value for each SFP connection is recommended and + ;will result in better streaming performance. Also, 0 is reserved for + ;the master thread (i.e.the initial UHD thread that calls init() for DPDK). + ;Attempting to use it as an I/O thread will only result in hanging. ;Note also that by default, the lcore ID will be the same as the CPU ID. dpdk_lcore = 1 ;dpdk_ipv4 specifies the IPv4 address, and both the address and @@ -176,6 +181,8 @@ case, and octets must be separated by colons. Here is an example: dpdk_num_desc=4096 [dpdk_mac=3c:fd:fe:a2:a9:0a] + ;Using a separate dpdk_lcore value for each SFP connection/MAC entry + ;can possibly result in improved streaming performance. E.g. dpdk_lcore = 2. dpdk_lcore = 1 dpdk_ipv4 = 192.168.20.1/24 diff --git a/host/docs/transport.dox b/host/docs/transport.dox index fdb42c610..57fad87ff 100644 --- a/host/docs/transport.dox +++ b/host/docs/transport.dox @@ -32,21 +32,21 @@ the device arguments for the transport associated with the stream. - `send_frame_size` - Default value (X3x0): 1472 (if link rate is GigE) or - 4000 (if link rate is 10GigE) + 8000 (if link rate is 10GigE) - Default value (MPMD): 1472 (if link rate is GigE); - 8000 (if link rate is 10GigE); + 8000 (if link rate is 10GigE or 100GigE); TX MTU (other link rates) - Note: Value will be capped at the link's send MTU - `recv_frame_size` - Default value (X3x0 and MPMD): 1472 (if link rate is GigE); - 8000 (if link rate is 10GigE); + 8000 (if link rate is 10GigE or 100GigE); RX MTU (other link rates) - Note: Value will be capped at the link's receive MTU - `send_buff_size` - Default value (X3x0 and MPMD): - 20 ms of data at the link rate (2.5 MB for 1GigE, 25 MB for 10GigE) + 20 ms of data at the link rate (2.5 MB for 1GigE, 25 MB for 10GigE, 250 MB for 100GigE) - `recv_buff_size` - Default value (X3x0 and MPMD): 20 ms of data at the link rate @@ -156,6 +156,29 @@ One can query the maximums and current settings with the following command: ethtool -g +Tx pause frame support must be enabled when using 100GigE with X410 to ensure proper streaming performance. + +To enable Tx pause frames run the following command on the device in a Linux prompt. + + ethtool -A tx on + +If you are using both SFP ports, you will need to run the above command separately on both of them. + +One can query the the current enable status of TX pause frames by running the following command on the X410 device in a Linux prompt. + + ethtool -a + +The above changes will be volatile and will need to be re-applied every time the device boots or the SFP ports are reconfigured, +e.g. after a fpga image load. + + Automatic enable of TX pause frames will be possible in the future when systemd v2.4.6 or higher is used on the device. + This will be done by using the `TxFlowControl` parameter in the `.network` files(s) used for configuring the SFP port(s) being used. + E.g. When using sfp0 port, add a line `TxFlowControl=1` as shown below to the `/data/network/sfp0.network` file. +``` + [Link] + TxFlowControl=1 +``` + \subsection transport_udp_windows Windows specific notes UDP send fast-path: It is important to change the default UDP diff --git a/host/docs/usrp_x4xx.dox b/host/docs/usrp_x4xx.dox index b932ea0c6..500b66311 100644 --- a/host/docs/usrp_x4xx.dox +++ b/host/docs/usrp_x4xx.dox @@ -5,7 +5,7 @@ \section x4xx_feature_list Comparative Features List - Hardware Capabilities: - - Dual QSFP28 Ports (can be used with 10 GigE) + - Dual QSFP28 Ports (can be used with 10 GigE or 100 GigE) - External PPS input & output - External 10 MHz input - Internal GPSDO for timing, location, and time/frequency reference @@ -827,7 +827,7 @@ For a list of which arguments can be passed into make(), see Section -----------------------|---------------------------------------------------------------------------------|--------------------- addr | IPv4 address of primary SFP+ port to connect to. | addr=192.168.30.2 second_addr | IPv4 address of secondary SFP+ port to connect to. | second_addr=192.168.40.2 - mgmt_addr | IPv4 address or hostname to which to connect the RPC client. Defaults to `addr'.| mgmt_addr=ni-sulfur-311FE00 + mgmt_addr | IPv4 address or hostname to which to connect the RPC client. Defaults to `addr'.| mgmt_addr=ni-x4xx-311FE00 find_all | When using broadcast, find all devices, even if unreachable via CHDR. | find_all=1 master_clock_rate | Master Clock Rate in Hz. | master_clock_rate=250e6 serialize_init | Force serial initialization of motherboards (default is parallel) | serialize_init=1 -- cgit v1.2.3