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