git: kernel - Remove PG_ZERO and zeroidle (page-zeroing) entirely
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Aug 2 17:53:10 PDT 2016
commit afd2da4dc9056ea79cdf15e8a9386a3d3998f33e
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Aug 2 17:41:08 2016 -0700
kernel - Remove PG_ZERO and zeroidle (page-zeroing) entirely
* Remove the PG_ZERO flag and remove all page-zeroing optimizations,
entirely. Aftering doing a substantial amount of testing, these
optimizations, which existed all the way back to CSRG BSD, no longer
provide any benefit on a modern system.
- Pre-zeroing a page only takes 80ns on a modern cpu. vm_fault overhead
in general is ~at least 1 microscond.
- Pre-zeroing a page leads to a cold-cache case on-use, forcing the fault
source (e.g. a userland program) to actually get the data from main
memory in its likely immediate use of the faulted page, reducing
performance.
- Zeroing the page at fault-time is actually more optimal because it does
not require any reading of dynamic ram and leaves the cache hot.
- Multiple synth and build tests show that active idle-time zeroing of
pages actually reduces performance somewhat and incidental allocations
of already-zerod pages (from page-table tear-downs) do not affect
performance in any meaningful way.
* Remove bcopyi() and obbcopy() -> collapse into bcopy(). These other
versions existed because bcopy() used to be specially-optimized and
could not be used in all situations. That is no longer true.
* Remove bcopy function pointer argument to m_devget(). It is no longer
used. This function existed to help support ancient drivers which might
have needed a special memory copy to read and write mapped data. It has
long been supplanted by BUSDMA.
Summary of changes:
sys/ddb/db_input.c | 4 +-
sys/dev/netif/ae/if_ae.c | 2 +-
sys/dev/netif/ale/if_ale.c | 4 +-
sys/dev/netif/dc/if_dc.c | 3 +-
sys/dev/netif/ic/if_ic.c | 2 +-
sys/dev/netif/lge/if_lge.c | 2 +-
sys/dev/netif/my/if_my.c | 2 +-
sys/dev/netif/nge/if_nge.c | 2 +-
sys/dev/netif/plip/if_plip.c | 4 +-
sys/dev/netif/ral/rt2860.c | 2 +-
sys/dev/netif/rl/if_rl.c | 4 +-
sys/dev/netif/sf/if_sf.c | 2 +-
sys/dev/netif/sln/if_sln.c | 6 +-
sys/dev/netif/vr/if_vr.c | 2 +-
sys/dev/netif/wb/if_wb.c | 2 +-
sys/dev/video/fb/fbreg.h | 17 +--
sys/kern/kern_slaballoc.c | 11 +-
sys/kern/uipc_mbuf.c | 7 +-
sys/kern/uipc_syscalls.c | 1 -
sys/kern/vfs_bio.c | 26 ++---
sys/net/bpf.c | 15 +--
sys/net/net_osdep.h | 32 ------
sys/net/netmap/netmap.c | 2 +-
sys/net/ppp_layer/slcompress.c | 5 +-
sys/netgraph/async/ng_async.c | 9 +-
sys/netgraph/l2tp/ng_l2tp.c | 2 +-
sys/netgraph/mppc/ng_mppc.c | 4 +-
sys/netgraph/ng_device.c | 2 +-
sys/netgraph/pptpgre/ng_pptpgre.c | 4 +-
sys/netgraph/socket/ng_socket.c | 2 +-
sys/netgraph7/async/ng_async.c | 4 +-
sys/netgraph7/deflate/ng_deflate.c | 7 +-
sys/netgraph7/mppc/ng_mppc.c | 4 +-
sys/netgraph7/ng_pred1.c | 4 +-
sys/netgraph7/socket/ng_socket.c | 2 +-
sys/netinet/ip_output.c | 10 +-
sys/netinet6/ah_input.c | 8 +-
sys/netinet6/esp_input.c | 4 +-
sys/netinet6/frag6.c | 4 +-
sys/netinet6/ipsec.c | 4 +-
sys/netproto/802_11/wlan/ieee80211_input.c | 4 +-
sys/netproto/802_11/wlan/ieee80211_output.c | 10 +-
.../802_11/wlan_ccmp/ieee80211_crypto_ccmp.c | 4 +-
.../802_11/wlan_wep/ieee80211_crypto_wep.c | 4 +-
sys/netproto/ipsec/ipsec_mbuf.c | 4 +-
sys/netproto/ipsec/ipsec_output.c | 2 +-
sys/platform/pc64/include/md_var.h | 1 -
sys/platform/pc64/x86_64/pmap.c | 39 +------
sys/platform/pc64/x86_64/support.s | 77 +++++---------
sys/platform/vkernel64/platform/copyio.c | 12 ---
sys/platform/vkernel64/platform/pmap.c | 30 +-----
sys/sys/mbuf.h | 3 +-
sys/sys/systm.h | 6 --
sys/vfs/devfs/devfs_vnops.c | 2 -
sys/vfs/smbfs/smbfs_io.c | 2 -
sys/vm/phys_pager.c | 4 +-
sys/vm/pmap.h | 1 -
sys/vm/swap_pager.c | 5 +-
sys/vm/vm_contig.c | 9 +-
sys/vm/vm_fault.c | 26 +----
sys/vm/vm_kern.c | 4 +-
sys/vm/vm_page.c | 117 +++------------------
sys/vm/vm_page.h | 2 +-
sys/vm/vm_page2.h | 7 --
sys/vm/vm_pager.c | 1 -
sys/vm/vm_zeroidle.c | 21 ++++
66 files changed, 184 insertions(+), 446 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/afd2da4dc9056ea79cdf15e8a9386a3d3998f33e
--
DragonFly BSD source repository
More information about the Commits
mailing list