Actually MTU is 9000. This is one of the recommendations...
I tried it with MTU 1500. It was worse:(
maxsamples dropped to 364...

[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

Reply via email to