]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Move compute_num_cpus to lib/thread
authorNick Mathewson <nickm@torproject.org>
Thu, 28 Jun 2018 16:08:18 +0000 (12:08 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 28 Jun 2018 16:08:18 +0000 (12:08 -0400)
src/common/compat.c
src/common/compat.h
src/lib/thread/include.am
src/lib/thread/numcpus.c [new file with mode: 0644]
src/lib/thread/numcpus.h [new file with mode: 0644]
src/or/config.c
src/test/test_util.c

index f8333624ca7dded3bc5f2a99bae3ef4b496f0c81..6d89e1c08b4bd16cbe5a878da70660ae972d2a06 100644 (file)
@@ -354,81 +354,6 @@ get_uname,(void))
  *   Process control
  */
 
-/** Implementation logic for compute_num_cpus(). */
-static int
-compute_num_cpus_impl(void)
-{
-#ifdef _WIN32
-  SYSTEM_INFO info;
-  memset(&info, 0, sizeof(info));
-  GetSystemInfo(&info);
-  if (info.dwNumberOfProcessors >= 1 && info.dwNumberOfProcessors < INT_MAX)
-    return (int)info.dwNumberOfProcessors;
-  else
-    return -1;
-#elif defined(HAVE_SYSCONF)
-#ifdef _SC_NPROCESSORS_CONF
-  long cpus_conf = sysconf(_SC_NPROCESSORS_CONF);
-#else
-  long cpus_conf = -1;
-#endif
-#ifdef _SC_NPROCESSORS_ONLN
-  long cpus_onln = sysconf(_SC_NPROCESSORS_ONLN);
-#else
-  long cpus_onln = -1;
-#endif
-  long cpus = -1;
-
-  if (cpus_conf > 0 && cpus_onln < 0) {
-    cpus = cpus_conf;
-  } else if (cpus_onln > 0 && cpus_conf < 0) {
-    cpus = cpus_onln;
-  } else if (cpus_onln > 0 && cpus_conf > 0) {
-    if (cpus_onln < cpus_conf) {
-      log_notice(LD_GENERAL, "I think we have %ld CPUS, but only %ld of them "
-                 "are available. Telling Tor to only use %ld. You can over"
-                 "ride this with the NumCPUs option",
-                 cpus_conf, cpus_onln, cpus_onln);
-    }
-    cpus = cpus_onln;
-  }
-
-  if (cpus >= 1 && cpus < INT_MAX)
-    return (int)cpus;
-  else
-    return -1;
-#else
-  return -1;
-#endif /* defined(_WIN32) || ... */
-}
-
-#define MAX_DETECTABLE_CPUS 16
-
-/** Return how many CPUs we are running with.  We assume that nobody is
- * using hot-swappable CPUs, so we don't recompute this after the first
- * time.  Return -1 if we don't know how to tell the number of CPUs on this
- * system.
- */
-int
-compute_num_cpus(void)
-{
-  static int num_cpus = -2;
-  if (num_cpus == -2) {
-    num_cpus = compute_num_cpus_impl();
-    tor_assert(num_cpus != -2);
-    if (num_cpus > MAX_DETECTABLE_CPUS) {
-      /* LCOV_EXCL_START */
-      log_notice(LD_GENERAL, "Wow!  I detected that you have %d CPUs. I "
-                 "will not autodetect any more than %d, though.  If you "
-                 "want to configure more, set NumCPUs in your torrc",
-                 num_cpus, MAX_DETECTABLE_CPUS);
-      num_cpus = MAX_DETECTABLE_CPUS;
-      /* LCOV_EXCL_STOP */
-    }
-  }
-  return num_cpus;
-}
-
 #if defined(HW_PHYSMEM64)
 /* This appears to be an OpenBSD thing */
 #define INT64_HW_MEM HW_PHYSMEM64
index 13e20a4ac22eb15d0496a860e10cfd4fa6e361e2..5cd8e721547956360377c007d56a292b0d7bc532 100644 (file)
@@ -133,8 +133,6 @@ typedef unsigned long rlim_t;
 int set_max_file_descriptors(rlim_t limit, int *max);
 MOCK_DECL(int, get_total_system_memory, (size_t *mem_out));
 
-int compute_num_cpus(void);
-
 /** Macros for MIN/MAX.  Never use these when the arguments could have
  * side-effects.
  * {With GCC extensions we could probably define a safer MIN/MAX.  But
index 0eac7edeeb6dc6907f9c35a3adae001b15c7c6ed..9ec23d166ea891d2cee2256629c4aeaf22ef3c95 100644 (file)
@@ -14,6 +14,7 @@ endif
 
 src_lib_libtor_thread_a_SOURCES =                      \
        src/lib/thread/compat_threads.c                 \
+       src/lib/thread/numcpus.c                        \
        $(threads_impl_source)
 
 src_lib_libtor_thread_testing_a_SOURCES = \
@@ -22,4 +23,5 @@ src_lib_libtor_thread_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
 src_lib_libtor_thread_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
 
 noinst_HEADERS +=                                      \
-       src/lib/thread/threads.h
+       src/lib/thread/threads.h                        \
+       src/lib/thread/numcpus.h
diff --git a/src/lib/thread/numcpus.c b/src/lib/thread/numcpus.c
new file mode 100644 (file)
index 0000000..534b057
--- /dev/null
@@ -0,0 +1,93 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "lib/thread/numcpus.h"
+#include "lib/log/torlog.h"
+#include "lib/log/util_bug.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#include <stdlib.h>
+
+/** Implementation logic for compute_num_cpus(). */
+static int
+compute_num_cpus_impl(void)
+{
+#ifdef _WIN32
+  SYSTEM_INFO info;
+  memset(&info, 0, sizeof(info));
+  GetSystemInfo(&info);
+  if (info.dwNumberOfProcessors >= 1 && info.dwNumberOfProcessors < INT_MAX)
+    return (int)info.dwNumberOfProcessors;
+  else
+    return -1;
+#elif defined(HAVE_SYSCONF)
+#ifdef _SC_NPROCESSORS_CONF
+  long cpus_conf = sysconf(_SC_NPROCESSORS_CONF);
+#else
+  long cpus_conf = -1;
+#endif
+#ifdef _SC_NPROCESSORS_ONLN
+  long cpus_onln = sysconf(_SC_NPROCESSORS_ONLN);
+#else
+  long cpus_onln = -1;
+#endif
+  long cpus = -1;
+
+  if (cpus_conf > 0 && cpus_onln < 0) {
+    cpus = cpus_conf;
+  } else if (cpus_onln > 0 && cpus_conf < 0) {
+    cpus = cpus_onln;
+  } else if (cpus_onln > 0 && cpus_conf > 0) {
+    if (cpus_onln < cpus_conf) {
+      log_notice(LD_GENERAL, "I think we have %ld CPUS, but only %ld of them "
+                 "are available. Telling Tor to only use %ld. You can over"
+                 "ride this with the NumCPUs option",
+                 cpus_conf, cpus_onln, cpus_onln);
+    }
+    cpus = cpus_onln;
+  }
+
+  if (cpus >= 1 && cpus < INT_MAX)
+    return (int)cpus;
+  else
+    return -1;
+#else
+  return -1;
+#endif /* defined(_WIN32) || ... */
+}
+
+#define MAX_DETECTABLE_CPUS 16
+
+/** Return how many CPUs we are running with.  We assume that nobody is
+ * using hot-swappable CPUs, so we don't recompute this after the first
+ * time.  Return -1 if we don't know how to tell the number of CPUs on this
+ * system.
+ */
+int
+compute_num_cpus(void)
+{
+  static int num_cpus = -2;
+  if (num_cpus == -2) {
+    num_cpus = compute_num_cpus_impl();
+    tor_assert(num_cpus != -2);
+    if (num_cpus > MAX_DETECTABLE_CPUS) {
+      /* LCOV_EXCL_START */
+      log_notice(LD_GENERAL, "Wow!  I detected that you have %d CPUs. I "
+                 "will not autodetect any more than %d, though.  If you "
+                 "want to configure more, set NumCPUs in your torrc",
+                 num_cpus, MAX_DETECTABLE_CPUS);
+      num_cpus = MAX_DETECTABLE_CPUS;
+      /* LCOV_EXCL_STOP */
+    }
+  }
+  return num_cpus;
+}
diff --git a/src/lib/thread/numcpus.h b/src/lib/thread/numcpus.h
new file mode 100644 (file)
index 0000000..2899a9e
--- /dev/null
@@ -0,0 +1,11 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_NUMCPUS_H
+#define TOR_NUMCPUS_H
+
+int compute_num_cpus(void);
+
+#endif
index 690025911d849b5458214c6a7f334ec399195ad7..55dd1d7f8397e4a939a648474172597a567167bd 100644 (file)
 #include "lib/process/setuid.h"
 #include "lib/process/subprocess.h"
 #include "lib/net/gethostname.h"
+#include "lib/thread/numcpus.h"
 
 #include "lib/encoding/keyval.h"
 #include "lib/fs/conffile.h"
index a6fb0ce846b2a7df285ded94c4ed86f86440dd61..bdc6fca7dfe801f28094914ed242d46f2ec39da2 100644 (file)
@@ -28,6 +28,7 @@
 #include "lib/process/pidfile.h"
 #include "lib/process/subprocess.h"
 #include "lib/intmath/weakrng.h"
+#include "lib/thread/numcpus.h"
 
 #ifdef HAVE_PWD_H
 #include <pwd.h>