[tor-commits] [tor/master] Check for CPUs more accurartely when ONLN != CONF.
nickm at torproject.org
nickm at torproject.org
Tue Mar 19 18:27:05 UTC 2013
commit 22804c0391f0549356959e1b474c43bfcba1b8cb
Author: Nick Mathewson <nickm at torproject.org>
Date: Tue Feb 19 02:31:53 2013 -0500
Check for CPUs more accurartely when ONLN != CONF.
There are two ways to use sysconf to ask about the number of
CPUs. When we're on a VM, we would sometimes get it wrong by asking
for the number of total CPUs (say, 64) when we should have been asking
for the number of CPUs online (say, 1 or 2).
Fix for bug 8002.
---
changes/bug8002 | 5 +++++
src/common/compat.c | 29 +++++++++++++++++++++++++++--
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/changes/bug8002 b/changes/bug8002
new file mode 100644
index 0000000..d6e2ff2
--- /dev/null
+++ b/changes/bug8002
@@ -0,0 +1,5 @@
+ o Minor bugfixes:
+ - When autodetecting the number of CPUs, use the number of available
+ CPUs in preferernce to the number of configured CPUs. Inform the
+ user if this reduces the number of avialable CPUs. Fix for bug 8002.
+ Bugfix on 0.2.3.1-alpha.
diff --git a/src/common/compat.c b/src/common/compat.c
index d7ce894..e620653 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -2265,8 +2265,33 @@ compute_num_cpus_impl(void)
return (int)info.dwNumberOfProcessors;
else
return -1;
-#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
- long cpus = sysconf(_SC_NPROCESSORS_CONF);
+#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
More information about the tor-commits
mailing list