mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-18 01:14:38 +00:00
BUG/MINOR: init: set process' affinity even in foreground
The per-process CPU affinity settings are only applied during forking, which means that cpu-map are ignored when running in foreground (e.g. haproxy started with -db). This is historic due to the original semantics of a process array, but isn't documented and causes surprises when trying to debug affinity settings. Let's make sure the setting is applied to the workers themselves even in foreground. This may be backported to 2.6 though it is really not important. If backported, it also depends on previous commit: BUG/MINOR: cpuset: remove the bogus "proc" from the cpu_map struct
This commit is contained in:
parent
151f9a2808
commit
c955659906
@ -3623,18 +3623,6 @@ int main(int argc, char **argv)
|
||||
in_parent = 1;
|
||||
}
|
||||
|
||||
#if !defined(USE_THREAD) && defined(USE_CPU_AFFINITY)
|
||||
if (!in_parent && ha_cpuset_count(&cpu_map[0].thread[0])) { /* only do this if the process has a CPU map */
|
||||
|
||||
#if defined(CPUSET_USE_CPUSET) || defined(__DragonFly__)
|
||||
struct hap_cpuset *set = &cpu_map[0].thread[0];
|
||||
sched_setaffinity(0, sizeof(set->cpuset), &set->cpuset);
|
||||
#elif defined(__FreeBSD__)
|
||||
struct hap_cpuset *set = &cpu_map[0].thread[0];
|
||||
ret = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(set->cpuset), &set->cpuset);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/* close the pidfile both in children and father */
|
||||
if (pidfd >= 0) {
|
||||
//lseek(pidfd, 0, SEEK_SET); /* debug: emulate eglibc bug */
|
||||
@ -3775,6 +3763,19 @@ int main(int argc, char **argv)
|
||||
fork_poller();
|
||||
}
|
||||
|
||||
/* Note that here we can't be in the parent/master anymore */
|
||||
#if !defined(USE_THREAD) && defined(USE_CPU_AFFINITY)
|
||||
if (ha_cpuset_count(&cpu_map[0].thread[0])) { /* only do this if the process has a CPU map */
|
||||
|
||||
#if defined(CPUSET_USE_CPUSET) || defined(__DragonFly__)
|
||||
struct hap_cpuset *set = &cpu_map[0].thread[0];
|
||||
sched_setaffinity(0, sizeof(set->cpuset), &set->cpuset);
|
||||
#elif defined(__FreeBSD__)
|
||||
struct hap_cpuset *set = &cpu_map[0].thread[0];
|
||||
ret = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(set->cpuset), &set->cpuset);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/* try our best to re-enable core dumps depending on system capabilities.
|
||||
* What is addressed here :
|
||||
* - remove file size limits
|
||||
|
Loading…
Reference in New Issue
Block a user