Since no one else reported this as a problem, it must be a C-API bug. Seems I'm the only one using it:( I could have fixed it, but since I have more issues with UHD, I opted to write my own C driver for it... bb friends, I'm leaving the group:(
BR Nikos On Fri, Aug 1, 2025 at 5:20 PM Nikos Balkanas <nbalka...@gmail.com> wrote: > I'm receiving the correct signal and number of items received. > But the buffer is not freed. After ~25 MBs I start getting OOs, until > it stalls. > GDB shows that it skips uhd code updating the pointer in the source buffer. > That's bad:( > > Nikos > > On Fri, Aug 1, 2025 at 3:32 PM Martin Braun <martin.br...@ettus.com> > wrote: > >> The return value of recv() is the number of items that are pulled from >> the receive buffer, and are copied to your OpenCL buffer. When it returns, >> that's the amount of space freed in the receive buffer. >> >> --M >> >> On Fri, Aug 1, 2025 at 7:47 AM Nikos Balkanas <nbalka...@gmail.com> >> wrote: >> >>> Seems it runs through >>> host/lib/include/uhdlib/transport/rx_streamer_impl.hpp: 137 >>> -> _recv_one_packet() : 276 >>> -> _convert_to_out_buff() >>> -> _converters[chan]->conv(buffer_ptr, out_buffs, num_samps); 362 >>> -> host/include/uhd/convert.hpp:35 >>> -> host/lib/convert/sse2_sc16_to_fc32.cpp: 124 >>> -> chdr_sc16_to_xx : 173 >>> -> host/lib/convert/convert_common.hpp: 198 >>> Where it does the generic (non-sse2) conversion. >>> When it returns it goes back >>> to host/lib/include/uhdlib/transport/rx_streamer_impl.hpp: 137 and returns. >>> It should have gone instead >>> to host/lib/include/uhdlib/transport/rx_streamer_impl.hpp: 362 to continue. >>> Next line would be: // Advance the pointer for the source buffer >>> which is never executed:( >>> >>> I cannot test if this is the OO problem, since gdb has a bug with >>> breakpoint locations. >>> The code in converters seems to mess up the memory for the IR register >>> (AMD CPU - next instruction) >>> >>> BR >>> Nikos >>> >>> On Fri, Aug 1, 2025 at 12:55 AM Nikos Balkanas <nbalka...@gmail.com> >>> wrote: >>> >>>> I always read my buffers. That's the whole point. Not using my X310 for >>>> anything else. >>>> Not transmitting anything. >>>> Besides, between your X310 estimations and my calculations, it turns >>>> out, that *no buffer* is ever cleared. >>>> I could understand missing a couple of reads, which I don't, but all of >>>> them? >>>> The buffer current pointer is advanced fine. I always read in the new >>>> data, never the same. >>>> But it doesn't delete the old reads below the current pointer:( >>>> Maybe it has to do with the "strange memory" I use. >>>> UHD uses a lot of "weird" code that is not very portable. >>>> What UHD file is it? I need to check it, and run it through gdb... >>>> >>>> TIA >>>> Nikos >>>> >>>> On Thu, Jul 31, 2025 at 11:25 PM Martin Braun <martin.br...@ettus.com> >>>> wrote: >>>> >>>>> It sounds like you are not permanently reading samples. Everytime >>>>> rx_streamer::recv() returns, the samples are "removed" from the buffers. >>>>> >>>>> --M >>>>> >>>>> On Thu, Jul 31, 2025 at 8:04 PM Nikos Balkanas <nbalka...@gmail.com> >>>>> wrote: >>>>> >>>>>> Thanks Martin, >>>>>> >>>>>> for your fast response. >>>>>> My bad not mentioning my setup. But you got them right:) >>>>>> Ubuntu 24.04, UHD 4.6, X310, 10 Gbe line. >>>>>> >>>>>> 1) Yup. I start the recv() right after I start the streamer. >>>>>> 2) Can't change that. Buffers are created in OpenCL and am mapping >>>>>> them to the host side to write them. They are limited to the FFT size, >>>>>> 1024 >>>>>> samples. >>>>>> >>>>>> The interesting thing is that at first I am using an FFT batch size >>>>>> of 16x, that is 16384 samples. >>>>>> That means that I have to back and get more samples 16x! >>>>>> However, i am not getting the OOs then. >>>>>> Later on, I only do a single pass, .num_samples = 1024, just enough >>>>>> for 1 FFT, for now. This might change in the future. >>>>>> But this is where I'm getting the OO's. >>>>>> My test results, couldn't get OO's with 3e5 samples ~ 5 MB in 11 hrs. >>>>>> That shows that rx_streamer buffers are larger than 5 MB, in line with >>>>>> your >>>>>> estimation of 25 MBs:) >>>>>> These are big buffers:) >>>>>> Doing a few calculations, I read 1133 samples in 16x mode ~18.5 MB + >>>>>> 6.054 MB in 1x single FFT mode ~24.6 MBs before OOs appear. >>>>>> Seems that I don't read anything! But I read every single sample:( >>>>>> Must be that rx_streamer delivers the samples but doesn't reduce its >>>>>> buffers... >>>>>> >>>>>> This shouldn't be happening. Where in UHD sources is this controlled? >>>>>> >>>>>> TIA >>>>>> Nikos >>>>>> >>>>>> On Thu, Jul 31, 2025 at 12:00 PM Martin Braun <martin.br...@ettus.com> >>>>>> wrote: >>>>>> >>>>>>> The size of the recv buffer depends on a bunch of things. On X310, >>>>>>> when using 10 GbE, UHD will try and make the socket buffer 25MB in size. >>>>>>> Until the socket buffer is full, there will be no overrun. >>>>>>> >>>>>>> BTW if you want to find O in UHD, grep for "\<O\>" (or ag "\bO\b"). >>>>>>> But you don't have to, I can tell you that you will end up in >>>>>>> radio_control_impl.cpp. >>>>>>> >>>>>>> There are several knobs for you to tune: >>>>>>> >>>>>>> - Are you starting your recv() call soon enough, or is the radio >>>>>>> streaming before you recv? >>>>>>> - Can you increase the buffer size that you pass into recv? In an >>>>>>> extreme case, you would pass a buffer that is big enough for all >>>>>>> num_samps, >>>>>>> and let UHD handle it. >>>>>>> >>>>>>> Also, what's your rate, your device, your transport... >>>>>>> >>>>>>> --M >>>>>>> >>>>>>> On Thu, Jul 31, 2025 at 10:17 AM Nikos Balkanas <nbalka...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Did some more testing. Tried to fill rx_streamer's buffers in >>>>>>>> purpose. >>>>>>>> .stream_mode = UHD_STREAM_MODE_NUM_SAMPS_AND_DONE >>>>>>>> streamer timeout set to 3". >>>>>>>> >>>>>>>> 1) .num_samples = 16384. Read 1024 each time in a loop sleeping 1" >>>>>>>> each turn. >>>>>>>> More than 16" to complete the read. No OO's. >>>>>>>> 2) .num_samps = 3e5. Read 1024 samples each time in a loop adding >>>>>>>> 1" to sleep >>>>>>>> in each turn (1, 2, 3, 4, ...). 11 hrs to complete the read. No >>>>>>>> OO's. >>>>>>>> >>>>>>>> Is overflow even working right? >>>>>>>> How large are the streamer's receive buffers? >>>>>>>> >>>>>>>> Nikos >>>>>>>> >>>>>>>> On Wed, Jul 30, 2025 at 3:04 PM Nikos Balkanas <nbalka...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I am getting a few overflow errors after sometime, from using my >>>>>>>>> code.. >>>>>>>>> First OOs in stdout and then metadata at which point it stalls. >>>>>>>>> I'm using .stream_mode = UHD_STREAM_MODE_NUM_SAMPS_AND_DONE, >>>>>>>>> Each time I read .num_samps in a loop until complete and then >>>>>>>>> restart the streamer. >>>>>>>>> I can't think of any case that I don't read all of the samples, so >>>>>>>>> this shouldn't happen. >>>>>>>>> What tools are there to debug this issue? >>>>>>>>> A function to monitor the rx_streamer internal buffers would be >>>>>>>>> very useful. >>>>>>>>> Even the filename that implements this overflow would be helpful. >>>>>>>>> Grepping "OO" in the sources doesn't help. Always hits in "BOOST":( >>>>>>>>> >>>>>>>>> TIA >>>>>>>>> Nikos >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>>>>> >>>>>> _______________________________________________ >>>>> USRP-users mailing list -- usrp-users@lists.ettus.com >>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >>>>> >>>> _______________________________________________ >> USRP-users mailing list -- usrp-users@lists.ettus.com >> To unsubscribe send an email to usrp-users-le...@lists.ettus.com >> >
_______________________________________________ USRP-users mailing list -- usrp-users@lists.ettus.com To unsubscribe send an email to usrp-users-le...@lists.ettus.com