freebsd-skq/sys
andrew 4bde709fd3 Only call cpu_icache_sync_range when inserting an executable page. If the
page is non-executable the contents of the i-cache are unimportant so this
call is just adding unneeded overhead when inserting pages.

While doing research using gem5 with an O3 pipeline and 1k/32k/1M iTLB/L1
iCache/L2 Bjoern Zeeb (bz@) observed a fairly high rate of calls into
arm64_icache_sync_range() from pmap_enter() along with a high number of
instruction fetches and iTLB/iCache hits.

Limiting the calls to arm64_icache_sync_range() to only executable pages,
we observe the iTLB and iCache Hit going down by about 43%. These numbers
are quite misleading when looked at alone as at the same time instructions
retired were reduced by 19.2% and instruction fetches were reduced by 38.8%.
Overall this reduced the runtime of the test program by 22.4%.

On Juno hardware, in steady-state, running the same test, using the cycle
count to determine runtime, we do see a reduction of up to 28.9% in runtime.

While these numbers certainly depend on the program executed, we expect an
overall performance improvement.

Reported by:	bz
Obtained from:	ABT Systems Ltd
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
2016-09-07 16:22:05 +00:00
..
amd64 work around AMD erratum 793 for family 16h, models 00h-0Fh 2016-09-07 14:24:29 +00:00
arm Remove messy machdep code for Alpine V1 and use proper drivers instead 2016-09-07 05:36:55 +00:00
arm64 Only call cpu_icache_sync_range when inserting an executable page. If the 2016-09-07 16:22:05 +00:00
boot o Update QEMU device tree. 2016-09-07 15:48:44 +00:00
bsm
cam
cddl fix zfs pool creation accidentally broken by r305331 2016-09-06 06:09:12 +00:00
compat
conf Introduce support for Annapurna Alpine CCU and NB devices 2016-09-07 05:34:41 +00:00
contrib Update Annapurna Alpine HAL to a newer version. 2016-09-06 14:59:13 +00:00
crypto
ddb
dev rum: fix possible panic on device detach (similar to r302034). 2016-09-07 16:19:20 +00:00
fs nullfs: stop special-casing directories in null_vptocnp 2016-09-06 21:22:03 +00:00
gdb
geom Don't treat an error from g_mirror_clear_metadata() as fatal. 2016-09-06 23:42:59 +00:00
gnu
i386 Remove support for idle page zeroing. 2016-09-03 20:38:13 +00:00
isa
kern Modernize the initalization of sigproptbl. 2016-09-06 22:03:53 +00:00
kgssapi
libkern
mips Fix MIPS INTRNG (both FDT and non-FDT) behaviour broken by r304459 2016-09-07 09:31:10 +00:00
modules Make some additional -Wconstant-conversion warnings from clang 3.9.0 in 2016-09-04 17:56:55 +00:00
net hyperv/hn: Stringent RNDIS packet message length/offset check. 2016-09-06 03:20:06 +00:00
net80211
netgraph
netinet With clang 3.9.0, compiling sys/netinet/igmp.c results in the following 2016-09-04 17:23:10 +00:00
netinet6
netipsec Remove redundant sanity checks from ipsec[46]_common_input_cb(). 2016-08-31 11:51:52 +00:00
netnatm
netpfil
netsmb
nfs
nfsclient
nfsserver
nlm
ofed
opencrypto
pc98
powerpc Disable the qoriq errata fix for now 2016-09-07 04:13:28 +00:00
riscv Remove support for idle page zeroing. 2016-09-03 20:38:13 +00:00
rpc
security
sparc64 Disable vt(4) by default on sparc64 as creator_vt(4) and vt_ofwfb(4) 2016-09-06 22:18:08 +00:00
sys Resolve deadlock between device_detach() and usbd_do_request_flags() 2016-09-05 15:35:58 +00:00
teken
tests
tools
ufs Renumber the advertising clause. 2016-09-06 15:17:35 +00:00
vm Respect the caller's hints when performing swap readahead. 2016-09-04 00:25:49 +00:00
x86 Remove remnants of PERFMON and I586_PMC_GUPROF from amd64. 2016-09-06 19:25:32 +00:00
xdr
xen
Makefile