mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
rxrpc: Generate rtt_min
Generate rtt_min as this is required by RACK-TLP. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org Link: https://patch.msgid.link/20241204074710.990092-27-dhowells@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
7903d4438b
commit
c637bd0668
@ -97,3 +97,4 @@ u32 minmax_running_min(struct minmax *m, u32 win, u32 t, u32 meas)
|
|||||||
|
|
||||||
return minmax_subwin_update(m, win, &val);
|
return minmax_subwin_update(m, win, &val);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(minmax_running_min);
|
||||||
|
@ -371,6 +371,8 @@ struct rxrpc_peer {
|
|||||||
spinlock_t rtt_input_lock; /* RTT lock for input routine */
|
spinlock_t rtt_input_lock; /* RTT lock for input routine */
|
||||||
ktime_t rtt_last_req; /* Time of last RTT request */
|
ktime_t rtt_last_req; /* Time of last RTT request */
|
||||||
unsigned int rtt_count; /* Number of samples we've got */
|
unsigned int rtt_count; /* Number of samples we've got */
|
||||||
|
unsigned int rtt_taken; /* Number of samples taken (wrapping) */
|
||||||
|
struct minmax min_rtt; /* Estimated minimum RTT */
|
||||||
|
|
||||||
u32 srtt_us; /* smoothed round trip time << 3 in usecs */
|
u32 srtt_us; /* smoothed round trip time << 3 in usecs */
|
||||||
u32 mdev_us; /* medium deviation */
|
u32 mdev_us; /* medium deviation */
|
||||||
|
@ -127,16 +127,27 @@ static void rxrpc_set_rto(struct rxrpc_peer *peer)
|
|||||||
peer->rto_us = rxrpc_bound_rto(rto);
|
peer->rto_us = rxrpc_bound_rto(rto);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rxrpc_ack_update_rtt(struct rxrpc_peer *peer, long rtt_us)
|
static void rxrpc_update_rtt_min(struct rxrpc_peer *peer, ktime_t resp_time, long rtt_us)
|
||||||
|
{
|
||||||
|
/* Window size 5mins in approx usec (ipv4.sysctl_tcp_min_rtt_wlen) */
|
||||||
|
u32 wlen_us = 5ULL * NSEC_PER_SEC / 1024;
|
||||||
|
|
||||||
|
minmax_running_min(&peer->min_rtt, wlen_us, resp_time / 1024,
|
||||||
|
(u32)rtt_us ? : jiffies_to_usecs(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rxrpc_ack_update_rtt(struct rxrpc_peer *peer, ktime_t resp_time, long rtt_us)
|
||||||
{
|
{
|
||||||
if (rtt_us < 0)
|
if (rtt_us < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//rxrpc_update_rtt_min(peer, rtt_us);
|
/* Update RACK min RTT [RFC8985 6.1 Step 1]. */
|
||||||
|
rxrpc_update_rtt_min(peer, resp_time, rtt_us);
|
||||||
|
|
||||||
rxrpc_rtt_estimator(peer, rtt_us);
|
rxrpc_rtt_estimator(peer, rtt_us);
|
||||||
rxrpc_set_rto(peer);
|
rxrpc_set_rto(peer);
|
||||||
|
|
||||||
/* RFC6298: only reset backoff on valid RTT measurement. */
|
/* Only reset backoff on valid RTT measurement [RFC6298]. */
|
||||||
peer->backoff = 0;
|
peer->backoff = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,9 +168,10 @@ void rxrpc_peer_add_rtt(struct rxrpc_call *call, enum rxrpc_rtt_rx_trace why,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
spin_lock(&peer->rtt_input_lock);
|
spin_lock(&peer->rtt_input_lock);
|
||||||
rxrpc_ack_update_rtt(peer, rtt_us);
|
rxrpc_ack_update_rtt(peer, resp_time, rtt_us);
|
||||||
if (peer->rtt_count < 3)
|
if (peer->rtt_count < 3)
|
||||||
peer->rtt_count++;
|
peer->rtt_count++;
|
||||||
|
peer->rtt_taken++;
|
||||||
spin_unlock(&peer->rtt_input_lock);
|
spin_unlock(&peer->rtt_input_lock);
|
||||||
|
|
||||||
trace_rxrpc_rtt_rx(call, why, rtt_slot, send_serial, resp_serial,
|
trace_rxrpc_rtt_rx(call, why, rtt_slot, send_serial, resp_serial,
|
||||||
|
Loading…
Reference in New Issue
Block a user