On 2021-09-10 6:05 p.m., zhou wrote:
Hi Marcus, thanks for your reply.
No, I am not on MacOS. I am using Ubuntu. How can I configure send buff size in Linux? I went through the uhd library but could not see it had any limit on buffer size. So, very strange where the buffer limit comes from.

How do I measure the buffer?
I created a packet of 245760 bytes, and I set metadata.has_time_spec  = true, and configure metadata.time_spec to a future time, then I sent the packets. Before metadata.time_spec, the sent packets would be stored in the buffer. When send() was blocked, it meant the buffer was full. I counted; after 4 packets, send got blocked. Only after time passed metadata.time_spec, the packets in buffer were consumed, I could send another packet.
I'm not sure how much TX buffer space the N321 has in the FPGA, but it sounds like that's what you're running into.  I would expect it   to be very very much smaller than the amount of buffer available on the host.  I don't think UHD will "hold on" to packets on the host   side if it isn't quite time for them to be sent.  It sends them to the device, and if there isn't room on the device (because of
  timed send), then it must necessarily ask the host to hold on to them.

It pretty-much HAS to work this way, since the host side has very little control over latency, it has no way of really knowing   when it is safe to "release" timed TX packets to the actual hardware, so it sends them to the hardware immediately.

One of the devs might be able to clarify, but that's my understanding.



On Friday, 10 September 2021, 19:53:29 BST, Marcus D. Leech <patchvonbr...@gmail.com> wrote:


On 2021-09-10 2:39 p.m., zhou wrote:
Hi,

I am trying to increase the buffer size in tx.

According to https://files.ettus.com/manual/page_transport.html <https://files.ettus.com/manual/page_transport.html>,

 it seems that we can change the default *send_buff_size *by specifying value in device arguments. I tried the following configuration: uhd::usrp::multi_usrp::make('addr=192.168.12.2, second_addr=192.168.13.2, mgmt_addr=192.168.10.16, master_clock_rate=245.76e6, type=n3xx, *send_buff_size*=33554432')

But this didn't have any impact. I measured that the actual buffer is always about ~1MB.
How did you measure the buffer?



Then in UHD library, I find the following limit:
static const size_t MAX_BUFF_SIZE_ETH_MACOS = 0x100000; // 1Mib

    if (link_params.send_buff_size > MAX_BUFF_SIZE_ETH_MACOS) {
        link_params.send_buff_size = MAX_BUFF_SIZE_ETH_MACOS;
    }

Are you on MacOS?   If not, that code isn't relevant. That code doesn't even get compiled unless you're
  on MacOS.


33554432 > 1048576 (1Mib), so this may be why the above config didn't work. Then I tried the following configuration:
uhd::usrp::multi_usrp::make('addr=192.168.12.2,second_addr=192.168.13.2,mgmt_addr=192.168.10.16,master_clock_rate=245.76e6,type=n3xx,*send_buff_size*=524288')

This one didn't have any impact either.
So, am I wrong in configuring *send_buff_size *in this way? what is the correct way?

1M buffer size is too small for my application. I am using sampling rate 245.76MHz. This buffer can only save data up to 0.5ms. I want to allocate a bigger buffer to achieve better reliability.

Thanks for any comment.





_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> To unsubscribe send an email to usrp-users-le...@lists.ettus.com <mailto: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

Reply via email to