Re: USRP B210 Dual-Channel 30.72 Msps: Underflows in GRC, but benchmark_rate works fine

Marcus Müller <[email protected]> Fri, 24 Apr 2026 23:27:52 +0200
Newsgroups gmane.comp.gnu.radio.general
Message-ID <[email protected]>
Dear Yunxi Chen,

UHD's benchmark rate doesn't try to read data from a file, copy it through buffers and put 
it on the line; it's really a lower CPU load problem than what you showed here. Still, 
what you want typically works.

You would want to make sure you have enabled "realtime scheduling" in the "Options" 
(pseudo-)Block in GRC.

Other than that, hah! I didn't realize that /dev/shm is still a thing :) nowadays, it's 
just a regular tmpfs mount, so make sure your two files actually fit fully in your RAM, 
and you're not "Swapping" RAM to disk. 2 files of 10 ms of 30.72 MSam/s with each sample 
being 8 B, that's 2 · 10·10⁻³ s · 30.72·10⁶ Sam/s · 8 B/Sam = 4915200 B = 4.7 MB, so 
that's probably not the problem, unless you have much other things in RAM. Check with 
`free -m` how many megabytes are currently "used" in "Swap".

Best regards,
Marcus

On 2026-04-24 4:33 PM, Yunxi Chen wrote:
> Hi,
> 
> I am working on a 5G PRS localization project and encountering persistent Underflow issues 
> when attempting to transmit at 30.72 Msps using both channels on a USRP B210.
> 
> *The Setup:*
> 
>   * *Hardware:*USRP B210 connected via USB 3.0.
>   * *Host PC:*Dell G15 Laptop (13th Gen Intel(R) Core(TM) i7-13650HX (20 cores), 64 GB RAM).
>   * *OS:*Ubuntu 22.04.
>   * *Software:*GNU Radio 3.10.7.0, UHD 4.1.0.5.
> 
> *The Experiment:*I am transmitting a 5G PRS signal (mu=1, 30kHz SCS) with a slot-level TDM 
> pattern (alternating between Ant A and Ant B). The frames are pre-calculated and zero- 
> padded to exactly 307,200 samples (10ms @ 30.72 MHz) to ensure perfect timing alignment.
> 
> *The Flowgraph:*
> 
> *The Problem:*Despite these optimizations, I get immediate and constant Underflows. 
> However, when I run the official UHD benchmark tool: |benchmark_rate --args="type=b200" -- 
> channels="0,1" --tx_rate 30.72e6 | It completes successfully without a single dropped packet.
> 
> *My Questions:*Since |benchmark_rate| works, it seems the hardware/USB controller is 
> physically capable of this rate. Why does the GNU Radio flowgraph fail even with a simple 
> File Source -> USRP Sink architecture? Are there specific buffer or scheduler tunings in 
> GRC that I am missing to handle 2x2 MIMO at the 30.72 Msps limit?
> 
> Any advice or insights would be greatly appreciated.
> 
> Best regards,
> 
> Yunxi Chen
>