mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-18 01:14:38 +00:00
MINOR: cpuset: 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
3a0e03bd4c
commit
6bef0d7298
@ -54,6 +54,12 @@ int ha_cpuset_size(void);
|
||||
*/
|
||||
int ha_cpuset_detect_bound(struct hap_cpuset *set);
|
||||
|
||||
/* 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
|
||||
|
27
src/cpuset.c
27
src/cpuset.c
@ -4,6 +4,7 @@
|
||||
|
||||
#include <haproxy/api.h>
|
||||
#include <haproxy/cpuset.h>
|
||||
#include <haproxy/global.h>
|
||||
#include <haproxy/intops.h>
|
||||
#include <haproxy/tools.h>
|
||||
|
||||
@ -176,6 +177,32 @@ int ha_cpuset_detect_bound(struct hap_cpuset *set)
|
||||
return ha_cpuset_count(set);
|
||||
}
|
||||
|
||||
/* 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…
Reference in New Issue
Block a user