| 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 |