On 18/02/2017 09:37, Steven Hartland wrote:
[snip]
> 
> So the questions:
> 
> 1. Has anyone looked at this issue before or is working on it?
> 2. Do people think we could add support for RTT estimates and enable
>    receive scaling without major tcp stack changes?

We already have a non-TS-enabled RTT estimator in place c.f. the
relevant code in tcp_input.c:

if ((to.to_flags & TOF_TS) != 0 &&
    to.to_tsecr) {
        uint32_t t;

        t = tcp_ts_getticks() - to.to_tsecr;
        if (!tp->t_rttlow || tp->t_rttlow > t)
                tp->t_rttlow = t;
        tcp_xmit_timer(tp,
            TCP_TS_TO_TICKS(t) + 1);
} else if (tp->t_rtttime &&
    SEQ_GT(th->th_ack, tp->t_rtseq)) {
        if (!tp->t_rttlow ||
            tp->t_rttlow > ticks - tp->t_rtttime)
                tp->t_rttlow = ticks - tp->t_rtttime;
        tcp_xmit_timer(tp,
                        ticks - tp->t_rtttime);
}


The autoscaling implementation just needs to have its insistence on
using timestamps stuffed into a cannon and shot in the direction of the
sun. This is the relevant block of rcvbuf code from tcp_input.c:


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 */
}

It's pretty trivial to fix by anyone so inclined.

Cheers,
Lawrence
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-transport
To unsubscribe, send any mail to "[email protected]"

Reply via email to