mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-28 06:11:32 +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 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.
|
||||
* 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
|
||||
|
||||
@ -7,6 +7,8 @@
|
||||
#include <haproxy/api.h>
|
||||
#include <haproxy/cpuset.h>
|
||||
#include <haproxy/cpu_topo.h>
|
||||
#include <haproxy/global.h>
|
||||
#include <haproxy/tools.h>
|
||||
|
||||
/* CPU topology information, ha_cpuset_size() entries, allocated at boot */
|
||||
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 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
|
||||
* 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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user