Build-testing in all supported architectures in a PPA with only the -security pocket enabled. https://launchpad.net/~mfo/+archive/ubuntu/lp2089789
** Description changed: [Impact] - * Jammy has a malloc() performance degradation - if CPU affinity masks are used (not default). + * Jammy has a malloc() performance degradation + if CPU affinity masks are used (not default). - * The maximum number of arenas for malloc() is - calculated based on the number of processors. - - However, glibc 2.34 changed that to be based - on sched_getaffinity(), which is the number - of processors available _to the process_ - (i.e., based on CPU affinity masks). [0] - - Previously, glibc 2.33 instead used the - of processors available _in the system_ - (i.e., based on sysfs and procfs files). - - * This is not an issue by default, as without - CPU affinity masks, the returned number of - processors is the same as sysfs and procfs. - - But it _is_ an issue if CPU affinity masks - are set, as it can increase lock contention - (less arenas), and thus degrade performance. - - * CPU affinity can be set at the process-level - (e.g., taskset, numactl, sched_setaffinity()) - or at the system-level (kernel boot options). + * The maximum number of arenas for malloc() is + calculated based on the number of processors. - The latter is common in hypervisor and/or DPDK - deployments, where CPU partitioning is applied - with isolcpus, cpusets, systemd's CPUAffinity. - + However, glibc 2.34 changed that to be based + on sched_getaffinity(), which is the number + of processors available _to the process_ + (i.e., based on CPU affinity masks). [0] + + Previously, glibc 2.33 instead used the + of processors available _in the system_ + (i.e., based on sysfs and procfs files). + + * This is not an issue by default, as without + CPU affinity masks, the returned number of + processors is the same as sysfs and procfs. + + But it _is_ an issue if CPU affinity masks + are set, as it can increase lock contention + (less arenas), and thus degrade performance. + + * CPU affinity can be set at the process-level + (e.g., taskset, numactl, sched_setaffinity()) + or at the system-level (kernel boot options). + + The latter is common in hypervisor and/or DPDK + deployments, where CPU partitioning is applied + with isolcpus, cpusets, systemd's CPUAffinity. + [Test Plan] - * The upstream bug report [1] has a reproducer, - used in comment #5 to reproduce the problem, - and in comment #6 to validate the fix patch. - - It is copied/attached to this bug as backup - (test-glibc-malloc.c). - - The expected behavior is that these 2 steps - (measuring the average time taken by 50.000 - malloc+free calls, with one thread per CPU) - take similar amounts of time with & without - CPU affinity masks (parameter 2: true/false), - in a system with a great number of CPUs. + * The upstream bug report [1] has a reproducer, + used in comment #5 to reproduce the problem, + and in comment #6 to validate the fix patch. - $ ./test-glibc-malloc $(nproc) false false - $ ./test-glibc-malloc $(nproc) true false + It is copied/attached to this bug as backup + (test-glibc-malloc.c). - * glibc has a build-time test suite. - - * glibc has autopkgtests (rebuild, ie, above) - and triggers autopkgtests in a great number - of reverse test dependencies. + The expected behavior is that these 2 steps + (measuring the average time taken by 50.000 + malloc+free calls, with one thread per CPU) + take similar amounts of time with & without + CPU affinity masks (parameter 2: true/false), + in a system with a great number of CPUs. + + $ ./test-glibc-malloc $(nproc) false false + $ ./test-glibc-malloc $(nproc) true false + + * glibc has a build-time test suite. + + * glibc has autopkgtests (rebuild, ie, above) + and triggers autopkgtests in a great number + of reverse test dependencies. [Regression Potential] - * Theoretically, any fallout should be contained - in malloc() and be related only to performance, - not to functional errors. - - * This happens because this malloc() patch [2] changes - only which method to get the number of processors. - - * The method it changes to is what has been already - used by previous versions of glibc (up to 2.33), - which has been adopted back (2.39) and backported - to all glibc releases after that version (2.34-2.38), - which includes the version in Jammy (2.35 [3]). - - * The method it changes to is also exercised in other - code paths (not just malloc()), thus it is already - used and tested in Jammy -- it is not something new. + * Theoretically, any fallout should be contained + in malloc() and be related only to performance, + not to functional errors. + + * This happens because this malloc() patch [2] changes + only which method to get the number of processors. + + * The method it changes to is what has been already + used by previous versions of glibc (up to 2.33), + which has been adopted back (2.39) and backported + to all glibc releases after that version (2.34-2.38), + which includes the version in Jammy (2.35 [3]). + + * The method it changes to is also exercised in other + code paths (not just malloc()), thus it is already + used and tested in Jammy -- it is not something new. [Other Info] - * For details and analysis of (no) required - dependencies, see comments #1, #2, and #3. - - * Upstream bug report [1] - - [0] + * For details and analysis of (no) required + dependencies, see comments #1, #2, and #3. + + * Upstream bug report [1] + + * Build-testing in PPA with supported archs + and only -security (ppa:mfo/lp2089789) [4] + + [0] glibc 2.33: $ git log --oneline origin/release/2.33/master -- sysdeps/unix/sysv/linux/getsysstats.c | grep 'misc: Add __get_nprocs_sched' $ glibc 2.34: $ git log --oneline origin/release/2.34/master -- sysdeps/unix/sysv/linux/getsysstats.c | grep 'misc: Add __get_nprocs_sched' e870aac8974c misc: Add __get_nprocs_sched glibc 2.35: $ git log --oneline origin/release/2.35/master -- sysdeps/unix/sysv/linux/getsysstats.c | grep 'misc: Add __get_nprocs_sched' 11a02b035b46 misc: Add __get_nprocs_sched [1] https://sourceware.org/bugzilla/show_bug.cgi?id=30945 [2] https://sourceware.org/git/?p=glibc.git;a=commit;h=472894d2cfee5751b44c0aaa71ed87df81c8e62e [3] https://sourceware.org/git/?p=glibc.git;a=commit;h=d47c5e4db7924bb10efe14b787c4bd868b604e48 + + [4] https://launchpad.net/~mfo/+archive/ubuntu/lp2089789 -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2089789 Title: malloc performance degradation with CPU affinity masks To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2089789/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs