Hi,

I have been trying to get 25 MHz to disk with USRP2.  I am using the
C++ interface and a five disk software raid 0 that can do about 150
MB/s. I can easily run at 25 MHz with a simple nop_handler that only
checks for underruns and timestamps continuity, but when I write to
disk, I can barely do 10 MHz for longer than 30 s without overruns. I
have tried just about every filesystem with the same result every
time.

The reason seems to be lack of buffering. I have gone with the easiest
path of increasing the eth_buffer from approximately 25 MB to 500 MB.
I know people will flame me for using this much kernel memory, but it
seems to work fairly reliably (I have been saving 25 MHz to a five
disk software raid already for an hour without problems).

I think there should be a user configurable option similar to
fusb_blocksize and fusb_nblocks with usrp1, which defines the
eth_buffer size. I am willing write a patch if somebody is interested,
but I don't fully understand why there is a MAX_SLAB_SIZE in
eth_buffer.cc:

 // Calculate number of blocks
    req.tp_block_nr = std::min((int)(MAX_SLAB_SIZE/sizeof(void*)),
                               (int)(d_buflen/req.tp_block_size));

Why is there a (int)(MAX_SLAB_SIZE/sizeof(void*)) limit?

juha


_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to