admin管理员组

文章数量:1320661

Using bcc sock:inet_stock_state to calculate retransmission rate when TCP close

Do you want to use tcp-sock ->total instead/tcpsock ->segs_out?



...
int sk_trace0(struct tracepoint__sock__inet_sock_set_state* args)
    {
        
        if (args->protocol != IPPROTO_TCP)
            return 0;
        if (args->newstate != TCP_CLOSE) {
            return 0;
        }
        struct sock *sk = (struct sock *)args->skaddr;
        struct tcp_sock *tcpi = tcp_sk(sk);

        u16 family = sk->__sk_common.skc_family;
        
        if (family == AF_INET) {
                   //  calculate retransmission rate when TCP close
                   // tcpi->total_retrans / tcpi->segs_out?
            struct ipv4_data0_t data4 = {};
            data4.family = family;
            data4.srtt = (tcpi->srtt_us>> 3) / 1000;
            data4.retrans = (tcpi->total_retrans);
            data4.saddr = (sk->__sk_common.skc_rcv_saddr);
            data4.daddr = (sk->__sk_common.skc_daddr);
            data4.dport = args->dport;
            data4.lport = args->sport;
            data4.segs_out = (tcpi->segs_out);
            ip_events.perf_submit(args, &data4, sizeof(data4));
        }
        return 0;
    }

How do I calculate the retransmission rate if I collect all the data?

  1. Does segs_out include total_retrans?
  2. Can total_retrans/segs_out be used to calculate the retransmission rate?

本文标签: linuxCalculate TCP retransmission rate through ebpfStack Overflow