]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Limit the number of items in the consdiffmgr on Windows.
authorAlexander Færøy <ahf@torproject.org>
Wed, 20 Jan 2021 16:33:17 +0000 (16:33 +0000)
committerAlexander Færøy <ahf@torproject.org>
Wed, 20 Jan 2021 16:33:17 +0000 (16:33 +0000)
This patch limits the number of items in the consensus diff cache to 64
on the Windows platform. Hopefully, this will allow us to investigate a
smarter fix while avoiding the situation reported in tor#24857 where
Windows relay operators report Tor using 100% CPU.

See: tor#24857

changes/bug24857 [new file with mode: 0644]
src/feature/dircache/consdiffmgr.c

diff --git a/changes/bug24857 b/changes/bug24857
new file mode 100644 (file)
index 0000000..fb2a7ab
--- /dev/null
@@ -0,0 +1,6 @@
+  o Minor bugfixes (directory cache, performance, windows):
+    - Limit the number of items in the consensus diff cache to 64 on Windows.
+      We hope this will resolve an issue where Windows relay operators reported
+      Tor using 100% CPU while we investigate better solutions. Fixes bug 24857;
+      bugfix on tor-0.3.1.1-alpha.
+
index 10590cd6d286e37f88fd92dffc277ee990750320..21f536432ced0acbe4b6ac67224de00f3c7dcbbd 100644 (file)
@@ -177,6 +177,16 @@ typedef struct cdm_diff_t {
 /** Hashtable mapping flavor and source consensus digest to status. */
 static HT_HEAD(cdm_diff_ht, cdm_diff_t) cdm_diff_ht = HT_INITIALIZER();
 
+#ifdef _WIN32
+   // XXX(ahf): For tor#24857, a contributor suggested that on Windows, the CPU
+   // begins to spike at 100% once the number of files handled by the consensus
+   // diff manager becomes larger than 64. To see if the issue goes away, we
+   // hardcode this value to 64 now while we investigate a better solution.
+#  define CACHE_MAX_NUM 64
+#else
+#  define CACHE_MAX_NUM 128
+#endif
+
 /**
  * Configuration for this module
  */
@@ -184,7 +194,7 @@ static consdiff_cfg_t consdiff_cfg = {
   // XXXX I'd like to make this number bigger, but it interferes with the
   // XXXX seccomp2 syscall filter, which tops out at BPF_MAXINS (4096)
   // XXXX rules.
-  /* .cache_max_num = */ 128
+  /* .cache_max_num = */ CACHE_MAX_NUM
 };
 
 static int consdiffmgr_ensure_space_for_files(int n);