aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authormichael-west <michael.west@ettus.com>2017-08-28 16:04:59 -0700
committerMartin Braun <martin.braun@ettus.com>2018-07-25 15:34:03 -0700
commit651807d116a4a5e12fc8d976e8fdac98b0b2fc11 (patch)
tree34a19d27ada947d8ea2e9f8a768ca2ffad9c7f80 /host/lib
parent988515ab19a715773086a7a8c023ddb8249c7e37 (diff)
downloaduhd-651807d116a4a5e12fc8d976e8fdac98b0b2fc11.tar.gz
uhd-651807d116a4a5e12fc8d976e8fdac98b0b2fc11.tar.bz2
uhd-651807d116a4a5e12fc8d976e8fdac98b0b2fc11.zip
X300: Reduce Ethernet frame size to 4000
This is to avoid underruns caused by flow control packets being blocked by data packets at high rates.
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/usrp/x300/x300_impl.cpp6
-rw-r--r--host/lib/usrp/x300/x300_impl.hpp5
2 files changed, 5 insertions, 6 deletions
diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp
index 351cb4e10..60be75f2b 100644
--- a/host/lib/usrp/x300/x300_impl.cpp
+++ b/host/lib/usrp/x300/x300_impl.cpp
@@ -705,7 +705,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
}
_tree->create<size_t>(mb_path / "mtu/recv").set(_max_frame_sizes.recv_frame_size);
- _tree->create<size_t>(mb_path / "mtu/send").set(std::min(_max_frame_sizes.send_frame_size, X300_ETH_DATA_FRAME_MAX_TX_SIZE));
+ _tree->create<size_t>(mb_path / "mtu/send").set(_max_frame_sizes.send_frame_size);
_tree->create<double>(mb_path / "link_max_rate").set(X300_MAX_RATE_10GIGE);
}
@@ -1313,7 +1313,7 @@ uhd::both_xports_t x300_impl::make_transport(
<< boost::format("For this connection, UHD recommends a send frame size of at least %lu for best\nperformance, but your system's MTU will only allow %lu.")
% eth_data_rec_frame_size
% _max_frame_sizes.send_frame_size
- << "This will negatively impact your maximum achievable sample rate."
+ << "This may negatively impact your maximum achievable sample rate."
;
}
@@ -1322,7 +1322,7 @@ uhd::both_xports_t x300_impl::make_transport(
<< boost::format("For this connection, UHD recommends a receive frame size of at least %lu for best\nperformance, but your system's MTU will only allow %lu.")
% eth_data_rec_frame_size
% _max_frame_sizes.recv_frame_size
- << "This will negatively impact your maximum achievable sample rate."
+ << "This may negatively impact your maximum achievable sample rate."
;
}
diff --git a/host/lib/usrp/x300/x300_impl.hpp b/host/lib/usrp/x300/x300_impl.hpp
index 35bd8ce8f..e67242aa3 100644
--- a/host/lib/usrp/x300/x300_impl.hpp
+++ b/host/lib/usrp/x300/x300_impl.hpp
@@ -57,11 +57,10 @@ static const size_t X300_PCIE_MAX_CHANNELS = 6;
static const size_t X300_PCIE_MAX_MUXED_CTRL_XPORTS = 32;
static const size_t X300_PCIE_MAX_MUXED_ASYNC_XPORTS = 4;
-static const size_t X300_10GE_DATA_FRAME_MAX_SIZE = 8000; // CHDR packet size in bytes
+//Reduced to 4000 to make sure flow control packets are not blocked for too long at high rates
+static const size_t X300_10GE_DATA_FRAME_MAX_SIZE = 4000; // CHDR packet size in bytes
static const size_t X300_1GE_DATA_FRAME_MAX_SIZE = 1472; // CHDR packet size in bytes
static const size_t X300_ETH_MSG_FRAME_SIZE = uhd::transport::udp_simple::mtu; //bytes
-// MTU throttling for ethernet/TX (see above):
-static const size_t X300_ETH_DATA_FRAME_MAX_TX_SIZE = 8000;
static const double X300_THREAD_BUFFER_TIMEOUT = 0.1; // Time in seconds