[or-cvs] [tor/master 2/6] Use a more sophisticated soft-hibernation-limit calculation
nickm at torproject.org
nickm at torproject.org
Tue Sep 21 18:33:21 UTC 2010
Author: Nick Mathewson <nickm at torproject.org>
Date: Fri, 3 Sep 2010 13:43:59 -0400
Subject: Use a more sophisticated soft-hibernation-limit calculation
Commit: d0acaac781f766a51c869f503af5a431748b55b9
This should help address bug 1789.
---
changes/bug1789 | 8 ++++++++
src/or/hibernate.c | 23 +++++++++++++++++++++--
2 files changed, 29 insertions(+), 2 deletions(-)
create mode 100644 changes/bug1789
diff --git a/changes/bug1789 b/changes/bug1789
new file mode 100644
index 0000000..1f9e6b1
--- /dev/null
+++ b/changes/bug1789
@@ -0,0 +1,8 @@
+ o Minor features:
+ - Be more generous with how much bandwidth we'd use up (with
+ accounting enabled) before entering "soft hibernation".
+ Previously, we'd hibernate once we'd used up 95% of our allotment.
+ Now, we use up 95% of our allotment, AND make sure that we have
+ no more than 500MB/3 hours of traffic remaining before we enter
+ soft hibernation.
+
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index 30f1ad2..351da93 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -637,8 +637,27 @@ hibernate_hard_limit_reached(void)
static int
hibernate_soft_limit_reached(void)
{
- uint64_t soft_limit = DBL_TO_U64(U64_TO_DBL(get_options()->AccountingMax)
- * .95);
+ const uint64_t acct_max = get_options()->AccountingMax;
+#define SOFT_LIM_PCT (.95)
+#define SOFT_LIM_BYTES (500*1024*1024)
+#define SOFT_LIM_MINUTES (3*60)
+ /* The 'soft limit' is a fair bit more complicated now than once it was.
+ * We want to stop accepting connections when ALL of the following are true:
+ * - We expect to use up the remaining bytes in under 3 hours
+ * - We have used up 95% of our bytes.
+ * - We have less than 500MB of bytes left.
+ */
+ uint64_t soft_limit = DBL_TO_U64(U64_TO_DBL(acct_max) * SOFT_LIM_PCT);
+ if (acct_max > SOFT_LIM_BYTES && acct_max - SOFT_LIM_BYTES > soft_limit) {
+ soft_limit = acct_max - SOFT_LIM_BYTES;
+ }
+ if (expected_bandwidth_usage) {
+ const uint64_t expected_usage =
+ expected_bandwidth_usage * SOFT_LIM_MINUTES;
+ if (acct_max > expected_usage && acct_max - expected_usage > soft_limit)
+ soft_limit = acct_max - expected_usage;
+ }
+
if (!soft_limit)
return 0;
return n_bytes_read_in_interval >= soft_limit
--
1.7.1
More information about the tor-commits
mailing list