forked from Minki/linux
tcp: reorder tcp_congestion_ops for better cache locality
Group all the often used fields in the first cache line, to reduce cache line misses. Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7f040aa322
commit
8250666517
@ -1035,44 +1035,56 @@ struct rate_sample {
|
||||
};
|
||||
|
||||
struct tcp_congestion_ops {
|
||||
/* fast path fields are put first to fill one cache line */
|
||||
|
||||
/* return slow start threshold (required) */
|
||||
u32 (*ssthresh)(struct sock *sk);
|
||||
|
||||
/* do new cwnd calculation (required) */
|
||||
void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
|
||||
|
||||
/* call before changing ca_state (optional) */
|
||||
void (*set_state)(struct sock *sk, u8 new_state);
|
||||
|
||||
/* call when cwnd event occurs (optional) */
|
||||
void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
|
||||
|
||||
/* call when ack arrives (optional) */
|
||||
void (*in_ack_event)(struct sock *sk, u32 flags);
|
||||
|
||||
/* hook for packet ack accounting (optional) */
|
||||
void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
|
||||
|
||||
/* override sysctl_tcp_min_tso_segs */
|
||||
u32 (*min_tso_segs)(struct sock *sk);
|
||||
|
||||
/* call when packets are delivered to update cwnd and pacing rate,
|
||||
* after all the ca_state processing. (optional)
|
||||
*/
|
||||
void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
|
||||
|
||||
|
||||
/* new value of cwnd after loss (required) */
|
||||
u32 (*undo_cwnd)(struct sock *sk);
|
||||
/* returns the multiplier used in tcp_sndbuf_expand (optional) */
|
||||
u32 (*sndbuf_expand)(struct sock *sk);
|
||||
|
||||
/* control/slow paths put last */
|
||||
/* get info for inet_diag (optional) */
|
||||
size_t (*get_info)(struct sock *sk, u32 ext, int *attr,
|
||||
union tcp_cc_info *info);
|
||||
|
||||
char name[TCP_CA_NAME_MAX];
|
||||
struct module *owner;
|
||||
struct list_head list;
|
||||
u32 key;
|
||||
u32 flags;
|
||||
u32 key;
|
||||
u32 flags;
|
||||
|
||||
/* initialize private data (optional) */
|
||||
void (*init)(struct sock *sk);
|
||||
/* cleanup private data (optional) */
|
||||
void (*release)(struct sock *sk);
|
||||
|
||||
/* return slow start threshold (required) */
|
||||
u32 (*ssthresh)(struct sock *sk);
|
||||
/* do new cwnd calculation (required) */
|
||||
void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
|
||||
/* call before changing ca_state (optional) */
|
||||
void (*set_state)(struct sock *sk, u8 new_state);
|
||||
/* call when cwnd event occurs (optional) */
|
||||
void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
|
||||
/* call when ack arrives (optional) */
|
||||
void (*in_ack_event)(struct sock *sk, u32 flags);
|
||||
/* new value of cwnd after loss (required) */
|
||||
u32 (*undo_cwnd)(struct sock *sk);
|
||||
/* hook for packet ack accounting (optional) */
|
||||
void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
|
||||
/* override sysctl_tcp_min_tso_segs */
|
||||
u32 (*min_tso_segs)(struct sock *sk);
|
||||
/* returns the multiplier used in tcp_sndbuf_expand (optional) */
|
||||
u32 (*sndbuf_expand)(struct sock *sk);
|
||||
/* call when packets are delivered to update cwnd and pacing rate,
|
||||
* after all the ca_state processing. (optional)
|
||||
*/
|
||||
void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
|
||||
/* get info for inet_diag (optional) */
|
||||
size_t (*get_info)(struct sock *sk, u32 ext, int *attr,
|
||||
union tcp_cc_info *info);
|
||||
|
||||
char name[TCP_CA_NAME_MAX];
|
||||
struct module *owner;
|
||||
};
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
int tcp_register_congestion_control(struct tcp_congestion_ops *type);
|
||||
void tcp_unregister_congestion_control(struct tcp_congestion_ops *type);
|
||||
|
Loading…
Reference in New Issue
Block a user