diff --git a/agent/resources/test/flow_generator/report.result b/agent/resources/test/flow_generator/report.result index 59f424a79f5..8e5e0828b73 100644 --- a/agent/resources/test/flow_generator/report.result +++ b/agent/resources/test/flow_generator/report.result @@ -246,18 +246,18 @@ TcpPerfStats { rtt_server_max: 0, srt_max: 10040, art_max: 30358, - cit_max: 0, + cit_max: 15033, rtt: 0, rtt_client_sum: 0, rtt_server_sum: 0, srt_sum: 10040, art_sum: 30358, - cit_sum: 0, + cit_sum: 15033, rtt_client_count: 0, rtt_server_count: 0, srt_count: 1, art_count: 1, - cit_count: 0, + cit_count: 1, syn_count: 0, synack_count: 0, retrans_syn_count: 0, @@ -380,19 +380,19 @@ TcpPerfStats { } report after last packet: TcpPerfStats { - rtt_client_max: 20322, - rtt_server_max: 10226, + rtt_client_max: 0, + rtt_server_max: 0, srt_max: 10040, art_max: 30358, cit_max: 15033, rtt: 0, - rtt_client_sum: 20322, - rtt_server_sum: 10226, + rtt_client_sum: 0, + rtt_server_sum: 0, srt_sum: 10040, art_sum: 30358, cit_sum: 15033, - rtt_client_count: 1, - rtt_server_count: 1, + rtt_client_count: 0, + rtt_server_count: 0, srt_count: 1, art_count: 1, cit_count: 1, @@ -450,18 +450,18 @@ TcpPerfStats { report after last packet: TcpPerfStats { rtt_client_max: 0, - rtt_server_max: 10226, + rtt_server_max: 0, srt_max: 10040, art_max: 30358, cit_max: 35355, rtt: 0, rtt_client_sum: 0, - rtt_server_sum: 10226, + rtt_server_sum: 0, srt_sum: 10040, art_sum: 30358, cit_sum: 35355, rtt_client_count: 0, - rtt_server_count: 1, + rtt_server_count: 0, srt_count: 1, art_count: 1, cit_count: 1, diff --git a/agent/resources/test/flow_generator/rtt-full.result b/agent/resources/test/flow_generator/rtt-full.result index 18431f0b002..39aef72ec3c 100644 --- a/agent/resources/test/flow_generator/rtt-full.result +++ b/agent/resources/test/flow_generator/rtt-full.result @@ -181,9 +181,9 @@ PerfData { 3th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -223,7 +223,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -241,9 +241,9 @@ PerfData { 4th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -283,7 +283,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -301,9 +301,9 @@ PerfData { 5th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -343,7 +343,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -361,9 +361,9 @@ PerfData { 6th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -403,7 +403,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -601,9 +601,9 @@ PerfData { 3th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -643,7 +643,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -661,9 +661,9 @@ PerfData { 4th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -703,7 +703,7 @@ PerfData { updated: true, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -721,9 +721,9 @@ PerfData { 5th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -763,7 +763,7 @@ PerfData { updated: true, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -781,9 +781,9 @@ PerfData { 6th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -823,7 +823,7 @@ PerfData { updated: true, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -841,9 +841,9 @@ PerfData { 7th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -883,7 +883,7 @@ PerfData { updated: true, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -901,9 +901,9 @@ PerfData { 8th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -943,7 +943,7 @@ PerfData { updated: true, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -961,9 +961,9 @@ PerfData { 9th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 74µs, - max: 74µs, + count: 2, + sum: 454.813ms, + max: 454.739ms, updated: true, }, rtt_1: TimeStats { @@ -1003,7 +1003,7 @@ PerfData { updated: true, }, retrans_sum: 0, - rtt_full: 825µs, + rtt_full: 455.49ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -1148,8 +1148,8 @@ PerfData { }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1208,8 +1208,8 @@ PerfData { }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1261,15 +1261,15 @@ PerfData { 4th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1303,7 +1303,7 @@ PerfData { updated: false, }, retrans_sum: 1, - rtt_full: 325.4ms, + rtt_full: 625.4ms, retrans_0: 1, retrans_1: 0, retrans_syn_0: 1, @@ -1321,15 +1321,15 @@ PerfData { 5th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1363,7 +1363,7 @@ PerfData { updated: false, }, retrans_sum: 1, - rtt_full: 325.4ms, + rtt_full: 625.4ms, retrans_0: 1, retrans_1: 0, retrans_syn_0: 1, @@ -1381,15 +1381,15 @@ PerfData { 6th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1423,7 +1423,7 @@ PerfData { updated: false, }, retrans_sum: 1, - rtt_full: 325.4ms, + rtt_full: 625.4ms, retrans_0: 1, retrans_1: 0, retrans_syn_0: 1, @@ -1441,15 +1441,15 @@ PerfData { 7th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1483,7 +1483,7 @@ PerfData { updated: false, }, retrans_sum: 1, - rtt_full: 325.4ms, + rtt_full: 625.4ms, retrans_0: 1, retrans_1: 0, retrans_syn_0: 1, @@ -1628,8 +1628,8 @@ PerfData { }, rtt_1: TimeStats { count: 1, - sum: 216.3ms, - max: 216.3ms, + sum: 316.3ms, + max: 316.3ms, updated: true, }, art_0: TimeStats { @@ -1687,9 +1687,9 @@ PerfData { updated: false, }, rtt_1: TimeStats { - count: 1, - sum: 216.3ms, - max: 216.3ms, + count: 2, + sum: 848.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -1742,14 +1742,14 @@ PerfData { PerfData { rtt_0: TimeStats { count: 1, - sum: 9.1ms, - max: 9.1ms, + sum: 225.4ms, + max: 225.4ms, updated: true, }, rtt_1: TimeStats { - count: 1, - sum: 216.3ms, - max: 216.3ms, + count: 2, + sum: 848.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -1801,15 +1801,15 @@ PerfData { 5th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 750.8ms, + max: 525.4ms, updated: true, }, rtt_1: TimeStats { - count: 1, - sum: 216.3ms, - max: 216.3ms, + count: 2, + sum: 848.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -1843,7 +1843,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -1861,15 +1861,15 @@ PerfData { 6th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 750.8ms, + max: 525.4ms, updated: true, }, rtt_1: TimeStats { - count: 1, - sum: 216.3ms, - max: 216.3ms, + count: 2, + sum: 848.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -1903,7 +1903,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -1921,15 +1921,15 @@ PerfData { 7th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 750.8ms, + max: 525.4ms, updated: true, }, rtt_1: TimeStats { - count: 1, - sum: 216.3ms, - max: 216.3ms, + count: 2, + sum: 848.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -1963,7 +1963,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -1981,15 +1981,15 @@ PerfData { 8th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 750.8ms, + max: 525.4ms, updated: true, }, rtt_1: TimeStats { - count: 1, - sum: 216.3ms, - max: 216.3ms, + count: 2, + sum: 848.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2023,7 +2023,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -2228,8 +2228,8 @@ PerfData { }, rtt_1: TimeStats { count: 2, - sum: 432.6ms, - max: 216.3ms, + sum: 748.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2282,14 +2282,14 @@ PerfData { PerfData { rtt_0: TimeStats { count: 1, - sum: 9.1ms, - max: 9.1ms, + sum: 325.4ms, + max: 325.4ms, updated: true, }, rtt_1: TimeStats { count: 2, - sum: 432.6ms, - max: 216.3ms, + sum: 748.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2341,15 +2341,15 @@ PerfData { 5th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 950.8ms, + max: 625.4ms, updated: true, }, rtt_1: TimeStats { count: 2, - sum: 432.6ms, - max: 216.3ms, + sum: 748.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2383,7 +2383,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -2401,15 +2401,15 @@ PerfData { 6th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 950.8ms, + max: 625.4ms, updated: true, }, rtt_1: TimeStats { count: 2, - sum: 432.6ms, - max: 216.3ms, + sum: 748.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2443,7 +2443,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -2461,15 +2461,15 @@ PerfData { 7th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 950.8ms, + max: 625.4ms, updated: true, }, rtt_1: TimeStats { count: 2, - sum: 432.6ms, - max: 216.3ms, + sum: 748.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2503,7 +2503,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -2521,15 +2521,15 @@ PerfData { 8th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 950.8ms, + max: 625.4ms, updated: true, }, rtt_1: TimeStats { count: 2, - sum: 432.6ms, - max: 216.3ms, + sum: 748.9ms, + max: 532.6ms, updated: true, }, art_0: TimeStats { @@ -2563,7 +2563,7 @@ PerfData { updated: false, }, retrans_sum: 2, - rtt_full: 541.7ms, + rtt_full: 841.7ms, retrans_0: 1, retrans_1: 1, retrans_syn_0: 1, @@ -3259,10 +3259,10 @@ PerfData { updated: false, }, art_1: TimeStats { - count: 0, - sum: 0ns, - max: 0ns, - updated: false, + count: 1, + sum: 990µs, + max: 990µs, + updated: true, }, srt_0: TimeStats { count: 0, @@ -3319,17 +3319,17 @@ PerfData { updated: false, }, art_1: TimeStats { + count: 1, + sum: 990µs, + max: 990µs, + updated: true, + }, + srt_0: TimeStats { count: 0, sum: 0ns, max: 0ns, updated: false, }, - srt_0: TimeStats { - count: 1, - sum: 9µs, - max: 9µs, - updated: true, - }, srt_1: TimeStats { count: 0, sum: 0ns, @@ -3379,17 +3379,17 @@ PerfData { updated: false, }, art_1: TimeStats { + count: 1, + sum: 990µs, + max: 990µs, + updated: true, + }, + srt_0: TimeStats { count: 0, sum: 0ns, max: 0ns, updated: false, }, - srt_0: TimeStats { - count: 1, - sum: 9µs, - max: 9µs, - updated: true, - }, srt_1: TimeStats { count: 0, sum: 0ns, @@ -3439,17 +3439,17 @@ PerfData { updated: false, }, art_1: TimeStats { + count: 1, + sum: 990µs, + max: 990µs, + updated: true, + }, + srt_0: TimeStats { count: 0, sum: 0ns, max: 0ns, updated: false, }, - srt_0: TimeStats { - count: 1, - sum: 9µs, - max: 9µs, - updated: true, - }, srt_1: TimeStats { count: 0, sum: 0ns, @@ -3499,17 +3499,17 @@ PerfData { updated: false, }, art_1: TimeStats { + count: 1, + sum: 990µs, + max: 990µs, + updated: true, + }, + srt_0: TimeStats { count: 0, sum: 0ns, max: 0ns, updated: false, }, - srt_0: TimeStats { - count: 1, - sum: 9µs, - max: 9µs, - updated: true, - }, srt_1: TimeStats { count: 0, sum: 0ns, @@ -3559,17 +3559,17 @@ PerfData { updated: false, }, art_1: TimeStats { + count: 1, + sum: 990µs, + max: 990µs, + updated: true, + }, + srt_0: TimeStats { count: 0, sum: 0ns, max: 0ns, updated: false, }, - srt_0: TimeStats { - count: 1, - sum: 9µs, - max: 9µs, - updated: true, - }, srt_1: TimeStats { count: 0, sum: 0ns, diff --git a/agent/resources/test/flow_generator/rtt-syn.result b/agent/resources/test/flow_generator/rtt-syn.result index a8759b46bd4..fa030f3ff73 100644 --- a/agent/resources/test/flow_generator/rtt-syn.result +++ b/agent/resources/test/flow_generator/rtt-syn.result @@ -181,9 +181,9 @@ PerfData { 3th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -223,7 +223,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -241,9 +241,9 @@ PerfData { 4th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -283,7 +283,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -301,9 +301,9 @@ PerfData { 5th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -343,7 +343,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -361,9 +361,9 @@ PerfData { 6th perf data: PerfData { rtt_0: TimeStats { - count: 1, - sum: 9.1ms, - max: 9.1ms, + count: 2, + sum: 318.2ms, + max: 309.1ms, updated: true, }, rtt_1: TimeStats { @@ -403,7 +403,7 @@ PerfData { updated: false, }, retrans_sum: 0, - rtt_full: 225.4ms, + rtt_full: 525.4ms, retrans_0: 0, retrans_1: 0, retrans_syn_0: 0, @@ -1057,8 +1057,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, @@ -1117,8 +1117,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, @@ -1165,10 +1165,10 @@ PerfData { updated: true, }, srt_0: TimeStats { - count: 1, - sum: 182µs, - max: 182µs, - updated: true, + count: 0, + sum: 0ns, + max: 0ns, + updated: false, }, srt_1: TimeStats { count: 0, @@ -1177,8 +1177,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, @@ -1225,10 +1225,10 @@ PerfData { updated: true, }, srt_0: TimeStats { - count: 1, - sum: 182µs, - max: 182µs, - updated: true, + count: 0, + sum: 0ns, + max: 0ns, + updated: false, }, srt_1: TimeStats { count: 0, @@ -1237,8 +1237,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, @@ -1285,10 +1285,10 @@ PerfData { updated: true, }, srt_0: TimeStats { - count: 1, - sum: 182µs, - max: 182µs, - updated: true, + count: 0, + sum: 0ns, + max: 0ns, + updated: false, }, srt_1: TimeStats { count: 0, @@ -1297,8 +1297,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, @@ -1345,10 +1345,10 @@ PerfData { updated: true, }, srt_0: TimeStats { - count: 1, - sum: 182µs, - max: 182µs, - updated: true, + count: 0, + sum: 0ns, + max: 0ns, + updated: false, }, srt_1: TimeStats { count: 0, @@ -1357,8 +1357,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, @@ -1405,10 +1405,10 @@ PerfData { updated: true, }, srt_0: TimeStats { - count: 1, - sum: 182µs, - max: 182µs, - updated: true, + count: 0, + sum: 0ns, + max: 0ns, + updated: false, }, srt_1: TimeStats { count: 0, @@ -1417,8 +1417,8 @@ PerfData { updated: false, }, cit: TimeStats { - count: 1, - sum: 10.141ms, + count: 2, + sum: 20.282ms, max: 10.141ms, updated: true, }, diff --git a/agent/src/flow_generator/perf/tcp.rs b/agent/src/flow_generator/perf/tcp.rs index b5f99a9e8a2..96586668e24 100644 --- a/agent/src/flow_generator/perf/tcp.rs +++ b/agent/src/flow_generator/perf/tcp.rs @@ -665,6 +665,9 @@ impl TcpPerf { } if p.is_ack() { + // The first ACK packet sent by the server after handshake does not calculate rtt. + self.handshaking = fpd; + // It is impossible to distinguish retransmission between ACK and ACK // keepalive. To avoid misunderstanding, retransmission of pure ACK // ================================================================== @@ -761,6 +764,7 @@ impl TcpPerf { (p.lookup_key.timestamp - oppo_dir.first_handshake_timestamp).into(), RTT_MAX, ); + if !rtt.is_zero() { self.perf_data.calc_rtt(rtt, fpd); } @@ -1189,6 +1193,7 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { */ // 1SYN let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::SYN, seq: 111, ack: 0, @@ -1196,10 +1201,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, false).unwrap(); + perf.parse(&packet, true).unwrap(); // 2SYN/ACK rttSum1=1 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::SYN_ACK, seq: 1111, ack: 112, @@ -1207,10 +1213,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, true).unwrap(); + perf.parse(&packet, false).unwrap(); // 1ACK rttSum0=10 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 112, ack: 1112, @@ -1218,10 +1225,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, false).unwrap(); + perf.parse(&packet, true).unwrap(); // 1ACK/LEN>0 len=100 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 112, ack: 1112, @@ -1230,10 +1238,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, false).unwrap(); + perf.parse(&packet, true).unwrap(); // 2ACK/LEN>0包,len=100 *art1=4 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 1112, ack: 212, @@ -1242,10 +1251,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, true).unwrap(); + perf.parse(&packet, false).unwrap(); // 2ACK 测试连续ACK包, 对RTT计算的影响 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 1112, ack: 212, @@ -1253,10 +1263,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, true).unwrap(); + perf.parse(&packet, false).unwrap(); // 2ACK/LEN>0 len=500 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::PSH_ACK, seq: 1212, ack: 212, @@ -1265,10 +1276,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, true).unwrap(); + perf.parse(&packet, false).unwrap(); // 1ACK srt0=16 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 212, ack: 1712, @@ -1276,10 +1288,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, false).unwrap(); + perf.parse(&packet, true).unwrap(); // 1ACK/LEN>0 len=200 art0=70 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 212, ack: 1712, @@ -1288,10 +1301,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, false).unwrap(); + perf.parse(&packet, true).unwrap(); // 2ACK *srt1=100 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 1712, ack: 412, @@ -1299,10 +1313,11 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, true).unwrap(); + perf.parse(&packet, false).unwrap(); // 2ACK/LEN>0 len=300 *art1=106 let packet = MiniMetaPacket { + data_offset: 20, flags: TcpFlags::ACK, seq: 1712, ack: 412, @@ -1311,7 +1326,7 @@ pub fn _meta_flow_perf_update(perf: &mut TcpPerf) { ..Default::default() } .into(); - perf.parse(&packet, true).unwrap(); + perf.parse(&packet, false).unwrap(); } #[cfg(test)] @@ -1839,47 +1854,31 @@ mod tests { assert!(!perf.is_interested_packet(&packet)); } - // TODO: fix this broken test (also fails in go code) #[test] - #[should_panic] fn meta_flow_perf_update() { let mut perf = TcpPerf::new(Arc::new(FlowPerfCounter::default())); _meta_flow_perf_update(&mut perf); let perf_data = PerfData { rtt_0: TimeStats { - sum: Timestamp::from_nanos(10), - max: Timestamp::from_nanos(2), - updated: true, - ..Default::default() - }, - rtt_1: TimeStats { - sum: Timestamp::from_nanos(1), - max: Timestamp::from_nanos(1), - updated: true, - ..Default::default() - }, - art_0: TimeStats { - sum: Timestamp::from_nanos(70), - max: Timestamp::from_nanos(70), count: 1, + sum: Timestamp::from_secs(10), + max: Timestamp::from_secs(10), updated: true, ..Default::default() }, - srt_0: TimeStats { - sum: Timestamp::from_nanos(16), - max: Timestamp::from_nanos(16), - count: 2, - updated: true, - ..Default::default() - }, - srt_1: TimeStats { + rtt_1: TimeStats { count: 1, + sum: Timestamp::from_secs(1), + max: Timestamp::from_secs(1), updated: true, ..Default::default() }, - zero_win_count_0: 3, + rtt_full: Timestamp::from_secs(11), + zero_win_count_0: 2, zero_win_count_1: 5, + syn: 1, + synack: 1, updated: true, ..Default::default() }; @@ -1929,6 +1928,172 @@ mod tests { } } + #[test] + fn test_handshake_double_ack() { + let mut perf = TcpPerf::new(Arc::new(FlowPerfCounter::default())); + + // SYN + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::SYN, + seq: 111, + ack: 0, + timestamp: 3333, + ..Default::default() + } + .into(); + perf.parse(&packet, true).unwrap(); + + // SYN/ACK + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::SYN_ACK, + seq: 1111, + ack: 112, + timestamp: 3334, + ..Default::default() + } + .into(); + perf.parse(&packet, false).unwrap(); + + // ACK c2s + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::ACK, + seq: 112, + ack: 1112, + timestamp: 3344, + ..Default::default() + } + .into(); + perf.parse(&packet, true).unwrap(); + + // ACK c2s + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::ACK, + seq: 112, + ack: 1112, + timestamp: 3354, + ..Default::default() + } + .into(); + perf.parse(&packet, true).unwrap(); + + println!("perf: {:?}", &perf.perf_data); + assert_eq!( + perf.perf_data.rtt_0.count, 2, + "rtt_0: {:?}", + perf.perf_data.rtt_0 + ); + assert_eq!( + perf.perf_data.rtt_0.max.as_secs(), + 20, + "rtt_0: {:?}", + perf.perf_data.rtt_0 + ); + assert_eq!( + perf.perf_data.rtt_1.count, 1, + "rtt_1: {:?}", + perf.perf_data.rtt_1 + ); + assert_eq!( + perf.perf_data.rtt_1.max.as_secs(), + 1, + "rtt_1: {:?}", + perf.perf_data.rtt_1 + ); + assert_eq!( + perf.perf_data.rtt_full.as_secs(), + 21, + "rtt_full: {:?}", + perf.perf_data.rtt_full + ); + } + + #[test] + fn test_handshake_no_push() { + let mut perf = TcpPerf::new(Arc::new(FlowPerfCounter::default())); + + // SYN + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::SYN, + seq: 111, + ack: 0, + timestamp: 3333, + ..Default::default() + } + .into(); + perf.parse(&packet, true).unwrap(); + + // SYN/ACK + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::SYN_ACK, + seq: 1111, + ack: 112, + timestamp: 3334, + ..Default::default() + } + .into(); + perf.parse(&packet, false).unwrap(); + + // ACK c2s + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::ACK, + seq: 112, + ack: 1112, + timestamp: 3344, + ..Default::default() + } + .into(); + perf.parse(&packet, true).unwrap(); + + // ACK s2c + let packet = MiniMetaPacket { + data_offset: 20, + flags: TcpFlags::ACK, + seq: 1111, + ack: 112, + timestamp: 3354, + ..Default::default() + } + .into(); + perf.parse(&packet, false).unwrap(); + + println!("perf: {:?}", &perf.perf_data); + assert_eq!( + perf.perf_data.rtt_0.count, 1, + "rtt_0: {:?}", + perf.perf_data.rtt_0 + ); + assert_eq!( + perf.perf_data.rtt_0.max.as_secs(), + 10, + "rtt_0: {:?}", + perf.perf_data.rtt_0 + ); + assert_eq!( + perf.perf_data.rtt_1.count, 1, + "rtt_1: {:?}", + perf.perf_data.rtt_1 + ); + assert_eq!( + perf.perf_data.rtt_1.max.as_secs(), + 1, + "rtt_1: {:?}", + perf.perf_data.rtt_1 + ); + assert_eq!( + perf.perf_data.rtt_full.as_secs(), + 11, + "rtt_full: {:?}", + perf.perf_data.rtt_full + ); + } + fn update_test_helper>(file: P, check_seq_list: bool) -> String { let mut output = String::new();