Hi,

 

I'm trying to work out and optimise the maximum RX stream rate with a b210. 

 

If I run benchmark_rate --rx_rate X --rx_otw=sc16 --duration 30 on Windows,
I get timeouts if X is above about 18e6.

 

[00:00:05.661692300] Testing receive rate 20.000000 Msps on 1 channels

O[00:00:05.731709000] Timestamp after overrun recovery ahead of error
timestamp! Unable to calculate number of dropped samples.(Delta: -3748
ticks)

[00:00:05.953411900] Receiver error: ERROR_CODE_TIMEOUT, continuing...

 

System specification is:

 

Windows 10 Pro 64-bit Version 2004

18 core i9-7980XE @4Ghz, 64GB RAM, Samsung 970 SSD 

USB chipset: PCI 8086 Intel Corporation a2af 200 Series/Z370 Chipset Family
USB 3.0 xHCI Controller

Driver: Intel USB 3.0 eXtensible Host Controller 1.0 Microsoft

 

Benchmark prints out [INFO] [B200] Operating over USB 3, so should be using
USB 3.

B210 is connected directly to PC (without a hub in the way). Have also tried
a USB 3.1 xHCI controller, but that is no better.

I've tried UHD_4.0.0.0-release and UHD_3.15.0.0-0-gaea0e2de both with the
same performance.

 

Next question, is which libusb to use? The install page:
https://files.ettus.com/manual/page_install.html doesn't actually mention
where or what version to get. I initially installed MS64/libusb-1.0.dll
1.0.23.11397 from https://libusb.info/, but the MingGW64 version doesn't
appear to be any better. (1.0.22 and earlier doesn't appear to be
compatible)

 

I couldn't find anywhere in the docs that describes the values for --rx_spp,
but looking in the usrp lib source suggests its limited to 4096 for the b200
family. However, using that doesn't seem to improve the results.

 

In the mailing lists, I saw a few references to num_recv_frames, so gave
that a try with  --args "num_recv_frames=x". The behaviour varies with the
value chosen. If I use num_recv_frames=64, when running the benchmark, it
appears to pause for about 1 minute at:

 

[INFO] [B200] Initialize CODEC control...

 

Whereas usually it almost instantly moves on to the next step. 

 

If I set num_recv_frames=512 or 1024, then it doesn't pause, but there are
some strange warnings output:

 

[INFO] [B200] Asking for clock rate 16.000000 MHz...

[INFO] [B200] Actually got clock rate 16.000000 MHz.

[WARNING] [CORES] Timer loopback test failed!

[WARNING] [CORES] Expecting clock rate: 16 MHz

Approximate clock rate: 33.6429 MHz

 

[INFO] [B200] Asking for clock rate 20.000000 MHz...

[INFO] [B200] Actually got clock rate 20.000000 MHz.

[WARNING] [CORES] Timer loopback test failed!

[WARNING] [CORES] Expecting clock rate: 20 MHz

Approximate clock rate: 42.301 MHz

 

And it doesn't help improve performance (but it does complete the benchmark
at lower rates, even with those warnings). Any idea what might be happening?

 

Next, I thought I'd give Linux a try, by running Ubuntu 20 in a Virtual
Machine (VM Workstation 15) on the exact same PC with Windows as the host
OS. Ubuntu also had UHD 4.0.0 and libusb 1.0.23 installed.

 

Despite being in a VM, performance actually improved. It run at 28MSps
without any extra options, timing out at around 30MSps. 

 

Adding  num_recv_frames=64 did not cause the Timer loopback test failure.
Using num_recv_frames=1024 (Which appears to be the maximum) allows it to
run at 50MSps without timeouts!

 

So why might the Windows performance be less than half that of Linux (with
pretty much everything equal), and how can it be improved?

 

Thanks,

Jon

 

 

_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to