Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(842)

Side by Side Diff: net/quic/core/congestion_control/bbr_sender_test.cc

Issue 2823083004: Base QUIC BBR's CWND on SRTT instead of min_rtt. Protected by FLAGS_quic_reloadable_flag_quic_base… (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/congestion_control/bbr_sender.cc ('k') | net/quic/core/quic_flags_list.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/core/congestion_control/bbr_sender.h" 5 #include "net/quic/core/congestion_control/bbr_sender.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 "BBR sender", 83 "BBR sender",
84 Perspective::IS_SERVER, 84 Perspective::IS_SERVER,
85 /*connection_id=*/GetPeerInMemoryConnectionId(42)), 85 /*connection_id=*/GetPeerInMemoryConnectionId(42)),
86 competing_receiver_(&simulator_, 86 competing_receiver_(&simulator_,
87 "Competing receiver", 87 "Competing receiver",
88 "Competing sender", 88 "Competing sender",
89 Perspective::IS_SERVER, 89 Perspective::IS_SERVER,
90 /*connection_id=*/GetPeerInMemoryConnectionId(43)), 90 /*connection_id=*/GetPeerInMemoryConnectionId(43)),
91 receiver_multiplexer_("Receiver multiplexer", 91 receiver_multiplexer_("Receiver multiplexer",
92 {&receiver_, &competing_receiver_}) { 92 {&receiver_, &competing_receiver_}) {
93 // TODO(ianswett): Determine why tests become flaky with CWND based on SRTT.
94 FLAGS_quic_reloadable_flag_quic_bbr_base_cwnd_on_srtt = false;
93 rtt_stats_ = bbr_sender_.connection()->sent_packet_manager().GetRttStats(); 95 rtt_stats_ = bbr_sender_.connection()->sent_packet_manager().GetRttStats();
94 sender_ = SetupBbrSender(&bbr_sender_); 96 sender_ = SetupBbrSender(&bbr_sender_);
95 97
96 clock_ = simulator_.GetClock(); 98 clock_ = simulator_.GetClock();
97 simulator_.set_random_generator(&random_); 99 simulator_.set_random_generator(&random_);
98 100
99 uint64_t seed = QuicRandom::GetInstance()->RandUint64(); 101 uint64_t seed = QuicRandom::GetInstance()->RandUint64();
100 random_.set_seed(seed); 102 random_.set_seed(seed);
101 QUIC_LOG(INFO) << "BbrSenderTest simulator set up. Seed: " << seed; 103 QUIC_LOG(INFO) << "BbrSenderTest simulator set up. Seed: " << seed;
102 } 104 }
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 FLAGS_quic_reloadable_flag_quic_bbr_add_tso_cwnd = false; 351 FLAGS_quic_reloadable_flag_quic_bbr_add_tso_cwnd = false;
350 FLAGS_quic_reloadable_flag_quic_bbr_keep_sending_at_recent_rate = true; 352 FLAGS_quic_reloadable_flag_quic_bbr_keep_sending_at_recent_rate = true;
351 CreateDefaultSetup(); 353 CreateDefaultSetup();
352 // 2 RTTs of aggregation, with a max of 10kb. 354 // 2 RTTs of aggregation, with a max of 10kb.
353 EnableAggregation(10 * 1024, 2 * kTestRtt); 355 EnableAggregation(10 * 1024, 2 * kTestRtt);
354 356
355 // Transfer 12MB. 357 // Transfer 12MB.
356 DoSimpleTransfer(12 * 1024 * 1024, QuicTime::Delta::FromSeconds(35)); 358 DoSimpleTransfer(12 * 1024 * 1024, QuicTime::Delta::FromSeconds(35));
357 EXPECT_EQ(BbrSender::PROBE_BW, sender_->ExportDebugState().mode); 359 EXPECT_EQ(BbrSender::PROBE_BW, sender_->ExportDebugState().mode);
358 // It's possible to read a bandwidth as much as 50% too high with aggregation. 360 // It's possible to read a bandwidth as much as 50% too high with aggregation.
359 EXPECT_LE(kTestLinkBandwidth * 0.99f, 361 EXPECT_LE(kTestLinkBandwidth * 0.95f,
360 sender_->ExportDebugState().max_bandwidth); 362 sender_->ExportDebugState().max_bandwidth);
361 // TODO(ianswett): Tighten this bound once we understand why BBR is 363 // TODO(ianswett): Tighten this bound once we understand why BBR is
362 // overestimating bandwidth with aggregation. b/36022633 364 // overestimating bandwidth with aggregation. b/36022633
363 EXPECT_GE(kTestLinkBandwidth * 1.5f, 365 EXPECT_GE(kTestLinkBandwidth * 1.5f,
364 sender_->ExportDebugState().max_bandwidth); 366 sender_->ExportDebugState().max_bandwidth);
365 // TODO(ianswett): Expect 0 packets are lost once BBR no longer measures 367 // TODO(ianswett): Expect 0 packets are lost once BBR no longer measures
366 // bandwidth higher than the link rate. 368 // bandwidth higher than the link rate.
367 EXPECT_FALSE(sender_->ExportDebugState().last_sample_is_app_limited); 369 EXPECT_FALSE(sender_->ExportDebugState().last_sample_is_app_limited);
368 // The margin here is high, because the aggregation greatly increases 370 // The margin here is high, because the aggregation greatly increases
369 // smoothed rtt. 371 // smoothed rtt.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 QuicConnectionPeer::SetSendAlgorithm(bbr_sender_.connection(), sender_); 425 QuicConnectionPeer::SetSendAlgorithm(bbr_sender_.connection(), sender_);
424 // Enable Ack Decimation on the receiver. 426 // Enable Ack Decimation on the receiver.
425 QuicConnectionPeer::SetAckMode(receiver_.connection(), 427 QuicConnectionPeer::SetAckMode(receiver_.connection(),
426 QuicConnection::AckMode::ACK_DECIMATION); 428 QuicConnection::AckMode::ACK_DECIMATION);
427 CreateDefaultSetup(); 429 CreateDefaultSetup();
428 430
429 // Transfer 12MB. 431 // Transfer 12MB.
430 DoSimpleTransfer(12 * 1024 * 1024, QuicTime::Delta::FromSeconds(35)); 432 DoSimpleTransfer(12 * 1024 * 1024, QuicTime::Delta::FromSeconds(35));
431 EXPECT_EQ(BbrSender::PROBE_BW, sender_->ExportDebugState().mode); 433 EXPECT_EQ(BbrSender::PROBE_BW, sender_->ExportDebugState().mode);
432 // It's possible to read a bandwidth as much as 50% too high with aggregation. 434 // It's possible to read a bandwidth as much as 50% too high with aggregation.
433 EXPECT_LE(kTestLinkBandwidth * 0.99f, 435 EXPECT_LE(kTestLinkBandwidth * 0.95f,
434 sender_->ExportDebugState().max_bandwidth); 436 sender_->ExportDebugState().max_bandwidth);
435 // TODO(ianswett): Tighten this bound once we understand why BBR is 437 // TODO(ianswett): Tighten this bound once we understand why BBR is
436 // overestimating bandwidth with aggregation. b/36022633 438 // overestimating bandwidth with aggregation. b/36022633
437 EXPECT_GE(kTestLinkBandwidth * 1.5f, 439 EXPECT_GE(kTestLinkBandwidth * 1.5f,
438 sender_->ExportDebugState().max_bandwidth); 440 sender_->ExportDebugState().max_bandwidth);
439 // TODO(ianswett): Expect 0 packets are lost once BBR no longer measures 441 // TODO(ianswett): Expect 0 packets are lost once BBR no longer measures
440 // bandwidth higher than the link rate. 442 // bandwidth higher than the link rate.
441 EXPECT_FALSE(sender_->ExportDebugState().last_sample_is_app_limited); 443 EXPECT_FALSE(sender_->ExportDebugState().last_sample_is_app_limited);
442 // The margin here is high, because the aggregation greatly increases 444 // The margin here is high, because the aggregation greatly increases
443 // smoothed rtt. 445 // smoothed rtt.
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 sender_->ResumeConnectionState(params, false); 791 sender_->ResumeConnectionState(params, false);
790 EXPECT_EQ(kTestLinkBandwidth, sender_->ExportDebugState().max_bandwidth); 792 EXPECT_EQ(kTestLinkBandwidth, sender_->ExportDebugState().max_bandwidth);
791 EXPECT_EQ(kTestLinkBandwidth, sender_->BandwidthEstimate()); 793 EXPECT_EQ(kTestLinkBandwidth, sender_->BandwidthEstimate());
792 ExpectApproxEq(kTestRtt, sender_->ExportDebugState().min_rtt, 0.01f); 794 ExpectApproxEq(kTestRtt, sender_->ExportDebugState().min_rtt, 0.01f);
793 795
794 DriveOutOfStartup(); 796 DriveOutOfStartup();
795 } 797 }
796 798
797 } // namespace test 799 } // namespace test
798 } // namespace net 800 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/congestion_control/bbr_sender.cc ('k') | net/quic/core/quic_flags_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698