As a heads up, I was able to get everything working using only GNURadio
Companion.  I tied the USRP Source into a Stream-to-Vector block and
created a 20 MS buffer.  From there I sent the 20 MS vector to the File
Meta Sink.

This adds some latency, but for my application this is perfectly OK.  I
have tested this running for about half an hour or so without a single
dropout (this is about all the data I would want to sample at any given
time).

Also, it should be noted that the following did not work:
1.  Using only the driver.  uhd_rx_cfile created the overflows at the exact
same rate as my GNURadio application.
2.  Giving my GNURadio application real-time priority.  When I say real
time, I'm using a priority of 99 with SCHED_FIFO in Linux.  It should also
be noted that the driver spawns an niDriverThread process that runs with
standard user-level priority.

I will post any updates if the problem comes back for whatever reason.  But
for now, buffering via the Stream-to-Vector block seems to have fixed the
issue.

On Sun, Sep 7, 2014 at 7:54 PM, Marcus D. Leech <mle...@ripnet.com> wrote:

>  On 09/07/2014 07:08 PM, Peter Witkowski wrote:
>
>  Not sure I follow.  If I have a large enough buffer, the data coming in
> and the data coming out should be free of concurrency issues and should be
> able to work just fine. That is, as long as the producer thread can keep
> adding data to the message queue, I should be OK.  If it gets locked out
> due to concurrency issues, I can see that this is where there could be
> issues (e.g., I drop packets because the producer thread can't push data
> since it's locked out of the message queue).  Also, a large enough buffer
> could also alleviate the issue all together since I would be able to record
> for hours before the overflow would take place.
>
>  My sample rates are on the order of 400 MB/s (well within PCIe x4 spec).
> Also, my RAID array has been benchmarked to handle roughly 800 MB/s.  The
> flow-graph is nothing more than a USRP source tied into a File Meta Sink.
>
>   Certainly, if you could somehow put together *hours* of buffering at
> 400MB/sec, you'd be in good shape, provided you don't exceed that buffer.
>   But, well, at 400MB per second, 10 seconds is 4GB, 100 seconds is 400GB,
> etc.  Pretty soon you run out of DRAM.
>
> So, at 100Msps, you'll have a hard time on most systems.   Try just
> writing with rx_samples_to_file (a UHD-only example that comes with
>   UHD), which avoids Gnu Radio overheads entirely.  But really, recording
> at 100Msps (400MB/sec in your example) is challenging, even if
>   you don't do much with the samples.  Gnu Radio adds some overhead that
> you probably don't need just to record samples.
>
>
>
>
> On Sun, Sep 7, 2014 at 4:35 PM, Marcus D. Leech <mle...@ripnet.com> wrote:
>
>>   On 09/07/2014 04:24 PM, Peter Witkowski wrote:
>>
>>   Hello,
>>
>> I have a simple application written in Python using GNURadio.  All I am
>> trying to accomplish is to have the USRP data be written to disk.  The
>> application works fine when I dump data to /dev/null or run it at reduced
>> sampling rates.  However, when I run at my desired sampling rate, I have a
>> good amount of buffer overflows (a series of "O" characters get printed).
>>
>>  The host machine that I am working on should have no problems sampling
>> at the higher rates, but I have found a curious issue in that not a whole
>> lot of memory is used up by my GNURadio application.
>>
>> As a result, I am wondering if there is any way to tell GNURadio to use
>> larger buffers (on the order of a few GB) in order to prevent data from
>> being dropped.  I noted that there seem to be several function calls
>> available in the C++ API, but there seems to be a limited set of these
>> calls in the Python wrappers.  Latency is a non-issue for me at the moment,
>> but I need to capture all the data without dropping a large amount of
>> data.  Note that I have the code running with "real-time" priorities in
>> Linux.
>>
>>  Thanks for your help.  FYI I am running GNURadio on Ubuntu 14.04.
>> Also, I know that my RAID set-up is capable of writing to disk at twice the
>> rate of data coming in per benchmarking the HDDs.
>>
>>  --
>> Peter Witkowski
>> pwitkow...@gmail.com
>>
>>
>> _______________________________________________
>> Discuss-gnuradio mailing 
>> listDiscuss-gnuradio@gnu.orghttps://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>
>>  Adding buffering for long-term recording simply delays, by a few
>> seconds, that point at which your system cannot keep up.
>>
>>
>> What sample rates are you trying to record?  What does your flow-graph
>> look like?
>>
>> Buffering is useful to allow you to "ride through" short-term shortfalls
>> in the ability to handle samples.   It is useless for handling the situation
>>  where your long-term ability to keep up falls short of what you actually
>> need.
>>
>> Have you tried setting up a ramdisk, and writing to that?
>>
>>
>> --
>> Marcus Leech
>> Principal Investigator
>> Shirleys Bay Radio Astronomy Consortiumhttp://www.sbrac.org
>>
>>
> --
> Peter Witkowski
> pwitkow...@gmail.com
>
>
> _______________________________________________
> Discuss-gnuradio mailing 
> listDiscuss-gnuradio@gnu.orghttps://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
>
> --
> Marcus Leech
> Principal Investigator
> Shirleys Bay Radio Astronomy Consortiumhttp://www.sbrac.org
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>


-- 
Peter Witkowski
pwitkow...@gmail.com
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to