Skip to content
  • Claudio Imbrenda's avatar
    mm/ksm: improve deduplication of zero pages with colouring · e86c59b1
    Claudio Imbrenda authored
    Some architectures have a set of zero pages (coloured zero pages)
    instead of only one zero page, in order to improve the cache
    performance.  In those cases, the kernel samepage merger (KSM) would
    merge all the allocated pages that happen to be filled with zeroes to
    the same deduplicated page, thus losing all the advantages of coloured
    zero pages.
    
    This behaviour is noticeable when a process accesses large arrays of
    allocated pages containing zeroes.  A test I conducted on s390 shows
    that there is a speed penalty when KSM merges such pages, compared to
    not merging them or using actual zero pages from the start without
    breaking the COW.
    
    This patch fixes this behaviour.  When coloured zero pages are present,
    the checksum of a zero page is calculated during initialisation, and
    compared with the checksum of the current canditate during merging.  In
    case of a match, the normal merging routine is used to merge the page
    with the correct coloured zero page, which ensures the candidate page is
    checked to be equal to the target zero page.
    
    A sysfs entry is also added to toggle this behaviour, since it can
    potentially introduce performance regressions, especially on
    architectures without coloured zero pages.  The default value is
    disabled, for backwards compatibility.
    
    With this patch, the performance with KSM is the same as with non
    COW-broken actual zero pages, which is also the same as without KSM.
    
    [akpm@linux-foundation.org: make zero_checksum and ksm_use_zero_pages __read_mostly, per Andrea]
    [imbrenda@linux.vnet.ibm.com: documentation for coloured zero pages deduplication]
      Link: http://lkml.kernel.org/r/1484927522-1964-1-git-send-email-imbrenda@linux.vnet.ibm.com
    Link: http://lkml.kernel.org/r/1484850953-23941-1-git-send-email-imbrenda@linux.vnet.ibm.com
    
    
    Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.vnet.ibm.com>
    Cc: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e86c59b1