MINOR: cpu-topo: add "only-node" and "drop-node" to cpu-set
These are processed after the topology is detected, and they allow to restrict binding to or evict CPUs matching the indicated node(s).
This commit is contained in:
parent
7263366606
commit
c93ee25054
@ -1955,6 +1955,8 @@ cpu-set <directive>...
|
|||||||
command for example.
|
command for example.
|
||||||
- drop-cpu <set> do not bind to CPUs in this set
|
- drop-cpu <set> do not bind to CPUs in this set
|
||||||
- only-cpu <set> do not bind to CPUs not in this set
|
- only-cpu <set> do not bind to CPUs not in this set
|
||||||
|
- drop-node <set> do not bind to CPUs belonging to this NUMA node
|
||||||
|
- only-node <set> do not bind to CPUs not belonging to this NUMA node
|
||||||
|
|
||||||
crt-base <dir>
|
crt-base <dir>
|
||||||
Assigns a default directory to fetch SSL certificates from when a relative
|
Assigns a default directory to fetch SSL certificates from when a relative
|
||||||
|
@ -34,6 +34,9 @@ void cpu_fixup_topology(void);
|
|||||||
/* compose clusters */
|
/* compose clusters */
|
||||||
void cpu_compose_clusters(void);
|
void cpu_compose_clusters(void);
|
||||||
|
|
||||||
|
/* apply remaining topology-based cpu set restrictions */
|
||||||
|
void cpu_refine_cpusets(void);
|
||||||
|
|
||||||
/* Detects CPUs that are bound to the current process. Returns the number of
|
/* Detects CPUs that are bound to the current process. Returns the number of
|
||||||
* CPUs detected or 0 if the detection failed.
|
* CPUs detected or 0 if the detection failed.
|
||||||
*/
|
*/
|
||||||
|
@ -32,6 +32,9 @@ struct cpu_set_cfg {
|
|||||||
/* CPU numbers to accept / reject */
|
/* CPU numbers to accept / reject */
|
||||||
struct hap_cpuset only_cpus;
|
struct hap_cpuset only_cpus;
|
||||||
struct hap_cpuset drop_cpus;
|
struct hap_cpuset drop_cpus;
|
||||||
|
/* node numbers to accept / reject */
|
||||||
|
struct hap_cpuset only_nodes;
|
||||||
|
struct hap_cpuset drop_nodes;
|
||||||
} cpu_set_cfg;
|
} cpu_set_cfg;
|
||||||
|
|
||||||
/* Detects CPUs that are online on the system. It may rely on FS access (e.g.
|
/* Detects CPUs that are online on the system. It may rely on FS access (e.g.
|
||||||
@ -826,6 +829,19 @@ void cpu_compose_clusters(void)
|
|||||||
cpu_reorder_by_index(ha_cpu_topo, cpu_topo_maxcpus);
|
cpu_reorder_by_index(ha_cpu_topo, cpu_topo_maxcpus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* apply remaining topology-based cpu set restrictions */
|
||||||
|
void cpu_refine_cpusets(void)
|
||||||
|
{
|
||||||
|
int cpu;
|
||||||
|
|
||||||
|
/* remove CPUs in the drop-node set or not in the only-node set */
|
||||||
|
for (cpu = 0; cpu <= cpu_topo_lastcpu; cpu++) {
|
||||||
|
if ( ha_cpuset_isset(&cpu_set_cfg.drop_nodes, ha_cpu_topo[cpu].no_id) ||
|
||||||
|
!ha_cpuset_isset(&cpu_set_cfg.only_nodes, ha_cpu_topo[cpu].no_id))
|
||||||
|
ha_cpu_topo[cpu].st |= HA_CPU_F_DONT_USE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* CPU topology detection below, OS-specific */
|
/* CPU topology detection below, OS-specific */
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
@ -1191,6 +1207,22 @@ static int cfg_parse_cpu_set(char **args, int section_type, struct proxy *curpx,
|
|||||||
ha_cpuset_and(&cpu_set_cfg.only_cpus, &tmp_cpuset);
|
ha_cpuset_and(&cpu_set_cfg.only_cpus, &tmp_cpuset);
|
||||||
arg++;
|
arg++;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(args[arg], "drop-node") == 0 || strcmp(args[arg], "only-node") == 0) {
|
||||||
|
if (!*args[arg + 1]) {
|
||||||
|
memprintf(err, "missing node set");
|
||||||
|
goto parse_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu_set_str[0] = args[arg + 1];
|
||||||
|
if (parse_cpu_set(cpu_set_str, &tmp_cpuset, err) != 0)
|
||||||
|
goto parse_err;
|
||||||
|
|
||||||
|
if (*args[arg] == 'd') // nodes to drop
|
||||||
|
ha_cpuset_or(&cpu_set_cfg.drop_nodes, &tmp_cpuset);
|
||||||
|
else // nodes to keep
|
||||||
|
ha_cpuset_and(&cpu_set_cfg.only_nodes, &tmp_cpuset);
|
||||||
|
arg++;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
/* fall back with default error message */
|
/* fall back with default error message */
|
||||||
memprintf(err, "'%s' passed an unknown directive '%s'", args[0], args[arg]);
|
memprintf(err, "'%s' passed an unknown directive '%s'", args[0], args[arg]);
|
||||||
@ -1215,7 +1247,7 @@ static int cfg_parse_cpu_set(char **args, int section_type, struct proxy *curpx,
|
|||||||
|
|
||||||
leave_with_err:
|
leave_with_err:
|
||||||
/* complete with supported directives */
|
/* complete with supported directives */
|
||||||
memprintf(err, "%s (only 'reset', 'only-cpu', 'drop-cpu' supported).", *err);
|
memprintf(err, "%s (only 'reset', 'only-cpu', 'drop-cpu', 'only-node', 'drop-node' supported).", *err);
|
||||||
leave:
|
leave:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1260,10 +1292,13 @@ static int cpu_topo_alloc(void)
|
|||||||
/* pre-inizialize the configured CPU sets */
|
/* pre-inizialize the configured CPU sets */
|
||||||
ha_cpuset_zero(&cpu_set_cfg.drop_cpus);
|
ha_cpuset_zero(&cpu_set_cfg.drop_cpus);
|
||||||
ha_cpuset_zero(&cpu_set_cfg.only_cpus);
|
ha_cpuset_zero(&cpu_set_cfg.only_cpus);
|
||||||
|
ha_cpuset_zero(&cpu_set_cfg.drop_nodes);
|
||||||
|
ha_cpuset_zero(&cpu_set_cfg.only_nodes);
|
||||||
|
|
||||||
/* preset all CPUs in the "only-XXX" sets */
|
/* preset all CPUs in the "only-XXX" sets */
|
||||||
for (cpu = 0; cpu < cpu_topo_maxcpus; cpu++) {
|
for (cpu = 0; cpu < cpu_topo_maxcpus; cpu++) {
|
||||||
ha_cpuset_set(&cpu_set_cfg.only_cpus, cpu);
|
ha_cpuset_set(&cpu_set_cfg.only_cpus, cpu);
|
||||||
|
ha_cpuset_set(&cpu_set_cfg.only_nodes, cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -2071,6 +2071,9 @@ static void step_init_2(int argc, char** argv)
|
|||||||
|
|
||||||
/* compose clusters */
|
/* compose clusters */
|
||||||
cpu_compose_clusters();
|
cpu_compose_clusters();
|
||||||
|
|
||||||
|
/* refine topology-based CPU sets */
|
||||||
|
cpu_refine_cpusets();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* detect the optimal thread-groups and nbthreads if not set */
|
/* detect the optimal thread-groups and nbthreads if not set */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user