Demonstrations of tcpcong, the Linux eBPF/bcc version. This tool traces linux kernel's tcp congestion control status change functions, then calculate duration of every status and record it, at last prints it as tables or histogram, which can be used for evaluating the tcp congestion algorithm's performance. For example: ./tcpcong Tracing tcp congestion control status duration... Hit Ctrl-C to end. ^C LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/34968 192.168.219.4/19230 884 12 102 507 0 2721 192.168.219.3/34976 192.168.219.4/19230 869 12 133 490 0 2737 192.168.219.3/34982 192.168.219.4/19230 807 0 0 699 0 3158 192.168.219.3/34988 192.168.219.4/19230 892 16 88 508 0 2540 192.168.219.3/38946 192.168.219.4/19229 894 13 97 500 0 2697 192.168.219.3/38950 192.168.219.4/19229 840 10 73 579 1 1840 192.168.219.3/38970 192.168.219.4/19229 862 17 91 534 0 2339 192.168.219.3/38982 192.168.219.4/19229 812 13 92 587 0 2102 192.168.219.3/39070 192.168.219.1/19225 855 7 61 580 0 2826 192.168.219.3/39098 192.168.219.1/19225 880 8 47 568 0 2557 192.168.219.3/39112 192.168.219.1/19225 674 2 10 819 0 2867 192.168.219.3/39120 192.168.219.1/19225 757 1 11 736 0 2978 192.168.219.3/41146 192.168.219.1/19227 736 1 10 758 0 2972 192.168.219.3/41162 192.168.219.1/19227 662 2 10 830 0 2889 192.168.219.3/41178 192.168.219.1/19227 646 2 11 846 0 2858 192.168.219.3/41192 192.168.219.1/19227 812 9 67 615 0 2204 192.168.219.3/43856 192.168.219.2/19225 745 1 5 754 0 3067 192.168.219.3/43858 192.168.219.2/19225 827 4 36 636 0 2130 192.168.219.3/43872 192.168.219.2/19225 739 0 2 764 0 3035 192.168.219.3/43880 192.168.219.2/19225 747 0 3 756 0 3144 192.168.219.3/47230 192.168.219.2/19227 830 4 38 632 0 2554 192.168.219.3/47242 192.168.219.2/19227 782 3 32 687 0 2136 192.168.219.3/47272 192.168.219.2/19227 611 1 3 889 0 2629 192.168.219.3/47294 192.168.219.2/19227 832 3 38 630 0 2631 192.168.219.3/49716 192.168.219.2/19226 846 4 44 610 0 2562 192.168.219.3/49746 192.168.219.2/19226 765 0 4 736 0 2998 192.168.219.3/49760 192.168.219.2/19226 812 2 47 644 0 2273 192.168.219.3/49766 192.168.219.2/19226 724 0 2 779 0 3106 192.168.219.3/54076 192.168.219.1/19226 690 1 9 804 0 2939 192.168.219.3/54096 192.168.219.1/19226 715 2 10 778 0 2974 192.168.219.3/54114 192.168.219.1/19226 878 6 61 558 0 2742 192.168.219.3/54120 192.168.219.1/19226 738 0 9 757 0 2959 192.168.219.3/60926 192.168.219.4/19228 711 11 80 702 0 1870 192.168.219.3/60930 192.168.219.4/19228 785 0 0 720 0 3325 192.168.219.3/60942 192.168.219.4/19228 762 0 1 743 0 3342 192.168.219.3/60948 192.168.219.4/19228 877 11 102 514 0 2654 The example shows all tcp socket's congestion status duration for milliseconds, open_ms column is the duration of tcp connection in open status whose cwnd can increase; dod_ms column is the duration of tcp connection in disorder status who receives disordered packet; rcov_ms column is the duration of tcp connection in recovery status who receives 3 duplicated acks; cwr_ms column is the duration of tcp connection who receives explicitly congest notifier and two acks to reduce the cwnd. the last column chgs prints total status change number of the socket. An interval can be provided, and also optionally a count. Eg, printing output every 1 second, and including timestamps (-T): ./tcpcong -T 1 3 Tracing tcp congestion control status duration... Hit Ctrl-C to end. 07:37:55 LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/34968 192.168.219.4/19230 742 15 82 311 0 1678 192.168.219.3/34976 192.168.219.4/19230 700 12 98 340 0 1965 192.168.219.3/34982 192.168.219.4/19230 634 0 1 516 0 2471 192.168.219.3/34988 192.168.219.4/19230 692 12 94 354 0 1941 192.168.219.3/38946 192.168.219.4/19229 722 12 90 323 0 2006 192.168.219.3/38950 192.168.219.4/19229 420 7 264 439 1 951 192.168.219.3/38970 192.168.219.4/19229 724 14 90 323 0 1986 192.168.219.3/38982 192.168.219.4/19229 686 13 87 365 0 1675 192.168.219.3/39070 192.168.219.1/19225 653 5 46 446 0 1998 192.168.219.3/39098 192.168.219.1/19225 667 4 38 440 0 2098 192.168.219.3/39112 192.168.219.1/19225 606 0 1 543 0 2146 192.168.219.3/39120 192.168.219.1/19225 492 0 205 453 0 1916 192.168.219.3/41146 192.168.219.1/19227 583 0 3 564 0 2332 192.168.219.3/41162 192.168.219.1/19227 536 0 1 613 0 2192 192.168.219.3/41178 192.168.219.1/19227 499 0 2 649 0 2064 192.168.219.3/41192 192.168.219.1/19227 622 6 34 488 0 1660 192.168.219.3/43856 192.168.219.2/19225 555 0 1 593 0 2359 192.168.219.3/43858 192.168.219.2/19225 618 3 28 502 0 1773 192.168.219.3/43872 192.168.219.2/19225 558 0 0 592 0 2318 192.168.219.3/43880 192.168.219.2/19225 580 0 1 569 0 2303 192.168.219.3/47230 192.168.219.2/19227 646 1 18 485 0 1776 192.168.219.3/47242 192.168.219.2/19227 634 0 20 495 0 1582 192.168.219.3/47272 192.168.219.2/19227 463 0 1 687 0 1854 192.168.219.3/47294 192.168.219.2/19227 636 2 27 486 0 1901 192.168.219.3/49716 192.168.219.2/19226 646 2 28 475 0 1832 192.168.219.3/49746 192.168.219.2/19226 583 0 0 567 0 2333 192.168.219.3/49760 192.168.219.2/19226 628 2 26 495 0 1755 192.168.219.3/49766 192.168.219.2/19226 558 0 0 592 0 2412 192.168.219.3/54076 192.168.219.1/19226 581 0 2 567 0 2042 192.168.219.3/54096 192.168.219.1/19226 554 0 2 594 0 2239 192.168.219.3/54114 192.168.219.1/19226 685 4 33 427 0 1859 192.168.219.3/54120 192.168.219.1/19226 611 0 3 537 0 2322 192.168.219.3/60926 192.168.219.4/19228 681 20 101 347 0 1636 192.168.219.3/60930 192.168.219.4/19228 616 0 1 532 0 2310 192.168.219.3/60942 192.168.219.4/19228 607 0 1 543 0 2433 192.168.219.3/60948 192.168.219.4/19228 597 11 76 293 0 1641 07:37:57 LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/34968 192.168.219.4/19230 469 9 255 265 0 1305 192.168.219.3/34976 192.168.219.4/19230 580 11 91 316 0 1916 192.168.219.3/34982 192.168.219.4/19230 566 0 0 433 0 2092 192.168.219.3/34988 192.168.219.4/19230 583 9 63 345 0 1871 192.168.219.3/38946 192.168.219.4/19229 449 16 69 464 0 1425 192.168.219.3/38950 192.168.219.4/19229 569 10 68 349 0 1848 192.168.219.3/38970 192.168.219.4/19229 573 20 66 339 0 1839 192.168.219.3/38982 192.168.219.4/19229 553 9 60 378 0 1483 192.168.219.3/39070 192.168.219.1/19225 471 3 243 280 0 1279 192.168.219.3/39098 192.168.219.1/19225 598 4 37 355 0 1717 192.168.219.3/39112 192.168.219.1/19225 522 0 1 476 0 1816 192.168.219.3/39120 192.168.219.1/19225 518 0 1 480 0 2031 192.168.219.3/41146 192.168.219.1/19227 500 0 3 497 0 1996 192.168.219.3/41162 192.168.219.1/19227 448 0 2 548 0 1849 192.168.219.3/41178 192.168.219.1/19227 441 0 4 554 0 1693 192.168.219.3/41192 192.168.219.1/19227 555 4 34 405 0 1341 192.168.219.3/43856 192.168.219.2/19225 471 0 3 525 0 2118 192.168.219.3/43858 192.168.219.2/19225 541 1 25 430 0 1446 192.168.219.3/43872 192.168.219.2/19225 483 0 1 516 0 2044 192.168.219.3/43880 192.168.219.2/19225 492 0 0 507 0 2073 192.168.219.3/47230 192.168.219.2/19227 581 3 29 385 0 1453 192.168.219.3/47242 192.168.219.2/19227 571 2 22 403 0 1292 192.168.219.3/47272 192.168.219.2/19227 393 0 0 604 0 1516 192.168.219.3/47294 192.168.219.2/19227 575 2 27 393 0 1660 192.168.219.3/49716 192.168.219.2/19226 584 1 25 389 0 1582 192.168.219.3/49746 192.168.219.2/19226 513 0 0 486 0 2017 192.168.219.3/49760 192.168.219.2/19226 560 1 24 412 0 1370 192.168.219.3/49766 192.168.219.2/19226 474 0 0 525 0 2121 192.168.219.3/54076 192.168.219.1/19226 504 0 1 494 0 1724 192.168.219.3/54096 192.168.219.1/19226 490 0 2 507 0 1906 192.168.219.3/54114 192.168.219.1/19226 611 3 25 360 0 1560 192.168.219.3/54120 192.168.219.1/19226 520 0 1 479 0 2010 192.168.219.3/60926 192.168.219.4/19228 527 9 53 408 0 1473 192.168.219.3/60930 192.168.219.4/19228 551 0 0 448 0 1951 192.168.219.3/60942 192.168.219.4/19228 538 0 0 461 0 2038 192.168.219.3/60948 192.168.219.4/19228 511 9 68 295 1 1701 07:37:58 LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/34968 192.168.219.4/19230 293 1 226 211 0 755 192.168.219.3/34976 192.168.219.4/19230 424 4 36 354 0 1489 192.168.219.3/34982 192.168.219.4/19230 552 0 0 446 0 2249 192.168.219.3/34988 192.168.219.4/19230 493 4 42 327 0 1715 192.168.219.3/38946 192.168.219.4/19229 425 4 37 340 41 1478 192.168.219.3/38950 192.168.219.4/19229 465 5 45 335 0 1586 192.168.219.3/38970 192.168.219.4/19229 531 5 41 420 0 1863 192.168.219.3/38982 192.168.219.4/19229 525 5 41 427 0 1625 192.168.219.3/39070 192.168.219.1/19225 576 4 44 374 0 1787 192.168.219.3/39098 192.168.219.1/19225 596 6 41 355 0 1782 192.168.219.3/39112 192.168.219.1/19225 501 0 3 494 0 1887 192.168.219.3/39120 192.168.219.1/19225 511 0 4 483 0 2070 192.168.219.3/41146 192.168.219.1/19227 503 0 3 492 0 2068 192.168.219.3/41162 192.168.219.1/19227 449 1 3 545 0 1962 192.168.219.3/41178 192.168.219.1/19227 445 0 5 546 0 1907 192.168.219.3/41192 192.168.219.1/19227 436 4 248 309 0 1208 192.168.219.3/43856 192.168.219.2/19225 480 0 0 519 0 2108 192.168.219.3/43858 192.168.219.2/19225 534 3 24 437 0 1644 192.168.219.3/43872 192.168.219.2/19225 480 0 0 519 0 2068 192.168.219.3/43880 192.168.219.2/19225 490 0 0 508 0 2083 192.168.219.3/47230 192.168.219.2/19227 561 3 22 411 0 1556 192.168.219.3/47242 192.168.219.2/19227 550 2 22 424 0 1485 192.168.219.3/47272 192.168.219.2/19227 398 0 0 601 0 1537 192.168.219.3/47294 192.168.219.2/19227 551 1 19 427 0 1712 192.168.219.3/49716 192.168.219.2/19226 570 1 20 405 0 1712 192.168.219.3/49746 192.168.219.2/19226 494 0 0 503 0 2052 192.168.219.3/49760 192.168.219.2/19226 547 1 18 431 0 1673 192.168.219.3/49766 192.168.219.2/19226 497 0 0 501 0 1983 192.168.219.3/54076 192.168.219.1/19226 495 0 4 499 0 1849 192.168.219.3/54096 192.168.219.1/19226 485 0 4 508 0 2037 192.168.219.3/54114 192.168.219.1/19226 603 5 37 354 0 1671 192.168.219.3/54120 192.168.219.1/19226 516 0 1 482 0 2047 192.168.219.3/60926 192.168.219.4/19228 543 5 39 412 0 1708 192.168.219.3/60930 192.168.219.4/19228 530 0 0 469 0 2096 192.168.219.3/60942 192.168.219.4/19228 510 0 0 489 0 2234 192.168.219.3/60948 192.168.219.4/19228 565 4 61 367 0 1956 An local port and remote port can be specified, and also optionally a count. Eg printing output every 1 second, and including timestamps (-T) for local ports 30000-40000 and remote ports 19225-19227: ./tcpcong -T -L 30000-40000 -R 19225-19227 1 3 Tracing tcp congestion control status duration... Hit Ctrl-C to end. 07:39:11 LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/39070 192.168.219.1/19225 668 4 32 455 0 1706 192.168.219.3/39098 192.168.219.1/19225 692 4 38 424 0 2110 192.168.219.3/39112 192.168.219.1/19225 564 0 2 593 0 2291 192.168.219.3/39120 192.168.219.1/19225 599 0 4 555 0 2387 07:39:12 LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/39070 192.168.219.1/19225 576 3 27 391 0 1525 192.168.219.3/39098 192.168.219.1/19225 580 3 36 379 0 1893 192.168.219.3/39112 192.168.219.1/19225 474 1 10 512 0 2009 192.168.219.3/39120 192.168.219.1/19225 505 1 9 483 0 2022 07:39:13 LAddrPort RAddrPort Open_ms Dod_ms Rcov_ms Cwr_ms Los_ms Chgs 192.168.219.3/39070 192.168.219.1/19225 546 6 27 418 0 1659 192.168.219.3/39098 192.168.219.1/19225 564 4 40 390 0 1937 192.168.219.3/39112 192.168.219.1/19225 479 0 3 514 0 2008 192.168.219.3/39120 192.168.219.1/19225 515 0 4 479 0 1982 The (-u) option can be specified for recording the duration as miroseconds. Eg printing output every 1 second, and including timestamps (-T) and microseconds (-u) for local ports 30000-40000 and remote ports 19225-19227: ./tcpcong -T -u -L 30000-40000 -R 19225-19227 1 3 Tracing tcp congestion control status duration... Hit Ctrl-C to end. 07:39:44 LAddrPort RAddrPort Open_us Dod_us Rcov_us Cwr_us Los_us Chgs 192.168.219.3/39070 192.168.219.1/19225 600971 3232 38601 509796 0 1843 192.168.219.3/39098 192.168.219.1/19225 667184 5585 26285 453575 0 1969 192.168.219.3/39112 192.168.219.1/19225 580982 22 1502 569479 0 2210 192.168.219.3/39120 192.168.219.1/19225 600280 201 955 550752 0 2327 07:39:45 LAddrPort RAddrPort Open_us Dod_us Rcov_us Cwr_us Los_us Chgs 192.168.219.3/39070 192.168.219.1/19225 567189 2029 25966 404698 0 1612 192.168.219.3/39098 192.168.219.1/19225 597201 2263 24073 376454 0 1578 192.168.219.3/39112 192.168.219.1/19225 500792 846 9297 489264 0 1850 192.168.219.3/39120 192.168.219.1/19225 518700 94 749 480171 0 1967 07:39:46 LAddrPort RAddrPort Open_us Dod_us Rcov_us Cwr_us Los_us Chgs 192.168.219.3/39070 192.168.219.1/19225 587340 5324 37035 370066 0 1602 192.168.219.3/39098 192.168.219.1/19225 532986 5630 31624 345336 0 1319 192.168.219.3/39112 192.168.219.1/19225 481936 1129 6244 510235 0 1909 192.168.219.3/39120 192.168.219.1/19225 507196 316 6200 485737 0 1957 the ipv6 example with (-u) option can be shown. Eg printing output every 1 second, and including timestamps (-T) and microseconds (-u) for local ports 30000-40000 and remote ports 19225-19227: ./tcpcong.py -T -u -L 30000-40000 -R 19225-19227 1 3 Tracing tcp congestion control status duration... Hit Ctrl-C to end. 11:31:55 LAddrPort6 RAddrPort6 Open_us Dod_us Rcov_us Cwr_us Los_us Chgs fe80::bace:f6ff:fe14:d21c/32810 fe80::bace:f6ff:fe43:fe96/19226 876328 0 0 137957 0 235 fe80::bace:f6ff:fe14:d21c/32812 fe80::bace:f6ff:fe43:fe96/19226 757739 0 0 283114 0 590 fe80::bace:f6ff:fe14:d21c/32814 fe80::bace:f6ff:fe43:fe96/19226 855426 0 0 136134 0 231 fe80::bace:f6ff:fe14:d21c/32816 fe80::bace:f6ff:fe43:fe96/19226 695271 0 0 345443 0 606 11:31:56 LAddrPort6 RAddrPort6 Open_us Dod_us Rcov_us Cwr_us Los_us Chgs fe80::bace:f6ff:fe14:d21c/32810 fe80::bace:f6ff:fe43:fe96/19226 913925 0 0 81995 0 92 fe80::bace:f6ff:fe14:d21c/32812 fe80::bace:f6ff:fe43:fe96/19226 785024 0 0 202819 0 777 fe80::bace:f6ff:fe14:d21c/32814 fe80::bace:f6ff:fe43:fe96/19226 920963 0 0 80715 0 111 fe80::bace:f6ff:fe14:d21c/32816 fe80::bace:f6ff:fe43:fe96/19226 765172 0 0 222897 0 734 11:31:57 LAddrPort6 RAddrPort6 Open_us Dod_us Rcov_us Cwr_us Los_us Chgs fe80::bace:f6ff:fe14:d21c/32810 fe80::bace:f6ff:fe43:fe96/19226 839563 0 0 98313 0 149 fe80::bace:f6ff:fe14:d21c/32812 fe80::bace:f6ff:fe43:fe96/19226 534816 0 0 329683 0 495 fe80::bace:f6ff:fe14:d21c/32814 fe80::bace:f6ff:fe43:fe96/19226 841706 103 2404 91273 0 132 fe80::bace:f6ff:fe14:d21c/32816 fe80::bace:f6ff:fe43:fe96/19226 633320 0 0 286584 0 565 The distribution of congestion status duration can be printed as a histogram with the -d option and also optionally a count. Eg printing output every 1 second for microseconds, and including timestamps (-T): ./tcpcong.py -d -u -T 1 2 Tracing tcp congestion control status duration... Hit Ctrl-C to end. 07:40:12 tcp_congest_state = cwr usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 11 | | 8 -> 15 : 10 | | 16 -> 31 : 25 | | 32 -> 63 : 58 | | 64 -> 127 : 117 | | 128 -> 255 : 2924 |******* | 256 -> 511 : 16249 |****************************************| 512 -> 1023 : 15340 |************************************* | 1024 -> 2047 : 786 |* | 2048 -> 4095 : 24 | | 4096 -> 8191 : 7 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 0 | | 32768 -> 65535 : 1 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 1 | | tcp_congest_state = recovery usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 1 | | 8 -> 15 : 0 | | 16 -> 31 : 2 | | 32 -> 63 : 9 | | 64 -> 127 : 28 | | 128 -> 255 : 895 |****************************** | 256 -> 511 : 1190 |****************************************| 512 -> 1023 : 384 |************ | 1024 -> 2047 : 66 |** | 2048 -> 4095 : 2 | | 4096 -> 8191 : 4 | | 8192 -> 16383 : 2 | | 16384 -> 32767 : 0 | | 32768 -> 65535 : 0 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 2 | | tcp_congest_state = disorder usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 21 |** | 8 -> 15 : 59 |***** | 16 -> 31 : 102 |********* | 32 -> 63 : 256 |************************* | 64 -> 127 : 409 |****************************************| 128 -> 255 : 255 |************************ | 256 -> 511 : 104 |********** | 512 -> 1023 : 8 | | tcp_congest_state = open usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 11 | | 4 -> 7 : 266 | | 8 -> 15 : 319 | | 16 -> 31 : 396 |* | 32 -> 63 : 488 |* | 64 -> 127 : 695 |** | 128 -> 255 : 4395 |************* | 256 -> 511 : 13329 |****************************************| 512 -> 1023 : 12727 |************************************** | 1024 -> 2047 : 3327 |********* | 2048 -> 4095 : 601 |* | 4096 -> 8191 : 45 | | 8192 -> 16383 : 3 | | 16384 -> 32767 : 1 | | 32768 -> 65535 : 1 | | tcp_congest_state = loss usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 0 | | 16 -> 31 : 0 | | 32 -> 63 : 0 | | 64 -> 127 : 0 | | 128 -> 255 : 1 |****************************************| 256 -> 511 : 1 |****************************************| 512 -> 1023 : 0 | | 1024 -> 2047 : 0 | | 2048 -> 4095 : 0 | | 4096 -> 8191 : 0 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 0 | | 32768 -> 65535 : 1 |****************************************| 07:40:14 tcp_congest_state = cwr usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 7 | | 4 -> 7 : 162 | | 8 -> 15 : 591 |* | 16 -> 31 : 462 | | 32 -> 63 : 351 | | 64 -> 127 : 441 | | 128 -> 255 : 4073 |******** | 256 -> 511 : 19188 |****************************************| 512 -> 1023 : 16127 |********************************* | 1024 -> 2047 : 725 |* | 2048 -> 4095 : 23 | | 4096 -> 8191 : 3 | | 8192 -> 16383 : 2 | | 16384 -> 32767 : 0 | | 32768 -> 65535 : 4 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 2 | | tcp_congest_state = recovery usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 3 | | 8 -> 15 : 16 | | 16 -> 31 : 22 | | 32 -> 63 : 37 |* | 64 -> 127 : 75 |** | 128 -> 255 : 1082 |******************************* | 256 -> 511 : 1364 |****************************************| 512 -> 1023 : 369 |********** | 1024 -> 2047 : 67 |* | 2048 -> 4095 : 0 | | 4096 -> 8191 : 2 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 0 | | 32768 -> 65535 : 0 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 5 | | tcp_congest_state = disorder usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 4 | | 4 -> 7 : 43 |**** | 8 -> 15 : 107 |*********** | 16 -> 31 : 145 |*************** | 32 -> 63 : 312 |********************************* | 64 -> 127 : 370 |****************************************| 128 -> 255 : 256 |*************************** | 256 -> 511 : 101 |********** | 512 -> 1023 : 8 | | tcp_congest_state = open usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 21 | | 4 -> 7 : 359 | | 8 -> 15 : 516 |* | 16 -> 31 : 484 |* | 32 -> 63 : 522 |* | 64 -> 127 : 818 |** | 128 -> 255 : 5081 |************* | 256 -> 511 : 14852 |****************************************| 512 -> 1023 : 13753 |************************************* | 1024 -> 2047 : 3224 |******** | 2048 -> 4095 : 598 |* | 4096 -> 8191 : 41 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 1 | | 32768 -> 65535 : 0 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 1 | | tcp_congest_state = loss usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 0 | | 16 -> 31 : 0 | | 32 -> 63 : 0 | | 64 -> 127 : 1 |****** | 128 -> 255 : 0 | | 256 -> 511 : 2 |************* | 512 -> 1023 : 6 |****************************************| 1024 -> 2047 : 0 | | 2048 -> 4095 : 0 | | 4096 -> 8191 : 0 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 0 | | 32768 -> 65535 : 1 |****** | USAGE: ./tcpcong -h usage: tcpcong [-h] [-L LOCALPORT] [-R REMOTEPORT] [-T] [-d] [-u] [interval] [outputs] Summarize tcp socket congestion control status duration positional arguments: interval output interval, in seconds outputs number of outputs optional arguments: -h, --help show this help message and exit -L LOCALPORT, --localport LOCALPORT trace local ports only -R REMOTEPORT, --remoteport REMOTEPORT trace the dest ports only -T, --timestamp include timestamp on output -d, --dist show distributions as histograms -u, --microseconds output in microseconds examples: ./tcpcong # show tcp congestion status duration ./tcpcong 1 10 # show 1 second summaries, 10 times ./tcpcong -L 3000-3006 1 # 1s summaries, local port 3000-3006 ./tcpcong -R 5000-5005 1 # 1s summaries, remote port 5000-5005 ./tcpcong -uT 1 # 1s summaries, microseconds, and timestamps ./tcpcong -d # show the duration as histograms