mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-28 22:31:06 +01:00
MINOR: cpu-topo: add detection of online CPUs on Linux
This adds a generic function ha_cpuset_detect_online() which for now only supports linux via /sys. It fills a cpuset with the list of online CPUs that were detected (or returns a failure).
This commit is contained in:
parent
8c524c7c9d
commit
8f72ce335a
@ -9,6 +9,12 @@ extern int cpu_topo_maxcpus;
|
|||||||
extern int cpu_topo_lastcpu;
|
extern int cpu_topo_lastcpu;
|
||||||
extern struct ha_cpu_topo *ha_cpu_topo;
|
extern struct ha_cpu_topo *ha_cpu_topo;
|
||||||
|
|
||||||
|
/* Detects CPUs that are online on the system. It may rely on FS access (e.g.
|
||||||
|
* /sys on Linux). Returns the number of CPUs detected or 0 if the detection
|
||||||
|
* failed.
|
||||||
|
*/
|
||||||
|
int ha_cpuset_detect_online(struct hap_cpuset *set);
|
||||||
|
|
||||||
/* Detects the CPUs that will be used based on the ones the process is bound to.
|
/* Detects the CPUs that will be used based on the ones the process is bound to.
|
||||||
* Returns non-zero on success, zero on failure. Note that it may not be
|
* Returns non-zero on success, zero on failure. Note that it may not be
|
||||||
* performed in the function above because some calls may rely on other items
|
* performed in the function above because some calls may rely on other items
|
||||||
|
|||||||
@ -7,6 +7,8 @@
|
|||||||
#include <haproxy/api.h>
|
#include <haproxy/api.h>
|
||||||
#include <haproxy/cpuset.h>
|
#include <haproxy/cpuset.h>
|
||||||
#include <haproxy/cpu_topo.h>
|
#include <haproxy/cpu_topo.h>
|
||||||
|
#include <haproxy/global.h>
|
||||||
|
#include <haproxy/tools.h>
|
||||||
|
|
||||||
/* CPU topology information, ha_cpuset_size() entries, allocated at boot */
|
/* CPU topology information, ha_cpuset_size() entries, allocated at boot */
|
||||||
int cpu_topo_maxcpus = -1; // max number of CPUs supported by OS/haproxy
|
int cpu_topo_maxcpus = -1; // max number of CPUs supported by OS/haproxy
|
||||||
@ -14,6 +16,33 @@ int cpu_topo_lastcpu = -1; // last supposed online CPU (no need to look beyond
|
|||||||
struct ha_cpu_topo *ha_cpu_topo = NULL;
|
struct ha_cpu_topo *ha_cpu_topo = NULL;
|
||||||
struct cpu_map *cpu_map;
|
struct cpu_map *cpu_map;
|
||||||
|
|
||||||
|
|
||||||
|
/* Detects CPUs that are online on the system. It may rely on FS access (e.g.
|
||||||
|
* /sys on Linux). Returns the number of CPUs detected or 0 if the detection
|
||||||
|
* failed.
|
||||||
|
*/
|
||||||
|
int ha_cpuset_detect_online(struct hap_cpuset *set)
|
||||||
|
{
|
||||||
|
#if defined(__linux__)
|
||||||
|
|
||||||
|
ha_cpuset_zero(set);
|
||||||
|
|
||||||
|
/* contains a list of CPUs in the format <low>[-<high>][,...] */
|
||||||
|
if (read_line_to_trash("%s/cpu/online", NUMA_DETECT_SYSTEM_SYSFS_PATH) >= 0) {
|
||||||
|
const char *parse_cpu_set_args[2] = { trash.area, "\0" };
|
||||||
|
|
||||||
|
if (parse_cpu_set(parse_cpu_set_args, set, NULL) != 0)
|
||||||
|
ha_cpuset_zero(set);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // !__linux__
|
||||||
|
|
||||||
|
ha_cpuset_zero(set);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return ha_cpuset_count(set);
|
||||||
|
}
|
||||||
|
|
||||||
/* Detects the CPUs that will be used based on the ones the process is bound to
|
/* Detects the CPUs that will be used based on the ones the process is bound to
|
||||||
* at boot. The principle is the following: all CPUs from the boot cpuset will
|
* at boot. The principle is the following: all CPUs from the boot cpuset will
|
||||||
* be used since we don't know upfront how individual threads will be mapped to
|
* be used since we don't know upfront how individual threads will be mapped to
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user