ddab052725
Clang emits SSE instructions on amd64 in the common path of pthread_mutex_unlock. If the thread does not otherwise use SSE, this usage incurs a context-switch of the FPU/SSE state, which reduces the performance of multiple real-world applications by a non-trivial amount (3-5% in one application). Instead of this change, I experimented with eagerly switching the FPU state at context-switch time. This did not help. Most of the cost seems to be in the read/write of memory--as kib@ stated--and not in the #NM handling. I tested on machines with and without XSAVEOPT. One counter-argument to this change is that most applications already use SIMD, and the number of applications and amount of SIMD usage are only increasing. This is absolutely true. I agree that--in general and in principle--this change is in the wrong direction. However, there are applications that do not use enough SSE to offset the extra context-switch cost. SSE does not provide a clear benefit in the current libthr code with the current compiler, but it does provide a clear loss in some cases. Therefore, disabling SSE in libthr is a non-loss for most, and a gain for some. I refrained from disabling SSE in libc--as was suggested--because I can't make the above argument for libc. It provides a wide variety of code; each case should be analyzed separately. https://lists.freebsd.org/pipermail/freebsd-current/2015-March/055193.html Suggestions from: dim, jmg, rpaulo Approved by: kib (mentor) MFC after: 2 weeks Sponsored by: Dell Inc. |
||
---|---|---|
.. | ||
atf.test.mk | ||
auto.obj.mk | ||
bsd.arch.inc.mk | ||
bsd.compiler.mk | ||
bsd.cpu.mk | ||
bsd.crunchgen.mk | ||
bsd.dep.mk | ||
bsd.doc.mk | ||
bsd.dtb.mk | ||
bsd.endian.mk | ||
bsd.files.mk | ||
bsd.incs.mk | ||
bsd.info.mk | ||
bsd.init.mk | ||
bsd.kmod.mk | ||
bsd.lib.mk | ||
bsd.libnames.mk | ||
bsd.links.mk | ||
bsd.man.mk | ||
bsd.mkopt.mk | ||
bsd.nls.mk | ||
bsd.obj.mk | ||
bsd.opts.mk | ||
bsd.own.mk | ||
bsd.port.mk | ||
bsd.port.options.mk | ||
bsd.port.post.mk | ||
bsd.port.pre.mk | ||
bsd.port.subdir.mk | ||
bsd.prog.mk | ||
bsd.progs.mk | ||
bsd.README | ||
bsd.snmpmod.mk | ||
bsd.subdir.mk | ||
bsd.symver.mk | ||
bsd.sys.mk | ||
bsd.test.mk | ||
dirdeps.mk | ||
gendirdeps.mk | ||
host-target.mk | ||
install-new.mk | ||
local.autodep.mk | ||
local.dirdeps.mk | ||
local.gendirdeps.mk | ||
local.init.mk | ||
local.meta.sys.mk | ||
local.sys.env.mk | ||
local.sys.mk | ||
Makefile | ||
meta2deps.py | ||
meta2deps.sh | ||
meta.autodep.mk | ||
meta.stage.mk | ||
meta.subdir.mk | ||
meta.sys.mk | ||
netbsd-tests.test.mk | ||
plain.test.mk | ||
src.libnames.mk | ||
src.opts.mk | ||
src.sys.env.mk | ||
src.sys.mk | ||
stage-install.sh | ||
suite.test.mk | ||
sys.dependfile.mk | ||
sys.mk | ||
tap.test.mk | ||
version_gen.awk |