I think some of the issue here as well is the tx_metadata.

 

For continuous streaming, the first packet ONLY should have startofburst = true…

 

Further packets after the first one should have startofburst = false, cuz they 
really are not start of burst, they are continuations of the initial burst.

 

Furthermore, for continuous streaming as soon as possible, you should not 
provide a timespec.

 

If you continually provide a timespec to each packet, it will continually try 
to send them at time = 0.1, which is not what you want…

 

If you want to start your tx at a specific time, then similar to startofburst, 
you should only provide a timespec with the first packet, all subsequent 
packets should not include a timespec.

 

Does that make sense?

 

It can be a bit confusing at first, but after writing a few apps, you will be 
an expert 😊

 

 

From: Jason W Zheng [mailto:jason.w.zh...@aero.org] 
Sent: Monday, August 14, 2017 4:41 PM
To: ROBIN TORTORA <ti...@comcast.net>; mle...@ripnet.com
Cc: usrp-users@lists.ettus.com
Subject: Re: [USRP-users] Buffer underrun issue with simultaneous transmit and 
receive on the X310

 

Hi Robin, Marcus

 

It makes no sense to me, then why changing transmit to be on its own channel 
(daughtercard) would cause the program to work. 

 

    // set up TX streams and threads

    std::thread tx_threads[NUM_CHANNELS];

    uhd::tx_streamer::sptr tx_streams[NUM_CHANNELS];

    uhd::tx_metadata_t md;

    md.start_of_burst = true;

    md.end_of_burst = false;

    md.has_time_spec = true;

    md.time_spec = uhd::time_spec_t(0.1); 

 

    for (int i = 0; i < NUM_CHANNELS; i++){

        stream_args.channels = std::vector<size_t>(1,i); //changing this from i 
to 1 causes it to work for unknown reasons

        tx_streams[i] = usrp->get_tx_stream(stream_args);

        //start the thread

        std::cout << "Starting tx thread " << i << std::endl;

        tx_threads[i] = std::thread(txTask,tx_buffs[i],tx_streams[i],md);

    }

 

The relevant line is commented in the above code snippet. When I change the 
channels arguments for the tx stream_args to be on it's own channel 
(daughterboard) separate from the receive, the underflows go away. 

 

 

@Marcus, in the code I posted, there is no coordination between the transmit 
and the receive threads. This is for example purposes. The transmit and receive 
buffers are independent. The transmit thread buffer is prefilled with 0's and 
is constantly transmitting 0's. 

 

  _____  

From: ROBIN TORTORA <ti...@comcast.net <mailto:ti...@comcast.net> >
Sent: Monday, August 14, 2017 1:06:20 PM
To: Jason W Zheng via USRP-users; Jason W Zheng
Subject: Re: [USRP-users] Buffer underrun issue with simultaneous transmit and 
receive on the X310 

 

Willing to bet significant money your tx thread is being put on the physical 
processor that does not have your NIC card attached to it...

 

Then, all data must go over QPI between processors.

 

NUMA is not good for this.

 

You can experiment with affinity to make sure things are all on the same 
physical processor as your NIC...

 

We no longer buy multi-processor boxes for issues like this, NUMA is bad...

 

On August 14, 2017 at 2:32 PM Jason W Zheng via USRP-users 
<usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> > wrote:

 

I'm running on a server with 2 Intel Xeon E5-2650 v4, CPU is listed here:

https://ark.intel.com/products/91767/Intel-Xeon-Processor-E5-2650-v4-30M-Cache-2_20-GHz

 

The network card I'm using is the recommended Intel X520-DA2

 

I also have over 500 gigs of ram, so that is not an issue

 

I don't think my cpu or network card are the issue as when I change my code to 
receive and transmit on separate channels, it works without any underflows. 

 

 

  _____  

From: USRP-users <usrp-users-boun...@lists.ettus.com 
<mailto:usrp-users-boun...@lists.ettus.com> > on behalf of Jason W Zheng via 
USRP-users <usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> >
Sent: Monday, August 14, 2017 11:27:24 AM
To: ROBIN TORTORA
Cc: usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> 
Subject: Re: [USRP-users] Buffer underrun issue with simultaneous transmit and 
receive on the X310 

 

How should I set the tx metadata? My application will essentially stream 
continuously. 

 

Thanks,

Jason


  _____  


From: ROBIN TORTORA <ti...@comcast.net <mailto:ti...@comcast.net> >
Sent: Monday, August 14, 2017 11:17:07 AM
To: Jason W Zheng via USRP-users; Jason W Zheng
Subject: Re: [USRP-users] Buffer underrun issue with simultaneous transmit and 
receive on the X310 

 

I dont see you setting the tx metadata object members to any values, so you are 
essentially going to tx with default metadata IF there is a constructor that 
initializes all the members to a consistent value...

On August 14, 2017 at 1:56 PM Jason W Zheng via USRP-users 
<usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> > wrote:

 

Since I haven't gotten a response in a week, I thought some source code might 
help. I've removed any buffer dependencies leaving just the receive thread and 
transmit thread. The receive thread is constant receiving to a buffer, while 
the transmit thread is constantly transmitting 0s from another buffer. 

 

On the x310, when I receive and transmit from the same channel (same 
daughterboard), I get underflows (U's on the console), no matter what the rate. 
When I put receive and transmit on separate channels, the U's go away. 

 

How do I fix my source code so I can receive and transmit from the same channel 
without underflows? 

 

Thanks,

Jason

 


  _____  


From: USRP-users <usrp-users-boun...@lists.ettus.com 
<mailto:usrp-users-boun...@lists.ettus.com> > on behalf of Jason W Zheng via 
USRP-users <usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> >
Sent: Monday, August 7, 2017 1:05:05 PM
To: usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com> 
Subject: [USRP-users] Buffer underrun issue with simultaneous transmit and 
receive on the X310 

 

 

Hi,

 

I'm building an application where I receive data from the x310, process the 
data, then transmit it out. I have 3 separate threads running, one for each 
task. The receive task is constantly receiving data from the x310 at 200MS/s 
and putting it into a buffer. The process task takes data from the receive 
buffer, processes it, and puts it into a transmit buffer. The transmit task is 
constantly transmitting data from the transmit buffer at 12.5 MS/s. 

 

I get constant underruns (U's on the console) when I try to receive and 
transmit from the same channel on the x310. However, when I transmit and 
receive on separate channels, underruns no longer occur. I would like to figure 
out a solution to this problem as I want to processes two 200MS/s streams on 1 
x310. 

 

This problem occurs no matter the sample rates. I've tried lowering the receive 
rate to 50MS/s (while transmitting 4x the data to balance things out) and there 
are still constant underruns though at a lower rate.  I know processing time is 
not the issue as I've profiled the time it takes to process, and I have even 
removed the processing task from the application altogether (receive data to a 
buffer and do nothing with the data; constantly transmit 0's from the transmit 
buffer) and the underruns still occur. 

 

I'm running on UHD 3.11.0, and the x310 is is configured with basic TX/RX 
daughterboards and flashed with the XG image for use over two 10 gig ethernet 
links. 

 

Thanks,

Jason

 

 


 

_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com <mailto:USRP-users@lists.ettus.com> 
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com


 

_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com <mailto:USRP-users@lists.ettus.com> 
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to