Hi Rob, I will follow up with you off list with some notes I have for setting up DPDK. We will be publishing an app note on it soon.
Regards, Nate Temple On Mon, Sep 9, 2019 at 4:13 PM Rob Kossler <rkoss...@nd.edu> wrote: > Thanks Michael, > This info was very helpful. > > Regarding "recv_buff_size", I tried setting to 100M and received a warning > that it could not do so because rmem_max was only 33M. Given that my > rmem_max was set all along to 33M, would the recv_buff_size default to 33M > or does it default to something lower such that I still need to set this > device arg? > > Regarding cpufrequtils, I have done everything I can find to get the CPUs > to stay at 3.5GHz. On Ubuntu 14.04, this worked well. And, I have tried > to disable the intel_pstate driver with the appropriate grub setting, but I > have not been successful in Ubuntu 18.04 at keeping the CPU freqs max-ed. > > Finally, regarding DPDK, this seems like the way to go, but with the > limited amount of info available, it is difficult to get this properly > configured. > > Rob > > > On Mon, Sep 9, 2019 at 5:43 PM Michael West <michael.w...@ettus.com> > wrote: > >> Hi Rob, >> >> I would recommend not using the DMA FIFO block. Although the DMA FIFO >> block should work, setting a larger socket buffer on the host or using DPDK >> are much better options. To use a larger socket buffer, just use the >> device argument "recv_buff_size=<size>" and set the <size> to something >> reasonably large. >> >> As far as the Ds, there is flow control between the device and host, but >> drops are still possible between the NIC and system memory if the host is >> not releasing descriptors to the NIC fast enough. For some network cards, >> this can be seen by looking at "rx_missed_errors" value in the output of >> 'ethtool -S <interface>'. Increasing the number of RX descriptors helps, >> but is limited. Use 'sudo ethtool -G <interface> rx 4096' to set the >> descriptors to the maximum value. >> >> For the cpufreq utils, you may have to set the governor on each core >> (i.e. cpufreq-set -g performance -c <core>). Also, if you have the >> intel_pstate driver, it still may vary the CPU frequency with the >> performance governor. >> >> Regards, >> Michael >> >> On Mon, Sep 9, 2019 at 1:41 PM Rob Kossler via USRP-users < >> usrp-users@lists.ettus.com> wrote: >> >>> Hi Nate, >>> I looked at the link you sent (performance tuning tips) and your email. >>> Here are a few comments / questions: >>> >>> - Regarding my initial question, what could be the cause of WORSE >>> performance when I inserted the DmaFIFO in the receive chain of my RFNoC >>> graph? Recall the "Radio->DDC->host" produces no errors, but >>> "Radio->DDC->DmaFIFO->host" produces errors (timeouts) >>> - Regarding "cpufrequtils" (from the performance tuning tips), I >>> have run the suggestions on my 18.04 Ubuntu system (Xeon E5-1620v4 >>> 3.5GHz, >>> 4-core/8-thread), but when I run cpufreq-info, there is often 1 or more >>> CPUs that show up at 1.6 GHz or so (while the majority report ~3.6 GHz). >>> It is not clear to me whether this utility is doing its job or not. >>> - Regarding DPDK, I have tried to install it, but have had no >>> success. The instructions say that after updating grub with "iommu=pt >>> intel_iommu=on hugepages=2048", then "After you reboot, you should see >>> /sys/kernel/iommu_groups populated". I do have such a folder, but it is >>> empty so I'm not sure if this step was successful or not. Furthermore, I >>> am unable to run the dpdk-devbind python script to bind the vfio-pci >>> driver >>> to my Intel X520-DA2 NIC (see error message below) >>> - Regarding XFS vs EXT4, this is something I haven't tried yet, but >>> plan to. I am completely unfamiliar with XFS. My SSD is actually 4 >>> Samsung EVO 850 SATA SSDs in a software RAID-0 (using mdadm). If I copy >>> a >>> huge file from my RAM disk to the SSD, I am able to verify transfer rates >>> greater than 1GB/s (I believe closer to 1.5GB/s). >>> - Finally, regarding "D" (sequence errors), what is the possible >>> cause? These are the most frustrating errors because their cause is a >>> mystery to me. I fully expect that when my host PC is too slow to keep >>> up >>> with the torrent of data coming from the USRP that it should eventually >>> backpressure all the way to the Radio which will then generate Overflows >>> because it has no place to send the A/D data. So, if I was only seeing >>> "O", it would make sense to me. But, the "D" makes no sense to me in my >>> point-to-point direct connection between host and USRP. Do you know of >>> any >>> root cause for "D"? >>> >>> Thanks. >>> Rob >>> >>> *DPDK error messages during dpdk-devbind.py* >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ >>> /usr/share/dpdk/usertools/dpdk-devbind.py --status >>> >>> Network devices using DPDK-compatible driver >>> ============================================ >>> <none> >>> >>> Network devices using kernel driver >>> =================================== >>> 0000:00:19.0 'Ethernet Connection (2) I218-LM 15a0' if=eno1 drv=e1000e >>> unused= *Active* >>> 0000:01:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens4f0 drv=ixgbe unused= >>> 0000:01:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens4f1 drv=ixgbe unused= >>> 0000:04:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens2f0 drv=ixgbe unused= >>> 0000:04:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens2f1 drv=ixgbe unused= >>> >>> Other Network devices >>> ===================== >>> <none> >>> >>> Crypto devices using DPDK-compatible driver >>> =========================================== >>> <none> >>> >>> Crypto devices using kernel driver >>> ================================== >>> <none> >>> >>> Other Crypto devices >>> ==================== >>> <none> >>> >>> Eventdev devices using DPDK-compatible driver >>> ============================================= >>> <none> >>> >>> Eventdev devices using kernel driver >>> ==================================== >>> <none> >>> >>> Other Eventdev devices >>> ====================== >>> <none> >>> >>> Mempool devices using DPDK-compatible driver >>> ============================================ >>> <none> >>> >>> Mempool devices using kernel driver >>> =================================== >>> <none> >>> >>> Other Mempool devices >>> ===================== >>> <none> >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ sudo >>> /usr/share/dpdk/usertools/dpdk-devbind.py --bind=vfio-pci 01:00.0 >>> [sudo] password for irisheyes0: >>> Error - no supported modules(DPDK driver) are loaded >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ >>> /usr/share/dpdk/usertools/dpdk-devbind.py --status >>> >>> Network devices using DPDK-compatible driver >>> ============================================ >>> <none> >>> >>> Network devices using kernel driver >>> =================================== >>> 0000:00:19.0 'Ethernet Connection (2) I218-LM 15a0' if=eno1 drv=e1000e >>> unused= *Active* >>> 0000:01:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens4f0 drv=ixgbe unused= >>> 0000:01:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens4f1 drv=ixgbe unused= >>> 0000:04:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens2f0 drv=ixgbe unused= >>> 0000:04:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens2f1 drv=ixgbe unused= >>> >>> Other Network devices >>> ===================== >>> <none> >>> >>> Crypto devices using DPDK-compatible driver >>> =========================================== >>> <none> >>> >>> Crypto devices using kernel driver >>> ================================== >>> <none> >>> >>> Other Crypto devices >>> ==================== >>> <none> >>> >>> Eventdev devices using DPDK-compatible driver >>> ============================================= >>> <none> >>> >>> Eventdev devices using kernel driver >>> ==================================== >>> <none> >>> >>> Other Eventdev devices >>> ====================== >>> <none> >>> >>> Mempool devices using DPDK-compatible driver >>> ============================================ >>> <none> >>> >>> Mempool devices using kernel driver >>> =================================== >>> <none> >>> >>> Other Mempool devices >>> ===================== >>> <none> >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ sudo modprobe vfio-pci >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ >>> /usr/share/dpdk/usertools/dpdk-devbind.py --status >>> >>> Network devices using DPDK-compatible driver >>> ============================================ >>> <none> >>> >>> Network devices using kernel driver >>> =================================== >>> 0000:00:19.0 'Ethernet Connection (2) I218-LM 15a0' if=eno1 drv=e1000e >>> unused=vfio-pci *Active* >>> 0000:01:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens4f0 drv=ixgbe unused=vfio-pci >>> 0000:01:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens4f1 drv=ixgbe unused=vfio-pci >>> 0000:04:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens2f0 drv=ixgbe unused=vfio-pci >>> 0000:04:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' >>> if=ens2f1 drv=ixgbe unused=vfio-pci >>> >>> Other Network devices >>> ===================== >>> <none> >>> >>> Crypto devices using DPDK-compatible driver >>> =========================================== >>> <none> >>> >>> Crypto devices using kernel driver >>> ================================== >>> <none> >>> >>> Other Crypto devices >>> ==================== >>> <none> >>> >>> Eventdev devices using DPDK-compatible driver >>> ============================================= >>> <none> >>> >>> Eventdev devices using kernel driver >>> ==================================== >>> <none> >>> >>> Other Eventdev devices >>> ====================== >>> <none> >>> >>> Mempool devices using DPDK-compatible driver >>> ============================================ >>> <none> >>> >>> Mempool devices using kernel driver >>> =================================== >>> <none> >>> >>> Other Mempool devices >>> ===================== >>> <none> >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ sudo >>> /usr/share/dpdk/usertools/dpdk-devbind.py --bind=vfio-pci 01:00.0 >>> Error: bind failed for 0000:01:00.0 - Cannot bind to driver vfio-pci >>> Error: unbind failed for 0000:01:00.0 - Cannot open /sys/bus/pci/drivers >>> //unbind >>> irisheyes0@irisheyes0-HP-Z440-Workstation:~$ >>> >>> >>> >>> On Fri, Sep 6, 2019 at 6:02 PM Rob Kossler <rkoss...@nd.edu> wrote: >>> >>>> Hi Nate, >>>> I'm using UHD 3.14.0.1. I am not using DPDK. >>>> >>>> Regarding the tuning, I think I was not clear in my email. I have no >>>> trouble streaming to RAM disk using the standard Radio->DDC->host graph. I >>>> mentioned that I was running 2x50MS/s, but I can go up to 2x200MS/s with >>>> success. My issue is that after adding the DmaFIFO to the Rx chain, I got >>>> timeouts (i.e., I suppose that the flow stopped for some reason) when >>>> running the graph Radio->DDC->DmaFIFO->host. Even at 2x50MS/s. >>>> >>>> So, my question is: why is this happening? What is wrong with my plan >>>> to insert the DmaFIFO in the Rx chain? What would possibly cause the >>>> streaming to terminate such that my recv() loop times out (even with a 5s >>>> timeout)? >>>> >>>> Rob >>>> >>>> >>>> >>>> On Fri, Sep 6, 2019 at 12:56 PM Ettus Research Support < >>>> supp...@ettus.com> wrote: >>>> >>>>> Hi Rob, >>>>> >>>>> What version of UHD are you using? >>>>> >>>>> 2x RX 50 MS/s streams should work without much issue with a fast >>>>> enough host, especially to a ram disk. >>>>> >>>>> Are you using DPDK? DPDK support for X3xx was recently added to UHD >>>>> and will reduce the overhead on the host side, which can help quite a bit. >>>>> Some anecdotal testing I've done with a N310, with the native UHD driver, >>>>> to stream 2 channels full duplex, the minimum cpu freq I was able to run >>>>> without any flow control errors was 3.8 GHz. Using DPDK, I was able to run >>>>> 2x2 @ 125 MS/s with my CPU cores locked at 1.5 GHz with no flow control >>>>> errors. Using DPDK, it's possible to stream 2x2 @ 200e6 on the X3xx with a >>>>> SRAM FPGA image (it's not possible to TX at full rate using the native >>>>> driver and DRAM based FPGA). >>>>> >>>>> You could try the few things listed here >>>>> https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks >>>>> >>>>> One other bit to add, I've been able to stream 1 RX channel @ 200 MS/s >>>>> straight to disk using a Intel 750 Series PCIe SSD until it was full >>>>> (circa >>>>> UHD 3.10.x). To do that, I had to use a sc16 host side data format and >>>>> also >>>>> use a XFS file system instead of EXT4. The host was a i7-4790k @ 4.4 GHz. >>>>> I >>>>> would recommend NVMe SSD drives now as they support faster rates than that >>>>> PCIe SSD. >>>>> >>>>> >>>>> Regards, >>>>> Nate Temple >>>>> >>>>> On Fri, Sep 6, 2019 at 8:37 AM Rob Kossler via USRP-users < >>>>> usrp-users@lists.ettus.com> wrote: >>>>> >>>>>> Hi, >>>>>> As part of an effort to improve capability to store incoming receive >>>>>> chain samples to files on my SSD without errors ('O' or 'D'), I decided >>>>>> to >>>>>> wire an X310 noc graph to include the DmaFIFO. My thought was that the >>>>>> DmaFIFO could better tolerate varying rates of sample consumption at the >>>>>> OS. >>>>>> >>>>>> Before trying this by streaming to a file on my SSD, I first ran a >>>>>> test which streamed to a RAM-based file (60 GB ram filesystem). I used >>>>>> an >>>>>> X310/UBX160 with the default FPGA XG image and initiated a 2-channel >>>>>> receive at 50MS/s (using my C++ app & UHD). To my surprise, I am getting >>>>>> frequent "timeouts" on receive, but not always at the same time. In one >>>>>> case, the receive worked successfully for 28 secs (2 ch, 50 MS/s). In >>>>>> other cases, it timed out immediately or after several seconds. Note >>>>>> that >>>>>> I can reliably run this same test without error if I remove the DmaFIFO. >>>>>> >>>>>> The following works fine: >>>>>> RxRadio -> DDC -> host file (in RAM file system) >>>>>> >>>>>> The following times-out at random times: >>>>>> RxRadio -> DDC -> DmaFIFO -> host file (in RAM file system) >>>>>> >>>>>> What could be the cause? Is there any reason the DmaFIFO shouldn't >>>>>> work in the receive chain? >>>>>> >>>>>> Rob >>>>>> _______________________________________________ >>>>>> USRP-users mailing list >>>>>> USRP-users@lists.ettus.com >>>>>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com >>>>>> >>>>> _______________________________________________ >>> USRP-users mailing list >>> USRP-users@lists.ettus.com >>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com >>> >>
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com