Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ngx_setaffinity.c
Go to the documentation of this file.
1 
2 /*
3  * Copyright (C) Nginx, Inc.
4  */
5 
6 
7 #include <ngx_config.h>
8 #include <ngx_core.h>
9 
10 
11 #if (NGX_HAVE_CPUSET_SETAFFINITY)
12 
13 #include <sys/cpuset.h>
14 
15 void
16 ngx_setaffinity(uint64_t cpu_affinity, ngx_log_t *log)
17 {
18  cpuset_t mask;
19  ngx_uint_t i;
20 
22  "cpuset_setaffinity(0x%08Xl)", cpu_affinity);
23 
24  CPU_ZERO(&mask);
25  i = 0;
26  do {
27  if (cpu_affinity & 1) {
28  CPU_SET(i, &mask);
29  }
30  i++;
31  cpu_affinity >>= 1;
32  } while (cpu_affinity);
33 
34  if (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1,
35  sizeof(cpuset_t), &mask) == -1)
36  {
38  "cpuset_setaffinity() failed");
39  }
40 }
41 
42 #elif (NGX_HAVE_SCHED_SETAFFINITY)
43 
44 void
45 ngx_setaffinity(uint64_t cpu_affinity, ngx_log_t *log)
46 {
47  cpu_set_t mask;
48  ngx_uint_t i;
49 
51  "sched_setaffinity(0x%08Xl)", cpu_affinity);
52 
53  CPU_ZERO(&mask);
54  i = 0;
55  do {
56  if (cpu_affinity & 1) {
57  CPU_SET(i, &mask);
58  }
59  i++;
60  cpu_affinity >>= 1;
61  } while (cpu_affinity);
62 
63  if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) == -1) {
65  "sched_setaffinity() failed");
66  }
67 }
68 
69 #endif