diff options
| author | Josh Blum <josh@joshknows.com> | 2010-08-10 23:29:22 -0700 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-08-10 23:29:22 -0700 | 
| commit | 293ccdccd1e111942e9cc48ab87690da5202e406 (patch) | |
| tree | 4e861ca41fabc1e2664b7d0807242ab9c61544fd /host/lib/transport/udp_zero_copy_asio.cpp | |
| parent | 1301d665d621358ec6eccb41a020a4689cb0b566 (diff) | |
| parent | 9e419c7b7f35062ceb2ed4e508cadb163067593f (diff) | |
| download | uhd-293ccdccd1e111942e9cc48ab87690da5202e406.tar.gz uhd-293ccdccd1e111942e9cc48ab87690da5202e406.tar.bz2 uhd-293ccdccd1e111942e9cc48ab87690da5202e406.zip  | |
usrp-e: merged master, does not build
Diffstat (limited to 'host/lib/transport/udp_zero_copy_asio.cpp')
| -rw-r--r-- | host/lib/transport/udp_zero_copy_asio.cpp | 26 | 
1 files changed, 17 insertions, 9 deletions
diff --git a/host/lib/transport/udp_zero_copy_asio.cpp b/host/lib/transport/udp_zero_copy_asio.cpp index bfbcf62d8..ee989ee2b 100644 --- a/host/lib/transport/udp_zero_copy_asio.cpp +++ b/host/lib/transport/udp_zero_copy_asio.cpp @@ -18,6 +18,7 @@  #include <uhd/transport/udp_zero_copy.hpp>  #include <uhd/transport/udp_simple.hpp> //mtu  #include <uhd/utils/assert.hpp> +#include <uhd/utils/warning.hpp>  #include <boost/cstdint.hpp>  #include <boost/asio.hpp>  #include <boost/format.hpp> @@ -29,7 +30,11 @@ using namespace uhd::transport;   * Constants   **********************************************************************/  //enough buffering for half a second of samples at full rate on usrp2 -static const size_t MIN_SOCK_BUFF_SIZE = size_t(sizeof(boost::uint32_t) * 25e6 * 0.5); +static const size_t MIN_RECV_SOCK_BUFF_SIZE = size_t(sizeof(boost::uint32_t) * 25e6 * 0.5); +//Large buffers cause more underflow at high rates. +//Perhaps this is due to the kernel scheduling, +//but may change with host-based flow control. +static const size_t MIN_SEND_SOCK_BUFF_SIZE = size_t(10e3);  static const double RECV_TIMEOUT = 0.1; //100 ms  /*********************************************************************** @@ -143,6 +148,10 @@ template<typename Opt> static void resize_buff_helper(      size_t target_size,      const std::string &name  ){ +    size_t min_sock_buff_size = 0; +    if (name == "recv") min_sock_buff_size = MIN_RECV_SOCK_BUFF_SIZE; +    if (name == "send") min_sock_buff_size = MIN_SEND_SOCK_BUFF_SIZE; +      //resize the buffer if size was provided      if (target_size > 0){          size_t actual_size = udp_trans->resize_buff<Opt>(target_size); @@ -153,19 +162,18 @@ template<typename Opt> static void resize_buff_helper(          else std::cout << boost::format(              "Current %s sock buff size: %d bytes"          ) % name % actual_size << std::endl; -        if (actual_size < target_size) std::cerr << boost::format( -            "Warning:\n" -            "    The %s buffer is smaller than the requested size.\n" -            "    The minimum recommended buffer size is %d bytes.\n" -            "    See the USRP2 application notes on buffer resizing.\n" -        ) % name % MIN_SOCK_BUFF_SIZE << std::endl; +        if (actual_size < target_size) uhd::print_warning(str(boost::format( +            "The %s buffer is smaller than the requested size.\n" +            "The minimum recommended buffer size is %d bytes.\n" +            "See the USRP2 application notes on buffer resizing.\n" +        ) % name % min_sock_buff_size));      }      //only enable on platforms that are happy with the large buffer resize      #if defined(UHD_PLATFORM_LINUX) || defined(UHD_PLATFORM_WIN32)      //otherwise, ensure that the buffer is at least the minimum size -    else if (udp_trans->get_buff_size<Opt>() < MIN_SOCK_BUFF_SIZE){ -        resize_buff_helper<Opt>(udp_trans, MIN_SOCK_BUFF_SIZE, name); +    else if (udp_trans->get_buff_size<Opt>() < min_sock_buff_size){ +        resize_buff_helper<Opt>(udp_trans, min_sock_buff_size, name);      }      #endif /*defined(UHD_PLATFORM_LINUX) || defined(UHD_PLATFORM_WIN32)*/  }  | 
