aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2021-12-22 15:49:51 +0100
committerEelco Dolstra <edolstra@gmail.com>2021-12-22 15:56:25 +0100
commit9747ea84b43c75f719d719673b9d0a7cb50d34e5 (patch)
tree445abc4d9207becbdf73b66b061a92c3af39407e /src/libutil
parentddd78391547be5f34f4042fd48124c0ced1f33b2 (diff)
Remove CPU locking
This was already accidentally disabled in ba87b08. It also no longer appears to be beneficial, and in fact slow things down, e.g. when evaluating a NixOS system configuration: elapsed time: median = 3.8170 mean = 3.8202 stddev = 0.0195 min = 3.7894 max = 3.8600 [rejected, p=0.00000, Δ=0.36929±0.02513]
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/affinity.cc70
-rw-r--r--src/libutil/affinity.hh9
-rw-r--r--src/libutil/thread-pool.cc3
-rw-r--r--src/libutil/util.cc4
-rw-r--r--src/libutil/util.hh2
5 files changed, 1 insertions, 87 deletions
diff --git a/src/libutil/affinity.cc b/src/libutil/affinity.cc
deleted file mode 100644
index ac2295e4a..000000000
--- a/src/libutil/affinity.cc
+++ /dev/null
@@ -1,70 +0,0 @@
-#include "types.hh"
-#include "util.hh"
-#include "affinity.hh"
-
-#if __linux__
-#include <sched.h>
-#endif
-
-namespace nix {
-
-
-#if __linux__
-static bool didSaveAffinity = false;
-static cpu_set_t savedAffinity;
-
-std::ostream& operator<<(std::ostream &os, const cpu_set_t &cset)
-{
- auto count = CPU_COUNT(&cset);
- for (int i=0; i < count; ++i)
- {
- os << (CPU_ISSET(i,&cset) ? "1" : "0");
- }
-
- return os;
-}
-#endif
-
-
-void setAffinityTo(int cpu)
-{
-#if __linux__
- if (sched_getaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1) return;
- didSaveAffinity = true;
- debug(format("locking this thread to CPU %1%") % cpu);
- cpu_set_t newAffinity;
- CPU_ZERO(&newAffinity);
- CPU_SET(cpu, &newAffinity);
- if (sched_setaffinity(0, sizeof(cpu_set_t), &newAffinity) == -1)
- printError("failed to lock thread to CPU %1%", cpu);
-#endif
-}
-
-
-int lockToCurrentCPU()
-{
-#if __linux__
- int cpu = sched_getcpu();
- if (cpu != -1) setAffinityTo(cpu);
- return cpu;
-#else
- return -1;
-#endif
-}
-
-
-void restoreAffinity()
-{
-#if __linux__
- if (!didSaveAffinity) return;
- if (sched_setaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1)
- {
- std::ostringstream oss;
- oss << savedAffinity;
- printError("failed to restore CPU affinity %1%", oss.str());
- }
-#endif
-}
-
-
-}
diff --git a/src/libutil/affinity.hh b/src/libutil/affinity.hh
deleted file mode 100644
index c1bd28e13..000000000
--- a/src/libutil/affinity.hh
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma once
-
-namespace nix {
-
-void setAffinityTo(int cpu);
-int lockToCurrentCPU();
-void restoreAffinity();
-
-}
diff --git a/src/libutil/thread-pool.cc b/src/libutil/thread-pool.cc
index 857ee91f8..dc4067f1b 100644
--- a/src/libutil/thread-pool.cc
+++ b/src/libutil/thread-pool.cc
@@ -1,13 +1,10 @@
#include "thread-pool.hh"
-#include "affinity.hh"
namespace nix {
ThreadPool::ThreadPool(size_t _maxThreads)
: maxThreads(_maxThreads)
{
- restoreAffinity(); // FIXME
-
if (!maxThreads) {
maxThreads = std::thread::hardware_concurrency();
if (!maxThreads) maxThreads = 1;
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 43fea1b1e..e18648557 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -1,5 +1,4 @@
#include "util.hh"
-#include "affinity.hh"
#include "sync.hh"
#include "finally.hh"
#include "serialise.hh"
@@ -1004,7 +1003,6 @@ pid_t startProcess(std::function<void()> fun, const ProcessOptions & options)
if (options.dieWithParent && prctl(PR_SET_PDEATHSIG, SIGKILL) == -1)
throw SysError("setting death signal");
#endif
- restoreAffinity();
fun();
} catch (std::exception & e) {
try {
@@ -1675,8 +1673,6 @@ void restoreProcessContext(bool restoreMounts)
restoreMountNamespace();
}
- restoreAffinity();
-
#if __linux__
if (savedStackSize) {
struct rlimit limit;
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index 4cc043a84..d08f42826 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -300,7 +300,7 @@ void setStackSize(size_t stackSize);
/* Restore the original inherited Unix process context (such as signal
- masks, stack size, CPU affinity). */
+ masks, stack size). */
void restoreProcessContext(bool restoreMounts = true);
/* Save the current mount namespace. Ignored if called more than