Hello Oleg, or anyone else affected,
Accepted glibc into xenial-proposed. The package will build now and be
available at https://launchpad.net/ubuntu/+source/glibc/2.23-0ubuntu11
in a few hours, and then in the -proposed repository.
Please help us by testing this new package. See
https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how
to enable and use -proposed. Your feedback will aid us getting this
update out to other Ubuntu users.
If this package fixes the bug for you, please add a comment to this bug,
mentioning the version of the package you tested and change the tag from
verification-needed-xenial to verification-done-xenial. If it does not
fix the bug for you, please add a comment stating that, and change the
tag to verification-failed-xenial. In either case, without details of
your testing we will not be able to proceed.
Further information regarding the verification process can be found at
https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in
advance for helping!
N.B. The updated package will be released to -updates after the bug(s)
fixed by this package have been verified and the package has been in
-proposed for a minimum of 7 days.
** Changed in: glibc (Ubuntu Xenial)
Status: In Progress => Fix Committed
** Tags added: verification-needed verification-needed-xenial
--
You received this bug notification because you are a member of STS
Sponsors, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1663280
Title:
Serious performance degradation of math functions
Status in GLibC:
Fix Released
Status in glibc package in Ubuntu:
Fix Released
Status in glibc source package in Xenial:
Fix Committed
Status in glibc source package in Zesty:
Won't Fix
Status in glibc package in Fedora:
Fix Released
Bug description:
SRU Justification
=
[Impact]
* Severe performance hit on many maths-heavy workloads. For example,
a user reports linpack performance of 13 Gflops on Trusty and Bionic
and 3.9 Gflops on Xenial.
* Because the impact is so large (>3x) and Xenial is supported until
2021, the fix should be backported.
* The fix avoids an AVX-SSE transition penalty. It stops
_dl_runtime_resolve() from using AVX-256 instructions which touch the
upper halves of various registers. This change means that the
processor does not need to save and restore them.
[Test Case]
Firstly, you need a suitable Intel machine. Users report that Sandy
Bridge, Ivy Bridge, Haswell, and Broadwell CPUs are affected, and I
have been able to reproduce it on a Skylake CPU using a suitable Azure
VM.
Create the following C file, exp.c:
#include
#include
int main () {
double a, b;
for (a = b = 0.0; b < 2.0; b += 0.0005) a += exp(b);
printf("%f\n", a);
return 0;
}
$ gcc -O3 -march=x86-64 -o exp exp.c -lm
With the current version of glibc:
$ time ./exp
...
real0m1.349s
user0m1.349s
$ time LD_BIND_NOW=1 ./exp
...
real0m0.625s
user0m0.621s
Observe that LD_BIND_NOW makes a big difference as it avoids the call
to _dl_runtime_resolve.
With the proposed update:
$ time ./exp
...
real0m0.625s
user0m0.621s
$ time LD_BIND_NOW=1 ./exp
...
real0m0.631s
user0m0.631s
Observe that the normal case is faster, and LD_BIND_NOW makes a
negligible difference.
[Regression Potential]
glibc is the nightmare case for regressions as could affect pretty much
anything, and this patch touches a key part (dynamic libraries).
We can be fairly confident in the fix generally - it's in the glibc in
Bionic, Debian and some RPM-based distros. The backport is based on
the patches in the release/2.23/master branch in the upstream glibc
repository, and the backport was straightforward.
Obviously that doesn't remove all risk. There is also a fair bit of
Ubuntu-specific patching in glibc so other distros are of limited
value for ruling out bugs. So I have done the following testing, and
I'm happy to do more as required. All testing has been done:
- on an Azure VM (affected by the change), with proposed package
- on a local VM (not affected by the change), with proposed package
* Boot with the upgraded libc6.
* Watch a youtube video in Firefox over VNC.
* Build some C code (debuild of zlib).
* Test Java by installing and running Eclipse.
Autopkgtest also passes.
[Original Description]
Bug [0] has been introduced in Glibc 2.23 [1] and fixed in Glibc 2.25
[2]. All Ubuntu versions starting from 16.04 are affected because they
use either Glibc 2.23 or 2.24. Bug introduces serious (2x-4x)
performance degradation of math functions (pow, exp/exp2/exp10,
log/log2/log10, sin/cos/sincos/tan, asin/acos/atan/atan2,
sinh/cosh/tanh, asinh/acosh/atanh) provided by libm. Bug can be
reproduced on any AVX-capable x86-64 machine.
@strikov: According to a quite