Run client-side experiments on CBT to test timeout cutoff and two guard use
We need to:
- Run guard-based onionperf instances with two guards
- Ensure onionperf is properly using two guards
- Check that timeout rate closely matches the expected 20% for regular and onion circs
- Verify that what BUILDTIMEOUT_SET reports is the real timeout rate
- Tune Xm and alpha estimation for different guard types and circ counts
- Do some tests changing CBT_DEFAULT_QUANTILE_CUTOFF to see how timeout rate changes.
- Investigate how changing the quantile cutoff to 60/70/80 changes performance metrics in onionperf (for 2-close, 2-far, and 2-mixed guards)
- Double-check that the same properties hold for onion service onionperf
- Compare this behavior to original for 1-close, 1-far guard
- Ensure that onionperf ignores measurements and timeouts, when no timeout is learned yet, while changing guards.
Note there is a separate set of work to test this parameter tuning globally in the consensus.
Some of these tests can be run with 'vanguards --enable-cbtverify --disable-vanguards'
See also:
- https://trac.torproject.org/projects/tor/wiki/org/roadmaps/CoreTor/PerformanceExperiments
- https://trac.torproject.org/projects/tor/wiki/org/roadmaps/CoreTor/PerformanceMetrics
- https://gitlab.torproject.org/tpo/metrics/onionperf/-/issues/33399
- https://gitlab.torproject.org/tpo/metrics/onionperf/-/issues/33420
- https://gitlab.torproject.org/tpo/metrics/onionperf/-/issues/33421
- https://github.com/mikeperry-tor/vanguards/blob/master/src/vanguards/cbtverify.py