summaryrefslogtreecommitdiff
path: root/src/or/config.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-04-12 11:14:42 -0400
committerNick Mathewson <nickm@torproject.org>2018-04-12 11:14:42 -0400
commit037fb0c804efda988c5c05f0384fccd426f807d0 (patch)
tree47ad7dc1b097c96f38aff8b7d5cb7b7848f5b8cb /src/or/config.c
parenta51630cc9af96642b05b9d0db345ea2d7d3ce128 (diff)
parent31508a0abccfee1cda0869a9a7d22df74d6b67b7 (diff)
downloadtor-037fb0c804efda988c5c05f0384fccd426f807d0.tar.gz
tor-037fb0c804efda988c5c05f0384fccd426f807d0.zip
Merge branch 'maint-0.3.3'
Diffstat (limited to 'src/or/config.c')
-rw-r--r--src/or/config.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/or/config.c b/src/or/config.c
index 456d44dd2e..1eabf49f7b 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -773,8 +773,6 @@ static void config_maybe_load_geoip_files_(const or_options_t *options,
static int options_validate_cb(void *old_options, void *options,
void *default_options,
int from_setconf, char **msg);
-static uint64_t compute_real_max_mem_in_queues(const uint64_t val,
- int log_guess);
static void cleanup_protocol_warning_severity_level(void);
static void set_protocol_warning_severity_level(int warning_severity);
@@ -4508,7 +4506,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
/* Given the value that the user has set for MaxMemInQueues, compute the
* actual maximum value. We clip this value if it's too low, and autodetect
* it if it's set to 0. */
-static uint64_t
+STATIC uint64_t
compute_real_max_mem_in_queues(const uint64_t val, int log_guess)
{
uint64_t result;
@@ -4516,11 +4514,6 @@ compute_real_max_mem_in_queues(const uint64_t val, int log_guess)
if (val == 0) {
#define ONE_GIGABYTE (U64_LITERAL(1) << 30)
#define ONE_MEGABYTE (U64_LITERAL(1) << 20)
-#if SIZEOF_VOID_P >= 8
-#define MAX_DEFAULT_MAXMEM (8*ONE_GIGABYTE)
-#else
-#define MAX_DEFAULT_MAXMEM (2*ONE_GIGABYTE)
-#endif
/* The user didn't pick a memory limit. Choose a very large one
* that is still smaller than the system memory */
static int notice_sent = 0;
@@ -4535,14 +4528,30 @@ compute_real_max_mem_in_queues(const uint64_t val, int log_guess)
result = ONE_GIGABYTE;
#endif /* SIZEOF_VOID_P >= 8 */
} else {
- /* We detected it, so let's pick 3/4 of the total RAM as our limit. */
- const uint64_t avail = (ram / 4) * 3;
+ /* We detected the amount of memory available. */
+ uint64_t avail = 0;
+
+ if (ram >= (8 * ONE_GIGABYTE)) {
+ /* If we have 8 GB, or more, RAM available, we set the MaxMemInQueues
+ * to 0.4 * RAM. The idea behind this value is that the amount of RAM
+ * is more than enough for a single relay and should allow the relay
+ * operator to run two relays if they have additional bandwidth
+ * available.
+ */
+ avail = (ram / 5) * 2;
+ } else {
+ /* If we have less than 8 GB of RAM available, we use the "old" default
+ * for MaxMemInQueues of 0.75 * RAM.
+ */
+ avail = (ram / 4) * 3;
+ }
- /* Make sure it's in range from 0.25 GB to 8 GB. */
- if (avail > MAX_DEFAULT_MAXMEM) {
+ /* Make sure it's in range from 0.25 GB to 8 GB for 64-bit and 0.25 to 2
+ * GB for 32-bit. */
+ if (avail > MAX_DEFAULT_MEMORY_QUEUE_SIZE) {
/* If you want to use more than this much RAM, you need to configure
it yourself */
- result = MAX_DEFAULT_MAXMEM;
+ result = MAX_DEFAULT_MEMORY_QUEUE_SIZE;
} else if (avail < ONE_GIGABYTE / 4) {
result = ONE_GIGABYTE / 4;
} else {