Hi Jason, I have the same under-run problem with my project. I use x310 as well. I don't have a solution. I'll appreciate it if anyone can figure out what is causing this.
Regards, Edwin Jason W Zheng via USRP-users <usrp-users@lists.ettus.com>于2017年8月14日周一 下午2:42写道: > 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> > *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> 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> on behalf of > Jason W Zheng via USRP-users <usrp-users@lists.ettus.com> > *Sent:* Monday, August 14, 2017 11:27:24 AM > *To:* ROBIN TORTORA > *Cc:* 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> > *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> 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> on behalf of > Jason W Zheng via USRP-users <usrp-users@lists.ettus.com> > *Sent:* Monday, August 7, 2017 1:05:05 PM > *To:* 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 > 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 > > _______________________________________________ > USRP-users mailing list > 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