Skip to content

Commit a0c67b4

Browse files
saukaPavel Harbanau
authored andcommitted
ofh,ethernet: reduce sleeping time in socket-based receiver, adjust pool size
1 parent a86d394 commit a0c67b4

File tree

4 files changed

+8
-11
lines changed

4 files changed

+8
-11
lines changed

lib/ofh/ethernet/dpdk/dpdk_ethernet_transmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ void dpdk_transmitter_impl::send(span<span<const uint8_t>> frames)
2121
// Receiving a frame burst larger than MAX_BURST_SIZE requires making several Tx bursts.
2222
for (unsigned offset = 0; offset < frames.size();) {
2323
auto frame_burst = frames.subspan(offset, std::min<unsigned>(MAX_BURST_SIZE, frames.size() - offset));
24-
offset += frames.size();
24+
offset += frame_burst.size();
2525

2626
static_vector<::rte_mbuf*, MAX_BURST_SIZE> mbufs(frame_burst.size());
2727
if (::rte_pktmbuf_alloc_bulk(port_ctx->get_mempool(), mbufs.data(), frame_burst.size()) < 0) {

lib/ofh/ethernet/ethernet_receiver_impl.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,28 +134,25 @@ void receiver_impl::receive_loop()
134134
}
135135

136136
/// Blocking function that waits for incoming data over the socket or until the specified timeout expires.
137-
static bool wait_for_data(int socket, std::chrono::seconds timeout)
137+
static bool wait_for_data(int socket, std::chrono::microseconds timeout)
138138
{
139139
fd_set read_fs;
140140
FD_ZERO(&read_fs);
141141
FD_SET(socket, &read_fs);
142-
timeval tv = {static_cast<time_t>(timeout.count()), 0};
142+
timeval tv = {0, static_cast<__suseconds_t>(timeout.count())};
143143

144144
return (::select(socket + 1, &read_fs, nullptr, nullptr, &tv) > 0);
145145
}
146146

147147
void receiver_impl::receive()
148148
{
149-
ofh_tracer << instant_trace_event("ofh_receiver_wait_data", instant_trace_event::cpu_scope::thread);
150-
151-
if (!wait_for_data(socket_fd, std::chrono::seconds(1))) {
149+
if (!wait_for_data(socket_fd, std::chrono::microseconds(5))) {
152150
return;
153151
}
154152

155153
trace_point tp = ofh_tracer.now();
156154

157155
auto exp_buffer = buffer_pool.reserve();
158-
159156
if (exp_buffer.is_error()) {
160157
logger.warning("No buffer is available for receiving an Ethernet packet");
161158
return;

lib/ofh/ethernet/ethernet_rx_buffer_pool.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ namespace ether {
2525
/// Pool of buffers accessed by a socket-based Ethernet receiver.
2626
class ethernet_rx_buffer_pool
2727
{
28-
/// Allocate 2MB of storage, evenly divided between Ethernet receive buffers.
29-
static inline constexpr units::bytes ETH_BUFFER_POOL_SIZE{2048000};
28+
/// Allocate 4MB of storage, evenly divided between Ethernet receive buffers.
29+
static inline constexpr units::bytes ETH_BUFFER_POOL_SIZE{4096000};
3030

3131
using rx_buffer_id_list =
3232
concurrent_queue<unsigned, concurrent_queue_policy::lockfree_spsc, concurrent_queue_wait_policy::non_blocking>;

lib/ofh/transmitter/ofh_message_transmitter_impl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ void message_transmitter_impl::on_new_symbol(slot_symbol_point symbol_point)
8888
enqueue_messages_into_burst(interval_up, frame_burst);
8989

9090
// Transmit the data.
91-
trace_point tp_dpdk = ofh_tracer.now();
91+
trace_point tp_ether = ofh_tracer.now();
9292
transmit_frame_burst(frame_burst);
93-
ofh_tracer << trace_event("ofh_dpdk_tx", tp_dpdk);
93+
ofh_tracer << trace_event("ofh_ether_tx", tp_ether);
9494

9595
// Clear sent buffers.
9696
pool->clear_sent_frame_buffers(interval_cp_dl);

0 commit comments

Comments
 (0)