For that i will need the sources. Do you know where can I download the UHD 4.6.0 sources?
TIA Nikos 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