aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/rfnoc/graph_impl.cpp
diff options
context:
space:
mode:
authorMichael West <michael.west@ettus.com>2019-02-13 16:29:18 -0800
committermichael-west <michael.west@ettus.com>2019-02-18 11:25:15 -0800
commitf9f7b34d546a79bec55cf9d0e48ef3876f0f67d7 (patch)
tree72dc0e92160ef9d7a3e49177a66f4fff0f2eb214 /host/lib/rfnoc/graph_impl.cpp
parent8b404ade3eb376ef0619a039396823f7e2e462e0 (diff)
downloaduhd-f9f7b34d546a79bec55cf9d0e48ef3876f0f67d7.tar.gz
uhd-f9f7b34d546a79bec55cf9d0e48ef3876f0f67d7.tar.bz2
uhd-f9f7b34d546a79bec55cf9d0e48ef3876f0f67d7.zip
RFNoC: Disable FC ACK packets for lossless links
FC ACK packets are unnecessary on lossless links and degrade overall performance. This change disables those packets on all lossless links. Signed-off-by: Michael West <michael.west@ettus.com>
Diffstat (limited to 'host/lib/rfnoc/graph_impl.cpp')
-rw-r--r--host/lib/rfnoc/graph_impl.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/host/lib/rfnoc/graph_impl.cpp b/host/lib/rfnoc/graph_impl.cpp
index 989bcb0c4..326e9205d 100644
--- a/host/lib/rfnoc/graph_impl.cpp
+++ b/host/lib/rfnoc/graph_impl.cpp
@@ -120,17 +120,17 @@ void graph_impl::connect(const block_id_t& src_block,
% dst->get_block_id().get() % (dst->get_fifo_size(dst_block_port) / 1024)
% (pkt_size / 1024) % src->get_block_id().get()));
}
+ const bool same_xbar = sid.get_src_addr() == sid.get_dst_addr();
src->configure_flow_control_out(true, /* enable output */
+ same_xbar, // Lossless link if on same crossbar
buf_size_bytes,
0, /* no packet limit. We need to revisit this at some point. */
src_block_port);
// On the same crossbar, use lots of FC packets
- size_t bytes_per_response =
- buf_size_bytes / uhd::rfnoc::DEFAULT_FC_XBAR_RESPONSE_FREQ;
// Over the network, use less or we'd flood the transport
- if (sid.get_src_addr() != sid.get_dst_addr()) {
- bytes_per_response = buf_size_bytes / uhd::rfnoc::DEFAULT_FC_TX_RESPONSE_FREQ;
- }
+ const size_t bytes_per_response =
+ same_xbar ? buf_size_bytes / uhd::rfnoc::DEFAULT_FC_XBAR_RESPONSE_FREQ
+ : buf_size_bytes / uhd::rfnoc::DEFAULT_FC_TX_RESPONSE_FREQ;
UHD_ASSERT_THROW(bytes_per_response != 0);
dst->configure_flow_control_in(bytes_per_response, dst_block_port);
@@ -189,7 +189,12 @@ void graph_impl::connect_src(const block_id_t& src_block,
% (buf_size_dst_bytes / 1024) % (pkt_size / 1024)
% src->get_block_id().get()));
}
- src->configure_flow_control_out(buf_size_pkts, src_block_port);
+
+ src->configure_flow_control_out(true, /* enable output */
+ (dst_sid.get_src_addr() == dst_sid.get_dst_addr()),
+ buf_size_dst_bytes,
+ 0, /* no packet limit. We need to revisit this at some point. */
+ src_block_port);
}
void graph_impl::connect_sink(