I was running Hydra MIMO testbench on
USRP and got stream of this message:
usrp_source: overrun
drop 16384 bytes
Does anyone know what it means by overrun?
Thanks,
Thomas
From:
Josh Blum <address@hidden>
To:
Patrik Eliardsson <address@hidden>
Cc:
"address@hidden"
<address@hidden>
Date:
12/16/2010 12:29 PM
Subject:
Re: [Discuss-gnuradio]
Expected behavior during underruns
Sent by:
address@hidden
> Yes, I timestamp every packet sent by the send-function but my
> observation shows that the underrun realignment is not automatic.
I
> also think that the underrun recovery works for packets, but it
> doesn't work for fragments of packets.
>
Correct. Its at the packet level (thats UDP packet level 360~ish samples).
> Consider the case when you have a packet P1 with timestamp 3.0 and
> the number of samples are equal to 1 second in transmission duration.
> P1 is then fragmented into several fragments by the UHD, call them
> f1,f2,f3,f4,f5. The timestamp and start_of_burst is set at f1 in P1
> correct? And the remaining fragments doesn't get any timestamp and
> are set to be transmitted immediate, correct? The f1 will block the
> rest of the fragments until the usrp2 time is equal to the timestamp
> of f1 and then all of the fragments will be transmitted in a sequence
> if we do not get an underrun (1).
>
> If we instead get an underrun after that the first fragment is moved
> to the usrp2 either nothing or a CW will be transmitted for a while
> between f1 and f2 which will introduce an unknown and unwanted offset
> (2). To eliminate this offset the host can drop f2 and timestamp all
> of the fragments so that the fragments in the end of the transmission
> happen at the expected time (3).
>
> f1,f2,f3,f4,f5
(1) expected sequence f1,U ,f2,f3,f4,f5
(2) with
> underrun f1,U ,f3,f4,f5
(3) with underrun and dropping
>
> As we are talking about the fragments of a packet now, this must be
> handled in vrt_packet_handler.hpp and/or io_impl.cpp.
>
I think you will find that hardware recovery is going to be faster then
anything you you manipulate in software.
I think the problem is that you are sending very large bursts with only
the first packet having a time stamp. Can you try your own fragmentation
into smaller sub-packets, each sub-packet with a timestamp?
tx_timed_samples.cpp has an example of fragmenting a buffer into smaller
packets.