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
}


}
47f5c50a69f232e7e03dda171b669c'>nls: Update de translation.Ludovic Courtès 2019-05-13doc: Add Russian translation....Ludovic Courtès 2019-05-01nls: Revert latest guix-manual.zh_CN changes....Ludovic Courtès 2019-05-01nls: Fix cross-reference syntax error in 'guix-manual.es.po'....Ludovic Courtès 2019-05-01nls: Update manual translations for de, es, fr, and zh_CN.Ludovic Courtès 2019-04-30build: 'guix-manual.*.po' no longer depends on 'guix-manual.pot'....Ludovic Courtès 2019-04-30nls: Remove 'guix-manual.pot'....Ludovic Courtès 2019-04-29maint: Mark 'doc-pot-update' and 'doc-po-update' as phony....Ludovic Courtès 2019-04-27nls: Fix wrong include name....Clément Lassieur 2019-04-27nls: Update 'zh_CN' translation....Julien Lepiller 2019-04-25nls: Update 'es' translation.Julien Lepiller 2019-04-25nls: Update 'de' translation.Julien Lepiller