-
Notifications
You must be signed in to change notification settings - Fork 670
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unable to transmit at full 491.52MSPS (or 245.76MSPS!) rate with an USRP x410 #736
Comments
Did the same tests with the UC_200 image attempting to stream at 245.76MSPS on the exact same system. Unfortunately that does not work at all either with the same symptoms as using the CG_400 image.
And while it does manage to sustain 122.88MSPS a bit better, underruns are also observed along the way. There are very few in the benchmark at random points during the test, but they happen more often in any other UHD transmit example.
The same system does manage to keep a x310 at 200MSPS happy however. |
Hey, i tried this and got it to work with all tricks from the KB Guide I also have a small script to do this after Startup: #!/bin/bash
size=250000000
sudo sysctl -w net.core.wmem_max=$size
sudo sysctl -w net.core.rmem_max=$size
sudo sysctl -w net.core.wmem_default=$size
sudo sysctl -w net.core.rmem_default=$size
sudo ip link set dev <dev1> mtu 9000
sudo ip link set dev <dev2> mtu 9000
sudo ethtool -G <dev1> tx 4096 rx 4096
sudo ethtool -G <dev2> tx 4096 rx 4096
for ((i=0;i<$(nproc --all);i++)); do sudo cpufreq-set -c $i -r -g performance; done What arguments do you use for the Benchmark? $sudo ./benchmark_rate \
--args "type=x4xx,addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=<IPaddr>,master_clock_rate=500e6" \
--priority "high" \
--multi_streamer \
--duration 60 \
--channels "0" \
--rx_rate 500e6 \
--rx_subdev "B:1" \
--tx_rate 500e6 \
--tx_subdev "A:0"
[...]
[00:00:17.641169153] Testing transmit rate 500.000000 Msps on 1 channels
[00:01:17.641902988] Benchmark complete.
Benchmark rate summary:
Num received samples: 29999545568
Num dropped samples: 0
Num overruns detected: 0
Num transmitted samples: 29999401344
Num sequence errors (Tx): 0
Num sequence errors (Rx): 0
Num underruns detected: 0
Num late commands: 0
Num timeouts (Tx): 0
Num timeouts (Rx): 0
Done! So at least the Benchmark works fine. However i have not yet achieved that high rates with other Applications like GNU Radio. Cheers, Sebastian! |
Thanks @basti-schr, unfortunately this is all things I have already done (in order to get RX working at these rates), but that does not help on my end. I don't expect GNU Radio to handle it at all, but the benchmark not passing and UHD saturating a single CPU core is a bit suspicious to me in comparison to the behavior seen with other USRPs. |
Okay, another thing I forgot to mention is to install DPDK. Especially the last point from this article helped a lot by setting the |
Thanks for the information again @basti-schr. Clearly this should be a bit more obvious than it is now in the documentation! :-) I have set DPDK up as instructed (v21.11.4). Testing loopback via DPDK examples works as expected, but UHD still does not work at all. /etc/uhd/uhd.conf
/etc/default/grub
Benchmark command :
This results in a RFNoc error, which I am unable to find much information about in this context.
Unforunately though here |
Okay, from this point i can only guess:
Maybe that`s why for you the EAL reports IOVA mode as 'PA' but for me it`s 'VA'
$ grep Huge /proc/meminfo
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 2048
HugePages_Free: 2000
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 4194304 kB But this message from EAL is normal:
/etc/uhd/uhd.conf
Also note that i have configured the I hope i can give you some hints, i also took some weeks to figure out the right setup. |
@basti-schr I ended up figuring it out before I saw your reply. My changes were very similar to yours and now, outside of heavy drops for a few seconds while buffers settle everything is functional. Thanks a lot for your hints! However, it's honestly disappointing how badly this is documented. The high bandwidth is advertised as one of the main feature but it's taken a lot of research to get anywhere near there :-) It would be good if NI/Ettus could add this in the main x4xx documentation. I'll probably leave this open for this purpose. |
I agree that bad documentation is a bug. |
i want to know if install nic driver first(./mlnxofedinstall --dpdk), then install dpdk(sudo apt install dpdk dpdk-dev)? Or inverse? |
Hello!
Lately I have been doing some tests and writing code with an USRP x410 I have access to for the moment (via https://twitter.com/SDR_Radio).
Getting it working after flashing the correct image was not too complicated, except some documentation was lacking (specifically, the MTU configuration is mentioned in the x3xx documentation but entirely missing on the x4xx side of things).
In receive, after flashing the CG_400 image and doing all the required network configuration, I am able to stream the full 471.52MSPS with no issues at all using SatDump. The
benchmark_rate
example also shows no drops, overflows etc in cf32 host format and sc16 wire format.However, when I got to attempting to transmit, nothing I was able to write was able to stream as the expected full rate of 471.52MSPS without major underruns. This occurs even with a simple while loop sending large buffers or similar, with UHD seemingly saturating that thread already. It's visible enough the transmit (red) LED on the USRP visibly blinks constantly. This behavior is also observed using the provided
benchmark_rate
example. (I have also attempted modifying various buffer sizes and network configuration to no avail.)RX Bench :
TX Bench :
The x410 is connected via QSFP+ (100GB) on Mellanox cards on a high-end workstation :
Mellanox Technologies MT27800 Family [ConnectX-5]
Intel i9-10980XE (36) @ 4.600GHz
I have tested raw streaming over the 100GB link and the machine is able to sustain far more than required to feed the x410 in this configuration. Considering the setup in use I would expect this to work.
The text was updated successfully, but these errors were encountered: