kernel - Remove PG_ZERO and zeroidle (page-zeroing) entirely
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 3 Aug 2016 00:41:08 +0000 (17:41 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 3 Aug 2016 00:41:08 +0000 (17:41 -0700)
commitafd2da4dc9056ea79cdf15e8a9386a3d3998f33e
tree71c047592ad7d28f9157c142dc3586e3fa8867be
parent7d86823d9876f542e5f006dc7cbaff3294191888
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.
66 files changed:
sys/ddb/db_input.c
sys/dev/netif/ae/if_ae.c
sys/dev/netif/ale/if_ale.c
sys/dev/netif/dc/if_dc.c
sys/dev/netif/ic/if_ic.c
sys/dev/netif/lge/if_lge.c
sys/dev/netif/my/if_my.c
sys/dev/netif/nge/if_nge.c
sys/dev/netif/plip/if_plip.c
sys/dev/netif/ral/rt2860.c
sys/dev/netif/rl/if_rl.c
sys/dev/netif/sf/if_sf.c
sys/dev/netif/sln/if_sln.c
sys/dev/netif/vr/if_vr.c
sys/dev/netif/wb/if_wb.c
sys/dev/video/fb/fbreg.h
sys/kern/kern_slaballoc.c
sys/kern/uipc_mbuf.c
sys/kern/uipc_syscalls.c
sys/kern/vfs_bio.c
sys/net/bpf.c
sys/net/net_osdep.h
sys/net/netmap/netmap.c
sys/net/ppp_layer/slcompress.c
sys/netgraph/async/ng_async.c
sys/netgraph/l2tp/ng_l2tp.c
sys/netgraph/mppc/ng_mppc.c
sys/netgraph/ng_device.c
sys/netgraph/pptpgre/ng_pptpgre.c
sys/netgraph/socket/ng_socket.c
sys/netgraph7/async/ng_async.c
sys/netgraph7/deflate/ng_deflate.c
sys/netgraph7/mppc/ng_mppc.c
sys/netgraph7/ng_pred1.c
sys/netgraph7/socket/ng_socket.c
sys/netinet/ip_output.c
sys/netinet6/ah_input.c
sys/netinet6/esp_input.c
sys/netinet6/frag6.c
sys/netinet6/ipsec.c
sys/netproto/802_11/wlan/ieee80211_input.c
sys/netproto/802_11/wlan/ieee80211_output.c
sys/netproto/802_11/wlan_ccmp/ieee80211_crypto_ccmp.c
sys/netproto/802_11/wlan_wep/ieee80211_crypto_wep.c
sys/netproto/ipsec/ipsec_mbuf.c
sys/netproto/ipsec/ipsec_output.c
sys/platform/pc64/include/md_var.h
sys/platform/pc64/x86_64/pmap.c
sys/platform/pc64/x86_64/support.s
sys/platform/vkernel64/platform/copyio.c
sys/platform/vkernel64/platform/pmap.c
sys/sys/mbuf.h
sys/sys/systm.h
sys/vfs/devfs/devfs_vnops.c
sys/vfs/smbfs/smbfs_io.c
sys/vm/phys_pager.c
sys/vm/pmap.h
sys/vm/swap_pager.c
sys/vm/vm_contig.c
sys/vm/vm_fault.c
sys/vm/vm_kern.c
sys/vm/vm_page.c
sys/vm/vm_page.h
sys/vm/vm_page2.h
sys/vm/vm_pager.c
sys/vm/vm_zeroidle.c