Ubuntu packages... No -dev, => no includes:( The ICMP test is fine for testing physical wear (line, connectors OSI layer 2) Ofc a dedicated usrp benchmark is better for application (layer 4) benchmark:)
PS. If this conversation is getting long, we can switch to private mail... On Mon, Apr 28, 2025 at 2:45 AM Marcus D. Leech <patchvonbr...@gmail.com> wrote: > On 27/04/2025 19:34, Nikos Balkanas wrote: > > For that i will need the sources. > Do you know where can I download the UHD 4.6.0 sources? > > TIA > Nikos > > If you have an installed version of UHD on your system, then the examples > should also have been installed. How did you install > UHD? > > You might need to install "uhd-host" if you installed from packaged > binaries, but all the examples and utilities should be > there along with the libraries. > > But the GIT repo for the UHD source is here: > > https://github.com/EttusResearch/uhd > > These days, most distros package UHD, so in many cases you don't need to > build from source. > > > > > On Mon, Apr 28, 2025 at 12:39 AM Marcus D. Leech <patchvonbr...@gmail.com> > wrote: > >> On 27/04/2025 17:37, Nikos Balkanas wrote: >> >> Hi Marcus, >> >> You were right. No need to change NIC:) >> This is not a software issue. uhd_rx_streamer_max_num_samps runs right >> after uhd initialization before >> any other code had the chance to run. >> Link capacity doesn't seem to be the issue either... >> Running pchar on the link, descendant of pathchar, reports a throughput >> of 5.619 Kb/s requesting ICMP replies, >> to varying packet sizes (32->9000 (MTU), incr by 32). >> sudo pchar -m 9000 -p ipv4icmp usrp >> https://www.kitchenlab.org/www/bmah/Software/pchar/ >> >> It corresponds to 351.218.019 16-bit samples or 175,609.044 32-bit >> samples, if each sample is 32-bit(real + imag) >> Seems that uhd is not running at link capacity but is doing smt else. >> I will have to download and check with the sources... >> The package version for Ubuntu 24.04 is uhd 4.6.0. >> Where can I download the sources for uhd 4.6.0? >> >> BR >> Nikos >> >> YOu CANNOT use ICMP tests to determine link capacity with a USRP -- ICMP >> is processed via completely different >> "stack" in the radio. >> >> Use "benchmark_rate" instead. >> >> >> >> On Sat, Apr 26, 2025 at 7:02 AM Nikos Balkanas <nbalka...@gmail.com> >> wrote: >> >>> Thanks for your time. >>> I will check out the example. >>> This is not a buffer problem. I just need 1024 Samples (real+imaginary) >>> for FFT... >>> I should be able to get them in a single pass. >>> You saw my code, not a smoking gun there. >>> >>> This is probably is a physical problem. >>> Cable is an SFP fiber dedicated line. Cannot go bad. >>> Maybe the connections are not sitting right :(... >>> >>> BR >>> Nikos >>> >>> On Sat, Apr 26, 2025 at 6:45 AM Marcus D. Leech <patchvonbr...@gmail.com> >>> wrote: >>> >>>> On 25/04/2025 23:33, Nikos Balkanas wrote: >>>> >>>> Actually MTU is 9000. This is one of the recommendations... >>>> I tried it with MTU 1500. It was worse:( >>>> maxsamples dropped to 364... >>>> >>>> Right, 9000, rather than 8000. >>>> >>>> Upgrading to 10Gbit wont' give you larger MTU. >>>> >>>> What you're trying to do, I think, is to solve a buffer-management >>>> problem in your *application* at entirely the wrong >>>> level in the stack. >>>> >>>> It is EXCEEDINGLY COMMON for hardware drivers to only be able to >>>> deliver in chunks that may not be perfectly adapted to >>>> the requirements of your application. So, a common programming >>>> pattern is to deal with this in your application. >>>> >>>> You should probably look at example code like rx_samples_to_file >>>> >>>> >>>> >>>> [INFO] [UHD] linux; GNU C++ version 13.2.0; Boost_108300; >>>> UHD_4.6.0.0+ds1-5.1ubuntu0.24.04.1 >>>> [INFO] [X300] X300 initialization sequence... >>>> [INFO] [X300] Maximum frame size: 1472 bytes. >>>> [WARNING] [X300] For the 192.168.40.2 connection, UHD recommends a send >>>> frame size of at least 8000 for best >>>> performance, but your configuration will only allow 1472.This may >>>> negatively impact your maximum achievable sample rate. >>>> Check the MTU on the interface and/or the send_frame_size argument. >>>> [WARNING] [X300] For the 192.168.40.2 connection, UHD recommends a >>>> receive frame size of at least 8000 for best >>>> performance, but your configuration will only allow 1472.This may >>>> negatively impact your maximum achievable sample rate. >>>> Check the MTU on the interface and/or the recv_frame_size argument. >>>> [INFO] [GPS] No GPSDO found >>>> [INFO] [X300] Radio 1x clock: 200 MHz >>>> [WARNING] [UDP] The send buffer could not be resized sufficiently. >>>> Target sock buff size: 24912805 bytes. >>>> Actual sock buff size: 1048576 bytes. >>>> See the transport application notes on buffer resizing. >>>> Please run: sudo sysctl -w net.core.wmem_max=24912805 >>>> Sat Apr 26 06:30:34 2025 [00] [+] Created USRP with args >>>> Sat Apr 26 06:30:34 2025 [00] [+] Master clock is at 200 Mhz >>>> Sat Apr 26 06:30:34 2025 [00] [+] Tuner[0] gain set to 30 (30) dB >>>> [WARNING] [UDP] The send buffer could not be resized sufficiently. >>>> Target sock buff size: 24912805 bytes. >>>> Actual sock buff size: 1048576 bytes. >>>> See the transport application notes on buffer resizing. >>>> Please run: sudo sysctl -w net.core.wmem_max=24912805 >>>> Sat Apr 26 06:30:34 2025 [00] [*] scanner.l:1446:main Incorrect >>>> maxsamples (364). Expected 19960. >>>> Sat Apr 26 06:30:34 2025 [00] [+] Max samples/buffer[0]: 364 >>>> [WARNING] [0/Radio#0] Ignoring stream command for finite acquisition of >>>> zero sam >>>> >>>> Nikos >>>> >>>> On Sat, Apr 26, 2025 at 5:46 AM Marcus D. Leech < >>>> patchvonbr...@gmail.com> wrote: >>>> >>>>> On 25/04/2025 22:26, Nikos Balkanas wrote: >>>>> >>>>> Thanks Marcus, >>>>> >>>>> for your fast reply. >>>>> >>>>> On Sat, Apr 26, 2025 at 4:08 AM Marcus D. Leech < >>>>> patchvonbr...@gmail.com> wrote: >>>>> >>>>>> On 25/04/2025 20:50, Nikos Balkanas wrote: >>>>>> >>>>>> Hello, >>>>>> >>>>>> I need to buy a new NIC. What would you suggest? >>>>>> The one I use is an old Mellanox 10 Gbs, before the Connect-4 series. >>>>>> It can only do 1996 S/s, need 19960 (10x more) to work with latest >>>>>> uhd. >>>>>> Using Ubuntu 24.04 and uhd 4.6.0 >>>>>> >>>>>> So, 1.996ksps vs 19.960ksps? You hardly need a 10Gbit link to >>>>>> support that. So, perhaps something >>>>>> is being lost here in your requirements? >>>>>> >>>>> >>>>> True. Can't explain it in terms of bandwidth. 16 * 1996 = 31.936 Kbps, >>>>> 16 * 19960 = 319.360 Kbps well short of a 10 Gbps line:( >>>>> Does a complex pair count as 1 sample, or 2? >>>>> I have followed all the instructions in >>>>> https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks, >>>>> Even installed the DPDK drivers. My Mellanox is too old to use their >>>>> OFED drivers:( >>>>> >>>>>> >>>>>> On a related question. it seems that the streamer doesn't crash >>>>>> anymore >>>>>> when receiving less than MAXSPS samples, instead it reads 0:( >>>>>> This was due to the sse2 code not aligned in convert. >>>>>> I change my stream args to cpu_format=sc16, otw=sc16, so no >>>>>> conversion required. >>>>>> Streamer still doesn't read anything. Is there a reason for it? >>>>>> >>>>>> You'd need to share more of your code. This should just work as far >>>>>> as I can tell. >>>>>> >>>>>> Thanks. these are just the usrp code: >>>>> >>>>> int main() >>>>> { >>>>> uhd_stream_args_t stream_args = >>>>> { >>>>> >>>>> .cpu_format = "sc16", >>>>> >>>>> .otw_format = "sc16", >>>>> .args = >>>>> "", >>>>> >>>>> .n_channels = 1, >>>>> >>>>> .channel_list = &channel >>>>> }; >>>>> ..uhd_stream_cmd_t stream_cmd = >>>>> { >>>>> >>>>> .stream_mode = UHD_STREAM_MODE_NUM_SAMPS_AND_DONE, >>>>> >>>>> .stream_now = true >>>>> }; >>>>> >>>>> if (uhd_init(0, 0, gain)) do_exit(20); >>>>>> if ((err = uhd_usrp_get_rx_stream(dev[0], &stream_args, >>>>>> rx_streamer[0]))) >>>>>> { >>>>>> uhd_get_last_error(errmsg, 127); >>>>>> error(log, "Failed to get streamer[0] (%d). %s.\n", 0, FL, >>>>>> LN, FN, err, errmsg); >>>>>> uhd_rx_streamer_free(&rx_streamer[0]); >>>>>> rx_streamer[0] = NULL; >>>>>> uhd_rx_metadata_free(&md[0]); >>>>>> md[0] = NULL; >>>>>> do_exit(30); >>>>>> } >>>>>> if ((err = uhd_rx_streamer_max_num_samps(rx_streamer[0], >>>>>> &maxsamps))) >>>>>> >>>>> { >>>>>> uhd_get_last_error(errmsg, 127); >>>>>> error(log, "Failed to get max samples/buffer[0] (%d). >>>>>> %s.\n", 0, FL, LN, FN, err, >>>>>> ..errmsg); >>>>>> do_exit(35); >>>>>> } >>>>>> if (maxsamps != MAXSMPS) >>>>>> warn(log, "Incorrect maxsamples (%ld). Expected %d.\n", 0, >>>>>> FL, LN, FN, maxsamps, >>>>>> MAXSMPS); >>>>>> info(log, "Max samples/buffer[0]: %ld\n", 0, maxsamps); >>>>>> >>>>>> if ((err = uhd_rx_streamer_issue_stream_cmd(rx_streamer[0], >>>>>> &stream_cmd))) >>>>>> >>>>> { >>>>>> uhd_get_last_error(errmsg, 127); >>>>>> error(log, "Failed to start streamer[0] (%d). %s.\n", 0, FL, >>>>>> LN, FN, err, errmsg); >>>>>> do_exit(40); >>>>>> } >>>>>> >>>>> [...] >>>>> do_exit(0) >>>>> } >>>>> >>>>> >>>>>> bool uhd_init(size_t channel, double srate, double gain) >>>>>> { >>>>>> double tmp; >>>>>> uhd_rx_metadata_error_code_t err; >>>>>> >>>>>> if ((err = uhd_set_thread_priority(uhd_default_thread_priority, >>>>>> true))) >>>>>> warn(log, "Unable to set main thread priority (%d). >>>>>> %s.\n", 0, FL, LN, FN, >>>>>> err, uhdError(err)); >>>>>> /* Create USRP */ >>>>>> f ((err = uhd_usrp_make(&dev[channel], "type=x300"))) >>>>>> { >>>>>> error(log, "Failed to create USRP (%d). %s.\n", 0, FL, LN, >>>>>> FN, err, >>>>>> uhdError(err)); >>>>>> dev[channel] = NULL; >>>>>> return(FAIL); >>>>>> >>>>> } >>>>>> info(stderr, "Created USRP with args\n", 0); >>>>>> >>>>>> /* Create RX streamer */ >>>>>> if ((err = uhd_rx_streamer_make(&rx_streamer[channel]))) >>>>>> { >>>>>> error(log, "Failed to create rx_streamer[%d] (%d). %s.\n", >>>>>> 0, FL, LN, FN, >>>>>> channel, err, uhdError(err)); >>>>>> return(FAIL); >>>>>> } >>>>>> /* Create RX metadata */ >>>>>> if ((err = uhd_rx_metadata_make(&md[channel]))) >>>>>> { >>>>>> error(log, "Failed to create md[%d] (%d). %s.\n", 0, FL, LN, >>>>>> FN, channel, >>>>>> err, uhdError(err)); >>>>>> return(FAIL); >>>>>> } >>>>>> >>>>>> /* Get master clock rate */ >>>>>> if ((err = uhd_usrp_get_master_clock_rate(dev[channel], 0, >>>>>> &tmp))) >>>>>> >>>>> { >>>>>> error(log, "Failed to set master clock to %.0lf Mhz (%d). >>>>>> %s.\n", 0, FL, >>>>>> LN, FN, tmp/1000000, err, uhdError(err)); >>>>>> return(FAIL); >>>>>> } >>>>>> info(stderr, "Master clock is at %.0lf Mhz\n", 0, tmp/1000000); >>>>>> /* Set the sample rate */ >>>>>> if (srate && !uhd_set_rx_rate_check(channel, srate)) >>>>>> return(FAIL); >>>>>> /* Set the tuner gain SBX-120 is 0-31.5 in .5 db steps */ >>>>>> >>>>> if ((err = uhd_usrp_set_rx_gain(dev[channel], gain, channel, >>>>>> ""))) >>>>>> { >>>>>> error(log, "Failed to set tuner[%d] gain to %.0lf db >>>>>> (%d). %s.\n", 0, FL, >>>>>> LN, FN, channel, gain, err, uhdError(err)); >>>>>> return(FAIL); >>>>>> } >>>>>> if (!(err = uhd_usrp_get_rx_gain(dev[channel], channel, "", >>>>>> &tmp))) >>>>>> info(log, "Tuner[%d] gain set to %.0lf (%.0lf) dB\n", >>>>>> 0, channel, tmp, gain); >>>>>> >>>>> ./* Set channel bw to conserve tuner resources. Not needed, >>>>> set by srate */ >>>>> uhd_usrp_set_rx_bandwidth(dev[channel], srate, channel); >>>>> ./* Disable subtracting constant averaged background. Signal >>>>> looks cleaner */ >>>>> if ((err = >>>>> uhd_usrp_set_rx_dc_offset_enabled(dev[channel], false, channel))) >>>>> { >>>>> warn(log, "Failed to disable FPGA DC offset on >>>>> channel %d(%d). %s.\n", 0, >>>>> FL, LN, FN, channel, err, uhdError(err)); >>>>> } >>>>> info(stderr, "Disabled FPGA DC offset on channel >>>>> %d\n", 0, channel); >>>>> return(SUCCESS); >>>>> } >>>>> >>>>> This is the generated output: >>>>> >>>>> [INFO] [UHD] linux; GNU C++ version 13.2.0; Boost_108300; >>>>> UHD_4.6.0.0+ds1-5.1ubuntu0.24.04.1 >>>>> [INFO] [X300] X300 initialization sequence... >>>>> [INFO] [X300] Maximum frame size: 8000 bytes. >>>>> [INFO] [X300] Radio 1x clock: 200 MHz >>>>> Sat Apr 26 03:33:48 2025 [00] [+] Created USRP with args >>>>> Sat Apr 26 03:33:48 2025 [00] [+] Master clock is at 200 Mhz >>>>> Sat Apr 26 03:33:48 2025 [00] [+] Tuner[0] gain set to 30 (30) dB >>>>> Sat Apr 26 03:33:48 2025 [00] [*] scanner.l:1446:main Incorrect >>>>> maxsamples (1996). Expected 19960. >>>>> Sat Apr 26 03:33:48 2025 [00] [+] Max samples/buffer[0]: 1996 >>>>> [WARNING] [0/Radio#0] Ignoring stream command for finite acquisition >>>>> of zero samples >>>>> I hope this reads OK. Maybe next time I should attach the code:) >>>>> >>>>>> TIA >>>>>> Nikos >>>>>> >>>>>> _______________________________________________ >>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>>>> >>>>>> >>>>>> I believe that max number of samples-per-buffer is limited by MTU >>>>> size. Which is typically around 8000 or so for "jumbo frames". >>>>> >>>>> >>>>> >>>> >> >
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com