History

rxrpc: Move DATA transmission into call processor work item

Move DATA transmission into the call processor work item. In a future patch, this will be called from the I/O thread rather than being itsown work item. This will allow DATA transmission to be driven directly by incoming ACKs, pokes and timers as those are processed. The Tx queue is also split: The queue of packets prepared by sendmsg is now places in call->tx_sendmsg and the packet dispatcher decants the packets into call->tx_buffer as space becomes available in the transmission window. This allows sendmsg to run ahead of the available space to try and prevent an underflow in transmission.

David Howells committed 4 years ago

Commit cf37b591 parent f3441d47 files · +161 −80Browse files

Showing the changes to include/trace (1 of 7 files). Show all

Unified · Split

include/trace/events/rxrpc.h+5−1
@@ -183,6 +183,7 @@ · 182 unmodified lines
183183 EM(rxrpc_call_queue_requeue, "QUE requeue ") \
184184 EM(rxrpc_call_queue_resend, "QUE resend ") \
185185 EM(rxrpc_call_queue_timer, "QUE timer ") \
186+ EM(rxrpc_call_queue_tx_data, "QUE tx-data ") \
186187 EM(rxrpc_call_see_accept, "SEE accept ") \
187188 EM(rxrpc_call_see_activate_client, "SEE act-clnt") \
188189 EM(rxrpc_call_see_connect_failed, "SEE con-fail") \
@@ -738,6 +739,7 @@ TRACE_EVENT(rxrpc_txqueue, · 549 unmodified lines
738739 __field(rxrpc_seq_t, acks_hard_ack )
739740 __field(rxrpc_seq_t, tx_bottom )
740741 __field(rxrpc_seq_t, tx_top )
742+ __field(rxrpc_seq_t, tx_prepared )
741743 __field(int, tx_winsize )
742744 ),
743745
@@ -747,16 +749,18 @@ TRACE_EVENT(rxrpc_txqueue, · 3 unmodified lines
747749 __entry->acks_hard_ack = call->acks_hard_ack;
748750 __entry->tx_bottom = call->tx_bottom;
749751 __entry->tx_top = call->tx_top;
752+ __entry->tx_prepared = call->tx_prepared;
750753 __entry->tx_winsize = call->tx_winsize;
751754 ),
752755
753− TP_printk("c=%08x %s f=%08x h=%08x n=%u/%u/%u",
756+ TP_printk("c=%08x %s f=%08x h=%08x n=%u/%u/%u/%u",
754757 __entry->call,
755758 __print_symbolic(__entry->why, rxrpc_txqueue_traces),
756759 __entry->tx_bottom,
757760 __entry->acks_hard_ack,
758761 __entry->tx_top - __entry->tx_bottom,
759762 __entry->tx_top - __entry->acks_hard_ack,
763+ __entry->tx_prepared - __entry->tx_bottom,
760764 __entry->tx_winsize)
761765 );
762766