Tighten the probability requirement from 99.99% to 99.995% (#26408)

* Tighten the probability requirement from 99.99% to 99.995%

* Update comments
pull/26415/head
Lidi Zheng 4 years ago committed by GitHub
parent 9bbdb70cdc
commit a36199b2d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      test/cpp/end2end/xds_end2end_test.cc

@ -1615,28 +1615,28 @@ grpc_millis NowFromCycleCounter() {
return grpc_cycle_counter_to_millis_round_up(now);
}
// Returns the number of RPCs needed to pass error_tolerance at 99.99% chance.
// Returns the number of RPCs needed to pass error_tolerance at 99.995% chance.
// Rolling dices in drop/fault-injection generates a binomial distribution (if
// our code is not horribly wrong). Let's make "n" the number of samples, "p"
// the probabilty. If we have np>5 & n(1-p)>5, we can approximately treat the
// binomial distribution as a normal distribution.
//
// For normal distribution, we can easily look up how many standard deviation we
// need to reach 99.99%. Based on Wiki's table
// https://en.wikipedia.org/wiki/Standard_normal_table, we need 3.89 sigma
// (standard deviation) to cover the probability area of 99.99%. In another
// need to reach 99.995%. Based on Wiki's table
// https://en.wikipedia.org/wiki/Standard_normal_table, we need 4.00 sigma
// (standard deviation) to cover the probability area of 99.995%. In another
// word, for a sample with size "n" probability "p" error-tolerance "k", we want
// the error always land within 3.89 sigma. The sigma of binominal distribution
// the error always land within 4.00 sigma. The sigma of binominal distribution
// and be computed as sqrt(np(1-p)). Hence, we have the equation:
//
// kn <= 3.89 * sqrt(np(1-p))
// kn <= 4.00 * sqrt(np(1-p))
//
// E.g., with p=0.5 k=0.1, n >= 378; with p=0.5 k=0.05, n >= 1513; with p=0.5
// k=0.01, n >= 37830.
// E.g., with p=0.5 k=0.1, n >= 400; with p=0.5 k=0.05, n >= 1600; with p=0.5
// k=0.01, n >= 40000.
size_t ComputeIdealNumRpcs(double p, double error_tolerance) {
GPR_ASSERT(p >= 0 && p <= 1);
size_t num_rpcs =
ceil(p * (1 - p) * 3.89 * 3.89 / error_tolerance / error_tolerance);
ceil(p * (1 - p) * 4.00 * 4.00 / error_tolerance / error_tolerance);
gpr_log(GPR_INFO,
"Sending %" PRIuPTR " RPCs for percentage=%.3f error_tolerance=%.3f",
num_rpcs, p, error_tolerance);

Loading…
Cancel
Save