aboutsummaryrefslogtreecommitdiff
path: root/nix/libutil/affinity.cc
blob: 3e21f43a2e9d1b23e40a7f524a514730981bdbfc (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "types.hh"
#include "util.hh"
#include "affinity.hh"

#if HAVE_SCHED_H
#include <sched.h>
#endif

namespace nix {


#if HAVE_SCHED_SETAFFINITY
static bool didSaveAffinity = false;
static cpu_set_t savedAffinity;
#endif


void setAffinityTo(int cpu)
{
#if HAVE_SCHED_SETAFFINITY
    if (sched_getaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1) return;
    didSaveAffinity = true;
    printMsg(lvlDebug, 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)
        printMsg(lvlError, format("failed to lock thread to CPU %1%") % cpu);
#endif
}


int lockToCurrentCPU()
{
#if HAVE_SCHED_SETAFFINITY
    int cpu = sched_getcpu();
    if (cpu != -1) setAffinityTo(cpu);
    return cpu;
#else
    return -1;
#endif
}


void restoreAffinity()
{
#if HAVE_SCHED_SETAFFINITY
    if (!didSaveAffinity) return;
    if (sched_setaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1)
        printMsg(lvlError, "failed to restore affinity %1%");
#endif
}


}
an class='msg-tooltip'>* emacs/guix-emacs.el (guix-emacs-autoloads-regexp): New variable. (guix-emacs-find-autoloads-in-directory): Return a list of autoloads without extensions. Alex Kost 2015-12-06emacs: 'guix-emacs-load-autoloads' takes a profile....* emacs/guix-emacs.el (guix-emacs-load-autoloads): Use 'profile' as an optional argument. (guix-emacs-load-autoloads-maybe): Adjust accordingly. * emacs/guix-init.el: Likewise. Alex Kost 2015-07-20emacs: Require 'cl-lib'....* emacs/guix-emacs.el: Require 'cl-lib', for 'cl-pushnew'. Ludovic Courtès 2015-07-20emacs: Fix reference to directory variable....This is a followup to commit 7741139080a6b00aa4f1846fe7668859e91bec58. * emacs/guix-emacs.el (guix-emacs-find-autoloads): Fix variable reference to 'elisp-root-dir'. Signed-off-by: Alex Kost <alezost@gmail.com> Christopher Allan Webber 2015-07-11emacs: Find autoloads in "guix.d" subdirectories....Co-authored-by: Federico Beffa <beffa@fbengineering.ch>. * emacs/guix-emacs.el (guix-emacs-find-autoloads-in-directory, guix-emacs-subdirs): New functions. (guix-emacs-find-autoloads): Search for autoloads in "guix.d" subdirectories. (guix-emacs-load-autoloads): Add subdirectories to 'load-path'. * emacs/guix-init.el.in: Do not add guix emacs directory to 'load-path' because it will be done by 'guix-emacs-load-autoloads'. Move requiring 'guix-emacs' from the top-level to a clause for checking for 'guix-package-enable-at-startup'. Alex Kost 2014-12-02emacs: Handle autoloading Emacs packages installed with Guix....* emacs/guix-emacs.el: New file. * emacs.am (ELFILES): Add it. * emacs/guix-backend.el (guix-after-repl-operation-hook): Add 'guix-emacs-load-autoloads-maybe'. * emacs/guix-init.el.in: Autoload emacs packages. (guix-package-enable-at-startup): New variable. Alex Kost