Page MenuHomeFreeBSD

D9668.id26412.diff
No OneTemporary

D9668.id26412.diff

Index: sys/netinet/in_kdtrace.h
===================================================================
--- sys/netinet/in_kdtrace.h
+++ sys/netinet/in_kdtrace.h
@@ -65,6 +65,7 @@
SDT_PROBE_DECLARE(tcp, , , debug__output);
SDT_PROBE_DECLARE(tcp, , , debug__user);
SDT_PROBE_DECLARE(tcp, , , debug__drop);
+SDT_PROBE_DECLARE(tcp, , , receive__autoresize);
SDT_PROBE_DECLARE(udp, , , receive);
SDT_PROBE_DECLARE(udp, , , send);
Index: sys/netinet/in_kdtrace.c
===================================================================
--- sys/netinet/in_kdtrace.c
+++ sys/netinet/in_kdtrace.c
@@ -132,6 +132,14 @@
"void *", "void *",
"int", "tcplsinfo_t *");
+SDT_PROBE_DEFINE6_XLATE(tcp, , , receive__autoresize,
+ "void *", "void *",
+ "struct tcpcb *", "csinfo_t *",
+ "u_int", "u_int",
+ "struct tcpcb *", "tcpsinfo_t *" ,
+ "struct tcphdr *", "tcpinfoh_t *",
+ "int", "int");
+
SDT_PROBE_DEFINE5_XLATE(udp, , , receive,
"void *", "pktinfo_t *",
"struct inpcb *", "csinfo_t *",
Index: sys/netinet/tcp_input.c
===================================================================
--- sys/netinet/tcp_input.c
+++ sys/netinet/tcp_input.c
@@ -1885,25 +1885,27 @@
* the buffer to better manage the socket buffer resources.
*/
if (V_tcp_do_autorcvbuf &&
- (to.to_flags & TOF_TS) &&
- to.to_tsecr &&
- (so->so_rcv.sb_flags & SB_AUTOSIZE)) {
- if (TSTMP_GT(to.to_tsecr, tp->rfbuf_ts) &&
- to.to_tsecr - tp->rfbuf_ts < hz) {
- if (tp->rfbuf_cnt >
- (so->so_rcv.sb_hiwat / 8 * 7) &&
- so->so_rcv.sb_hiwat <
- V_tcp_autorcvbuf_max) {
- newsize =
- min(so->so_rcv.sb_hiwat +
- V_tcp_autorcvbuf_inc,
- V_tcp_autorcvbuf_max);
- }
- /* Start over with next RTT. */
- tp->rfbuf_ts = 0;
- tp->rfbuf_cnt = 0;
- } else
- tp->rfbuf_cnt += tlen; /* add up */
+ (so->so_rcv.sb_flags & SB_AUTOSIZE) &&
+ tp->t_srtt != 0 && tp->rfbuf_ts != 0 &&
+ tcp_ts_getticks() - tp->rfbuf_ts >
+ (tp->t_srtt >> TCP_RTT_SHIFT)) {
+ if (tp->rfbuf_cnt >
+ (so->so_rcv.sb_hiwat / 8 * 7) &&
+ so->so_rcv.sb_hiwat <
+ V_tcp_autorcvbuf_max) {
+ newsize = min(
+ so->so_rcv.sb_hiwat +
+ V_tcp_autorcvbuf_inc,
+ V_tcp_autorcvbuf_max);
+ }
+ TCP_PROBE6(receive__autoresize, NULL,
+ tp, m, tp, th, newsize);
+
+ /* Start over with next RTT. */
+ tp->rfbuf_ts = 0;
+ tp->rfbuf_cnt = 0;
+ } else {
+ tp->rfbuf_cnt += tlen; /* add up */
}
/* Add data to socket buffer. */
@@ -1945,10 +1947,6 @@
win = 0;
tp->rcv_wnd = imax(win, (int)(tp->rcv_adv - tp->rcv_nxt));
- /* Reset receive buffer auto scaling when not in bulk receive mode. */
- tp->rfbuf_ts = 0;
- tp->rfbuf_cnt = 0;
-
switch (tp->t_state) {
/*
Index: sys/netinet/tcp_output.c
===================================================================
--- sys/netinet/tcp_output.c
+++ sys/netinet/tcp_output.c
@@ -831,11 +831,13 @@
to.to_tsval = tcp_ts_getticks() + tp->ts_offset;
to.to_tsecr = tp->ts_recent;
to.to_flags |= TOF_TS;
- /* Set receive buffer autosizing timestamp. */
- if (tp->rfbuf_ts == 0 &&
- (so->so_rcv.sb_flags & SB_AUTOSIZE))
- tp->rfbuf_ts = tcp_ts_getticks();
}
+
+ /* Set receive buffer autosizing timestamp. */
+ if (tp->rfbuf_ts == 0 &&
+ (so->so_rcv.sb_flags & SB_AUTOSIZE))
+ tp->rfbuf_ts = tcp_ts_getticks();
+
/* Selective ACK's. */
if (tp->t_flags & TF_SACK_PERMIT) {
if (flags & TH_SYN)
Index: sys/netinet/tcp_stacks/fastpath.c
===================================================================
--- sys/netinet/tcp_stacks/fastpath.c
+++ sys/netinet/tcp_stacks/fastpath.c
@@ -435,25 +435,27 @@
* the buffer to better manage the socket buffer resources.
*/
if (V_tcp_do_autorcvbuf &&
- (to->to_flags & TOF_TS) &&
- to->to_tsecr &&
- (so->so_rcv.sb_flags & SB_AUTOSIZE)) {
- if (TSTMP_GT(to->to_tsecr, tp->rfbuf_ts) &&
- to->to_tsecr - tp->rfbuf_ts < hz) {
- if (tp->rfbuf_cnt >
- (so->so_rcv.sb_hiwat / 8 * 7) &&
- so->so_rcv.sb_hiwat <
- V_tcp_autorcvbuf_max) {
- newsize =
- min(so->so_rcv.sb_hiwat +
- V_tcp_autorcvbuf_inc,
- V_tcp_autorcvbuf_max);
- }
- /* Start over with next RTT. */
- tp->rfbuf_ts = 0;
- tp->rfbuf_cnt = 0;
- } else
- tp->rfbuf_cnt += tlen; /* add up */
+ (so->so_rcv.sb_flags & SB_AUTOSIZE) &&
+ tp->t_srtt != 0 && tp->rfbuf_ts != 0 &&
+ tcp_ts_getticks() - tp->rfbuf_ts >
+ (tp->t_srtt >> TCP_RTT_SHIFT)) {
+ if (tp->rfbuf_cnt >
+ (so->so_rcv.sb_hiwat / 8 * 7) &&
+ so->so_rcv.sb_hiwat <
+ V_tcp_autorcvbuf_max) {
+ newsize = min(
+ so->so_rcv.sb_hiwat +
+ V_tcp_autorcvbuf_inc,
+ V_tcp_autorcvbuf_max);
+ }
+ TCP_PROBE6(receive__autoresize, NULL,
+ tp, m, tp, th, newsize);
+
+ /* Start over with next RTT. */
+ tp->rfbuf_ts = 0;
+ tp->rfbuf_cnt = 0;
+ } else {
+ tp->rfbuf_cnt += tlen; /* add up */
}
/* Add data to socket buffer. */
@@ -532,10 +534,6 @@
win = 0;
tp->rcv_wnd = imax(win, (int)(tp->rcv_adv - tp->rcv_nxt));
- /* Reset receive buffer auto scaling when not in bulk receive mode. */
- tp->rfbuf_ts = 0;
- tp->rfbuf_cnt = 0;
-
switch (tp->t_state) {
/*

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 26, 8:12 AM (3 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24221234
Default Alt Text
D9668.id26412.diff (5 KB)

Event Timeline