test patch D49047


tri-point topology testbed config over emulated 1Gbps x 20ms WAN

Two virtual machines (VMs) as traffic senders are hosted by Bhyve in two separate physical boxs (Beelink SER5 AMD Mini PC). The Bhyve hosts are running in FreeBSD 14.2 release OS.

The 1st VM(n1fbsd) generates TCP traffic while the 2nd VM(n2fbsd) generates UDP traffic.

A single traffic receiver is running in Ubuntu Linux 24.04 LTS. The traffic receiver is a physical box (same Beelink box) for the simplicity of a tri-point topology.

The three physical boxes are connected through a 5-Port Gigabit Ethernet Switch (TP-Link TL-SG105). The swich has a shared 1MB Packet Buffer Memory, which is just 40% of the 2.5 Mbytes BDP (1000Mbps x 20ms).

testbed: attachment:tri-point_switch_topology.png

cc@Linux:~ % tc qdisc show dev enp1s0
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64 
cc@Linux:~ % sudo tc qdisc add dev enp1s0 root netem delay 20ms
cc@Linux:~ % tc qdisc show dev enp1s0
qdisc netem 8001: root refcnt 2 limit 1000 delay 20ms
cc@Linux:~ %

root@n1fbsd:~ # ping -c 5 -S n1fbsd Linux
PING Linux (192.168.50.46) from n1fbsdvm: 56 data bytes
64 bytes from 192.168.50.46: icmp_seq=0 ttl=64 time=21.296 ms
64 bytes from 192.168.50.46: icmp_seq=1 ttl=64 time=21.411 ms
64 bytes from 192.168.50.46: icmp_seq=2 ttl=64 time=21.285 ms
64 bytes from 192.168.50.46: icmp_seq=3 ttl=64 time=21.355 ms
64 bytes from 192.168.50.46: icmp_seq=4 ttl=64 time=21.390 ms

--- Linux ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 21.285/21.347/21.411/0.050 ms
root@n1fbsd:~ #

root@n2fbsd:~ # ping -c 5 -S n2fbsd Linux
PING Linux (192.168.50.46) from n2fbsdvm: 56 data bytes
64 bytes from 192.168.50.46: icmp_seq=0 ttl=64 time=21.197 ms
64 bytes from 192.168.50.46: icmp_seq=1 ttl=64 time=21.372 ms
64 bytes from 192.168.50.46: icmp_seq=2 ttl=64 time=21.520 ms
64 bytes from 192.168.50.46: icmp_seq=3 ttl=64 time=21.685 ms
64 bytes from 192.168.50.46: icmp_seq=4 ttl=64 time=21.345 ms

--- Linux ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 21.197/21.424/21.685/0.166 ms
root@n2fbsd:~ #

n1fbsd and n2fbsd: cat /etc/sysctl.conf
...
# Don't cache ssthresh from previous connection
net.inet.tcp.hostcache.enable=0
# In crease FreeBSD maximum socket buffer size up to 5MB
kern.ipc.maxsockbuf=5242880
# Increase FreeBSD Max size of automatic send/receive buffer up to 5MB
net.inet.tcp.sendbuf_max=5242880
net.inet.tcp.recvbuf_max=5242880
root@n1fbsd:~ #

cc@Linux:~$ cat /etc/sysctl.conf
...
# allow testing with 5MB buffers
net.core.rmem_max = 5242880 
net.core.wmem_max = 5242880 
# increase Linux autotuning TCP buffer limit to 5MB
net.ipv4.tcp_rmem = 4096 131072 5242880
net.ipv4.tcp_wmem = 4096 16384 5242880
# don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save = 1
cc@Linux:~$

iperf3 -B n1fbsd --cport 54321 -c Linux -p 5201 -l 1M -t 40 -i 1 -f m -VC cubic
iperf3 -B n2fbsd --cport 54321 -c Linux -p 5202 -t 50 -i 1 -f m --udp -b 200m

test analysis method

I use my siftr2 for pipe study code kernel module to capture TCP stats, and my log tool review_siftr2_log to analyze the data.

The key data to look at are these three values in siftr2.

sent_inflight_bytes = tp->snd_max - tp->snd_una;        // siftr's old code on inflight data (pipe) calculation
def_pipe = tcp_compute_pipe(tp);                        // FreeBSD default stack pipe calculation if V_tcp_do_newsack == 1
old_pipe = tp->snd_max - tp->t_ccv.curack;              // the old FreeBSD default stack pipe calculation if V_tcp_do_newsack == 0 in xx_cc_post_recovery()

test result before patch D49047

   1 int
   2 tcp_compute_pipe(struct tcpcb *tp)
   3 {
   4         if (tp->t_fb->tfb_compute_pipe == NULL) {
   5                 return (tp->snd_max - tp->snd_una +
   6                         tp->sackhint.sack_bytes_rexmit -
   7                         tp->sackhint.sacked_bytes -
   8                         tp->sackhint.lost_bytes);
   9         } else {
  10                 return((*tp->t_fb->tfb_compute_pipe)(tp));
  11         }
  12 }
  13 
  14 static void
  15 cubic_post_recovery(struct cc_var *ccv)
  16 {
  17         struct cubic *cubic_data;
  18         int pipe;
  19         uint32_t mss = tcp_fixed_maxseg(ccv->tp);
  20 
  21         cubic_data = ccv->cc_data;
  22         pipe = 0;
  23 
  24         if (IN_FASTRECOVERY(CCV(ccv, t_flags))) {
  25                 /*
  26                  * If inflight data is less than ssthresh, set cwnd
  27                  * conservatively to avoid a burst of data, as suggested in
  28                  * the NewReno RFC. Otherwise, use the CUBIC method.
  29                  *
  30                  * XXXLAS: Find a way to do this without needing curack
  31                  */
  32                 if (V_tcp_do_newsack)
  33                         pipe = tcp_compute_pipe(ccv->tp);                      << def_pipe
  34                 else
  35                         pipe = CCV(ccv, snd_max) - ccv->curack;                << old_pipe
  36 
  37                 if (pipe < CCV(ccv, snd_ssthresh))
  38                         /*
  39                          * Ensure that cwnd does not collapse to 1 MSS under
  40                          * adverse conditions. Implements RFC6582
  41                          */
  42                         CCV(ccv, snd_cwnd) = max(pipe, mss) + mss;
  43                 else
  44                         /* Update cwnd based on beta and adjusted W_max. */
  45                         CCV(ccv, snd_cwnd) = max(((uint64_t)cubic_data->W_max *
  46                             CUBIC_BETA) >> CUBIC_SHIFT,
  47                             2 * mss);
  48         }
  49 
  50         /* Calculate the average RTT between congestion epochs. */
  51         if (cubic_data->epoch_ack_count > 0 &&
  52             cubic_data->sum_rtt_usecs >= cubic_data->epoch_ack_count) {
  53                 cubic_data->mean_rtt_usecs = (int)(cubic_data->sum_rtt_usecs /
  54                     cubic_data->epoch_ack_count);
  55         }
  56 
  57         cubic_data->epoch_ack_count = 0;
  58         cubic_data->sum_rtt_usecs = 0;
  59 }

##direction     relative_timestamp      cwnd    ssthresh        data_size       inflight_bytes  def_pipe        old_pipe        t_flags
o       0.000000           14480        1073725440         0           0               0        425266961       N/A
o       0.000125           14480        1073725440        37           0               0        425266961       N/A
i       0.020397           14480        1073725440         0          37              37        425266998       N/A             << curack not assigned, so ignore the first 3 lines as the flow is in slow-start phase
o       0.028410           14517        1073725440      1448           0               0               0        N/A
o       0.028479           14517        1073725440      1448        1448            1448            1448        N/A
o       0.028496           14517        1073725440      1448        2896            2896            2896        N/A
o       0.028511           14517        1073725440      1448        4344            4344            4344        N/A
o       0.028553           14517        1073725440      1448        5792            5792            5792        N/A
o       0.028580           14517        1073725440      1448        7240            7240            7240        N/A
o       0.028604           14517        1073725440      1448        8688            8688            8688        N/A
o       0.028629           14517        1073725440      1448       10136           10136           10136        N/A
o       0.028652           14517        1073725440      1448       11584           11584           11584        N/A
o       0.028672           14517        1073725440      1448       13032           13032           13032        N/A
i       0.049146           14517        1073725440         0       14480           14480           14480        N/A             << in slow-start phase, all three pipe values are same
...
o       0.494398          530005        1073725440      1448      528520          528520          528520        N/A
i       0.510055          530005        1073725440         0      529968          529968          529968        N/A
i       0.510090          530005        1073725440         0      529968          528520          529968        N/A
o       0.510113          496664            265002      1448      529968          496664          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | << for the first loss recovery, def_pipe has a decreasing trend while others don't
i       0.510148          265002            265002         0      529968          496664          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.510167          479288            265002         0      529968          485080          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.510179          489424            265002      1448      529968          485080          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.510204          489424            265002      1448      529968          486528          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.510224          489424            265002      1448      529968          487976          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.510242          489424            265002      1448      529968          489424          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.511261          489424            265002         0      529968          489424          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.512392          370688            265002         0      529968          409784          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.513875          309872            265002         0      529968          315664          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.515239          107152            265002         0      529968          157832          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.515284          139008            265002      1448      529968           33304          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.515320          139008            265002      1448      529968           34752          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.515342          139008            265002      1448      529968           36200          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.515360          139008            265002      1448      529968           37648          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.516467          139008            265002         0      529968           37648          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.530711          240368            265002         0      529968           13032          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.530762          263536            265002         0      529968           13032          529968        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.530860          263536            265002         0      528520           11584          528520        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.530920          259192            265002         0      528520           11584          528520        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.535941          259192            265002         0      522728            5792          522728        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.536411            2896            265002      1448           0               0               0        N/A
o       0.536460            2896            265002      1448        1448            1448            1448        N/A
...
i       6.387183          402278            150592         0      401096          401096          401096        N/A
o       6.387206          330144            199824      1448      401096          330144          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.387455          199824            199824         0      401096          330144          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.404650          304080            199824         0      401096          312768          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.405692          291048            199824         0      401096          292496          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.406971          102808            199824         0      401096          195480          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       6.406997           72400            199824      1448      401096           69504          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       6.407016           72400            199824      1448      401096           70952          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       6.407022           72400            199824      1448      401096           72400          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.407563           72400            199824         0      401096           72400          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       6.407578          131768            199824      1448      401096            7240          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.427665          131768            199824         0      399648            5792          399648        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       6.427774          195480            199824         0      399648            5792          399648        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       6.428163          195480            199824         0      395304            1448          395304        TF_FASTRECOVERY | TF_CONGRECOVERY | << same here in later loss recovery
...

Raw data files: iperf3 output siftr2 log siftr2 log analysis result

TCP CUBIC congestion window chart: attachment:base_newsack1_cwnd_chart.png

##direction     relative_timestamp      cwnd    ssthresh        data_size       inflight_bytes  def_pipe        old_pipe        t_flags
...
i       0.383445          392445        1073725440         0      401096          373584          401096        N/A
o       0.383477          367792            196222      1448      401096          367792          401096        TF_FASTRECOVERY | TF_CONGRECOVERY |  << first loss recovery after slow-start
i       0.383533          196222            196222         0      401096          367792          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.384274          359104            196222         0      401096          362000          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.385659          266432            196222         0      401096          296840          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.387024           88328            196222         0      401096          189688          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.387116           53576            196222      1448      401096           49232          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.387170           53576            196222      1448      401096           50680          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.387187           53576            196222      1448      401096           52128          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.387201           53576            196222      1448      401096           53576          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.388538           53576            196222         0      401096           53576          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.388557          149144            196222      1448      401096            8688          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.388575          149144            196222      1448      401096           10136          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.388581          149144            196222      1448      401096           11584          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.388585          149144            196222      1448      401096           13032          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.404117          149144            196222         0      401096           13032          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.404157          194032            196222         0      401096           13032          401096        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.407996          194032            196222         0      399648           11584          399648        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.408037          189688            196222         0      399648           11584          399648        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.409044          189688            196222         0      393856            5792          393856        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.409101          191136            196222         0      393856            5792          393856        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.409226          191136            196222         0      389512            1448          389512        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.409654            2896            196222      1448           0               0               0        N/A
o       0.409667            2896            196222      1448        1448            1448            1448        N/A
...
o       8.172252          709520            196222      1448      725448          705176          725448        N/A
i       8.172537          709520            196222         0      726896          706624          726896        N/A
o       8.172546          679112            354760      1448      726896          679112          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.173112          354760            354760         0      726896          679112          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.174432          626984            354760         0      726896          644360          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.176589          586440            354760         0      726896          595128          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       8.176601          603816            354760      1448      726896          574856          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.178586          603816            354760         0      726896          574856          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.179820          580648            354760         0      726896          545896          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.181222          474944            354760         0      726896          456120          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.182614          501008            354760         0      726896          414128          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.183763          266432            354760         0      726896          325800          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.191412          333040            354760         0      726896          304080          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.192842          205616            354760         0      726896          154936          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       8.192854          201272            354760         0      726896            2896          726896        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       8.197127          201272            354760         0      725448            1448          725448        TF_FASTRECOVERY | TF_CONGRECOVERY | << but I don't see much impact of the old_pipe to cwnd here because the old_pipe > ssthresh
o       8.197670            2896            354760      1448           0               0               0        N/A
o       8.197720            2896            354760      1448        1448            1448            1448        N/A
i       8.218422            2896            354760         0        2896            2896            2896        N/A
...
o       27.155659         343176            348968      1448      340280          317112          340280        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       27.155667         343176            348968      1448      341728          318560          341728        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       27.169991         343176            348968         0      343176          320008          343176        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       27.170070         317112            348968      1448      315664          315664          315664        N/A                                 << when old_pipe < ssthresh, cwnd is old_pipe+mss
i       27.174263         317112            348968         0      317112          317112          317112        N/A

Raw data files: base_newsackoff iperf3 output base_newsackoff siftr2 log base_newsackoff siftr2 log analysis result

TCP CUBIC congestion window chart: attachment:base_newsack0_cwnd_chart.png

test result after patch D49047

   1 int
   2 tcp_compute_pipe(struct tcpcb *tp)
   3 {
   4         int pipe;
   5 
   6         if (tp->t_fb->tfb_compute_pipe != NULL) {
   7                 pipe = (*tp->t_fb->tfb_compute_pipe)(tp);
   8         } else if (V_tcp_do_newsack) {
   9                 pipe = tp->snd_max - tp->snd_una +                                    << def_pipe with V_tcp_do_newsack == 1
  10                         tp->sackhint.sack_bytes_rexmit -
  11                         tp->sackhint.sacked_bytes -
  12                         tp->sackhint.lost_bytes;
  13         } else {
  14                 pipe = tp->snd_nxt - tp->snd_fack + tp->sackhint.sack_bytes_rexmit;
  15         }
  16         return (imax(pipe, 0));
  17 }

##direction     relative_timestamp      cwnd    ssthresh        data_size       inflight_bytes  def_pipe        old_pipe        t_flags
...
o       0.558271          425749        1073725440      1448      424264          424264          424264        N/A
i       0.558275          425749        1073725440         0      425712          425712          425712        N/A
o       0.558302          405440            212874      1448      425712          405440          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | << first loss recovery after slow-start
i       0.558313          212874            212874         0      425712          405440          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.575032          399648            212874         0      425712          401096          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.575802          344624            212874         0      425712          362000          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.575819          356208            212874      1448      425712          344624          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.575836          356208            212874      1448      425712          346072          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.575841          356208            212874      1448      425712          347520          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.575845          356208            212874      1448      425712          348968          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.577197          356208            212874         0      425712          348968          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.579360           75296            212874         0      425712          211408          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.579407           47784            212874         0      425712           46336          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.579429          178104            212874      1448      425712            8688          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.579470          178104            212874      1448      425712           10136          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.579481          178104            212874      1448      425712           11584          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.579492          178104            212874      1448      425712           13032          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.596516          178104            212874         0      424264           11584          424264        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.596569          587888            212874      1448      424264          402544          424264        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.596641          587888            212874      1448      425712          403992          425712        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.596656          587888            212874      1448      427160          405440          427160        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.596669          587888            212874      1448      428608          406888          428608        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.596704          587888            212874      1448      430056          408336          430056        TF_FASTRECOVERY | TF_CONGRECOVERY | 
...
o       3.242194          301313            107152      1448      299736          299736          299736        N/A
i       3.258996          301313            107152         0      301184          301184          301184        N/A
o       3.259050          288152            150592      1448      301184          288152          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.259128          150592            150592         0      301184          288152          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.259157          266432            150592         0      301184          273672          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       3.259182          276568            150592      1448      301184          272224          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       3.259220          276568            150592      1448      301184          273672          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       3.259235          276568            150592      1448      301184          275120          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       3.259247          276568            150592      1448      301184          276568          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.260378          276568            150592         0      301184          276568          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.262178          250504            150592         0      301184          257744          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.263948            1448            150592         0      301184           99912          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.280018           57920            150592         0      301184            7240          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       3.280058          149144            150592         0      301184            7240          301184        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       3.280158          149144            150592         0      299736            5792          299736        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       3.281027            2896            150592      1448           0               0               0        N/A
o       3.281041            2896            150592      1448        1448            1448            1448        N/A
i       3.301704            2896            150592         0        2896            2896            2896        N/A
...
i       5.096083          317241            150592         0      317112          315664          317112        N/A
i       5.096107          317241            150592         0      317112          314216          317112        N/A
o       5.096130          312768            157832      1448      317112          312768          317112        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       5.096784          157832            157832         0      317112          312768          317112        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       5.097917          221544            157832         0      317112          251952          317112        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       5.099790           20272            157832         0      317112          114392          317112        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       5.116968           44888            157832         0      317112            1448          317112        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       5.117695            2896            157832      1448           0               0               0        N/A
o       5.117722            2896            157832      1448        1448            1448            1448        N/A
i       5.138282            2896            157832         0        2896            2896            2896        N/A
...

Raw data files: patched_newsackon iperf3 output patched_newsackon siftr2 log patched_newsackon siftr2 log analysis result

TCP CUBIC congestion window chart: attachment:patched_newsack1_cwnd_chart.png

old_pipe = pipe = CCV(ccv, snd_max) - ccv->curack;

##direction     relative_timestamp      cwnd    ssthresh        data_size       inflight_bytes  def_pipe        old_pipe        t_flags
...
o       0.473233          393893        1073725440      1448      390960               0          390960        N/A
o       0.473241          393893        1073725440      1448      392408               0          392408        N/A
i       0.473250          393893        1073725440         0      393856               0          393856        N/A
o       0.473259          363448            196946      1448      393856          363448          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | << before the fist loss recovery, def_pipe is 0
o       0.473269          351864            196946         0      393856          363448          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.473354          351864            196946         0      392408          363448          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.473371          360552            196946      1448      392408          354760          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.473387          360552            196946      1448      392408          356208          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.473398          360552            196946      1448      392408          357656          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.473407          360552            196946      1448      392408          359104          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.490885          360552            196946         0      392408          359104          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.490923          359104            196946         0      392408          351864          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.491602          356208            196946         0      392408          344624          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.493306          263536            196946         0      392408          278016          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.494132           63712            196946         0      392408          144800          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.494157           57920            196946         0      392408            5792          392408        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       0.494413           57920            196946         0      390960            5792          390960        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       0.494646            2896            196946      1448           0               0               0        N/A
o       0.494681            2896            196946      1448        1448            1448            1448        N/A
i       0.515166            2896            196946         0        2896            2896            2896        N/A
...
i       4.253925          309872            165072         0      309872          289600          309872        N/A
o       4.253977          254848            154936      1448      309872          254848          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | << with V_tcp_do_newsack == 0, the def_pipe is also conservative
i       4.255817          154936            154936         0      309872          254848          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       4.256935           13032            154936         0      309872          112944          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       4.256978           43440            154936      1448      309872            2896          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       4.257023           43440            154936      1448      309872            4344          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       4.257038           43440            154936      1448      309872            5792          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       4.257048           43440            154936      1448      309872            7240          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       4.274566           43440            154936         0      309872            7240          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       4.274604          153488            154936         0      309872            5792          309872        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       4.277550          153488            154936         0      308424            5792          308424        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       4.277807            2896            154936      1448           0               0               0        N/A
o       4.277857            2896            154936      1448        1448            1448            1448        N/A
...
o       7.950245          340280            207064      1448      438744          340280          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       7.969163          207064            207064         0      438744          340280          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       7.969772          152040            207064         0      438744          217200          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       7.970823           94120            207064         0      438744          104256          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       7.970837          102808            207064      1448      438744            1448          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       7.970855          102808            207064      1448      438744            2896          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       7.970865          102808            207064      1448      438744            4344          438744        TF_FASTRECOVERY | TF_CONGRECOVERY | 
i       7.991343          102808            207064         0      437296            4344          437296        TF_FASTRECOVERY | TF_CONGRECOVERY | 
o       7.991729            2896            207064      1448           0               0               0        N/A
o       7.991782            2896            207064      1448        1448            1448            1448        N/A
i       8.012280            2896            207064         0        2896            2896            2896        N/A
...

Raw data files: patched_newsackoff iperf3 output patched_newsackoff siftr2 log patched_newsackoff siftr2 log analysis result

TCP CUBIC congestion window chart: attachment:patched_newsack0_cwnd_chart.png

chengcui/testD49047 (last edited 2025-03-02T18:47:31+0000 by chengcui)