[Bloat] Getting TCP_INFO stats in apache traffic server

Dave Taht dave.taht at gmail.com
Mon Jun 21 01:06:19 EDT 2021

It's been a decade since I had to patch web100 into the kernel and
matt told me recently
that tons of it HAD finally ended up in the linux kernel, so I looked,
thinking I'd at the very least patch up
apache traffic server and netperf to start reporting that information.
Wow! what a goldmine!

Getting out the ECN CE stats is now easy. The min_rtt stat looks
useful, but I wanted also a max_rtt
stat or some way to calculate it?

apache traffic server currently reports only:

    ret = TSTextLogObjectWrite(config->log, "%s %s %s %u %u %u %u %u
%u %u %u %u %u %u %u %u %u %u", event_name, client_str,
                               server_str, info.tcpi_rtt,
info.tcpi_rttvar, info.tcpi_last_data_sent, info.tcpi_last_data_recv,
info.tcpi_snd_ssthresh, info.tcpi_rcv_ssthresh, info.tcpi_unacked,
                               info.tcpi_sacked, info.tcpi_lost,
info.tcpi_retrans, info.tcpi_fackets, info.tcpi_total_retrans,
                               info.tcpi_data_segs_in, info.tcpi_data_segs_out,

This is what linux 5.11 now can get back to you. Anyone see anything
exceptionally useful worth logging

       __u8    tcpi_state;
        __u8    tcpi_ca_state;
        __u8    tcpi_retransmits;
        __u8    tcpi_probes;
        __u8    tcpi_backoff;
        __u8    tcpi_options;
        __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;
        __u8    tcpi_delivery_rate_app_limited:1, tcpi_fastopen_client_fail:2;

        __u32   tcpi_rto;
        __u32   tcpi_ato;
        __u32   tcpi_snd_mss;
        __u32   tcpi_rcv_mss;

        __u32   tcpi_unacked;
        __u32   tcpi_sacked;
        __u32   tcpi_lost;
        __u32   tcpi_retrans;
        __u32   tcpi_fackets;

        /* Times. */
        __u32   tcpi_last_data_sent;
        __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
        __u32   tcpi_last_data_recv;
        __u32   tcpi_last_ack_recv;

        /* Metrics. */
        __u32   tcpi_pmtu;
        __u32   tcpi_rcv_ssthresh;
        __u32   tcpi_rtt;
        __u32   tcpi_rttvar;
        __u32   tcpi_snd_ssthresh;
        __u32   tcpi_snd_cwnd;
        __u32   tcpi_advmss;
        __u32   tcpi_reordering;

        __u32   tcpi_rcv_rtt;
        __u32   tcpi_rcv_space;

        __u32   tcpi_total_retrans;

        __u64   tcpi_pacing_rate;
        __u64   tcpi_max_pacing_rate;
        __u64   tcpi_bytes_acked;    /* RFC4898 tcpEStatsAppHCThruOctetsAcked */
        __u64   tcpi_bytes_received; /* RFC4898
tcpEStatsAppHCThruOctetsReceived */
        __u32   tcpi_segs_out;       /* RFC4898 tcpEStatsPerfSegsOut */
        __u32   tcpi_segs_in;        /* RFC4898 tcpEStatsPerfSegsIn */

        __u32   tcpi_notsent_bytes;
        __u32   tcpi_min_rtt;
        __u32   tcpi_data_segs_in;      /* RFC4898 tcpEStatsDataSegsIn */
        __u32   tcpi_data_segs_out;     /* RFC4898 tcpEStatsDataSegsOut */

        __u64   tcpi_delivery_rate;

        __u64   tcpi_busy_time;      /* Time (usec) busy sending data */
        __u64   tcpi_rwnd_limited;   /* Time (usec) limited by receive window */
        __u64   tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */

        __u32   tcpi_delivered;
        __u32   tcpi_delivered_ce;

        __u64   tcpi_bytes_sent;     /* RFC4898 tcpEStatsPerfHCDataOctetsOut */
        __u64   tcpi_bytes_retrans;  /* RFC4898 tcpEStatsPerfOctetsRetrans */
        __u32   tcpi_dsack_dups;     /* RFC4898 tcpEStatsStackDSACKDups */
        __u32   tcpi_reord_seen;     /* reordering events seen */

        __u32   tcpi_rcv_ooopack;    /* Out-of-order packets received */
        __u32   tcpi_snd_wnd;        /* peer's advertised receive window after
                                      * scaling (bytes)

Latest Podcast:

Dave Täht CTO, TekLibre, LLC

More information about the Bloat mailing list