Uzyskaj bieżącą / domyślną wartość TCP initcwnd w systemie Linux

9

Mogę manipulować taką wartością za pomocą:

ip route change ... initcwnd 10

a następnie przekaż opinię:

ip route show

Ale co z wartością domyślną przed jakąkolwiek modyfikacją? Czy istnieje sposób na sprawdzenie tej wartości z systemu?

Alternatywnie, czy możesz podać poprawne odniesienie, które pokazuje domyślną zakodowaną wartość dla każdej wersji jądra?

Cyrus
źródło

Odpowiedzi:

10

Naprawdę nie wiem na pewno, ale wydaje się to uzasadnione

Przeczucie:

$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`

na zewnątrz:

/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND          10
Ярослав Рахматуллин
źródło
Tak, grepowanie kodu jest zawsze dobrym pomysłem!
cyr
6

Cóż, nie mogę powiedzieć, że jestem w 100% pewien, że to powinna być odpowiedź, ale, jak to często bywa, ssto dobry wybór, aby ujawnić pewne informacje, na przykład:

 ss -nli|fgrep cwnd
     westwood rto:1000 mss:536 cwnd:10
     westwood rto:1000 mss:536 cwnd:10
     westwood rto:1000 mss:536 cwnd:10

-njest typowe, aby pozbyć się irytującego rozstrzygania DNS, -ltrzymamy się tylko gniazd nasłuchujących i -i(klucz) to „Pokaż wewnętrzne informacje TCP”. Jak widać, zarówno algorytm przeciążenia, jak i domyślny cwnd są pokazane.

poige
źródło
2

Jeśli dobrze cię zrozumiałem, szukasz wartości początkowej snd_cwndzestawu parametrów podczas inicjalizacji gniazda TCP.

Wygląda na to, że zaczynając od jądra Linuksa 2.6.39, TCP_INIT_CWNDw linux / include / net / tcp.h wprowadzono makro, które wypełnia wartość snd_cwndprzy inicjalizacji gniazda TCP.

Wiem, gdzie ten kod znajduje się w jądrze IPv4, i niestety nie wydaje się, aby używał żadnego makra do wypełnienia wartości dla jąder starszych niż2.6.39

/* net/ipv4/tcp_ipv4.c from 2.6.37 kernel */
static int tcp_v4_init_sock(struct sock *sk)
{
        struct inet_connection_sock *icsk = inet_csk(sk);
        struct tcp_sock *tp = tcp_sk(sk);

        ....
        ....
        ....

        /* So many TCP implementations out there (incorrectly) count the
         * initial SYN frame in their delayed-ACK and congestion control
         * algorithms that we must have the following bandaid to talk
         * efficiently to them.  -DaveM
         */
        tp->snd_cwnd = 2;

        ....
        ....
        ....
}

Podobny kod startowy istnieje IPv6również dla tcp_v6_init_sock()funkcji wewnątrz wnet/ipv6/tcp_ipv6.c

Tuxdude
źródło