1. 01 5月, 2013 1 次提交
  2. 21 9月, 2012 1 次提交
    • D
      frontswap: support exclusive gets if tmem backend is capable · e3483a5f
      Dan Magenheimer 提交于
      Tmem, as originally specified, assumes that "get" operations
      performed on persistent pools never flush the page of data out
      of tmem on a successful get, waiting instead for a flush
      operation.  This is intended to mimic the model of a swap
      disk, where a disk read is non-destructive.  Unlike a
      disk, however, freeing up the RAM can be valuable.  Over
      the years that frontswap was in the review process, several
      reviewers (and notably Hugh Dickins in 2010) pointed out that
      this would result, at least temporarily, in two copies of the
      data in RAM: one (compressed for zcache) copy in tmem,
      and one copy in the swap cache.  We wondered if this could
      be done differently, at least optionally.
      
      This patch allows tmem backends to instruct the frontswap
      code that this backend performs exclusive gets.  Zcache2
      already contains hooks to support this feature.  Other
      backends are completely unaffected unless/until they are
      updated to support this feature.
      
      While it is not clear that exclusive gets are a performance
      win on all workloads at all times, this small patch allows for
      experimentation by backends.
      
      P.S. Let's not quibble about the naming of "get" vs "read" vs
      "load" etc.  The naming is currently horribly inconsistent between
      cleancache and frontswap and existing tmem backends, so will need
      to be straightened out as a separate patch.  "Get" is used
      by the tmem architecture spec, existing backends, and
      all documentation and presentation material so I am
      using it in this patch.
      Signed-off-by: NDan Magenheimer <dan.magenheimer@oracle.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      e3483a5f
  3. 15 5月, 2012 2 次提交
    • K
      frontswap: s/put_page/store/g s/get_page/load · 165c8aed
      Konrad Rzeszutek Wilk 提交于
      Sounds so much more natural.
      Suggested-by: NAndrea Arcangeli <aarcange@redhat.com>
      Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      165c8aed
    • D
      mm: frontswap: add frontswap header file · c3ba9698
      Dan Magenheimer 提交于
      Frontswap is the alter ego of cleancache, the "yang" to cleancache's
      "yin"... and more precisely frontswap is the provider of anonymous
      pages to transcendent memory to nicely complement cleancache's providing
      of clean pagecache pages to transcendent memory.  For optimal use
      of transcendent memory, both are necessary... because a kernel
      under memory pressure first reclaims clean pagecache pages and,
      when under more memory pressure, starts swapping anonymous pages.
      
      Frontswap and cleancache (which was merged at 3.0) are the "frontends"
      and the only necessary changes to the core kernel for transcendent memory;
      all other supporting code -- the "backends" -- is implemented as drivers.
      See the LWN.net article "Transcendent memory in a nutshell" for a detailed
      overview of frontswap and related kernel parts:
      https://lwn.net/Articles/454795/
      
      Frontswap code was first posted publicly in January 2009 and on LKML in
      May 2009, and has remained functionally stable for nearly three years now.
      It is barely invasive, touching only the swap subsystem and adds less
      than 100 lines of code to existing swap subsystem code files.
      It has improved syntactically substantially between V1 and this posting
      of V14, thanks to the review of a few kernel developers, and has adapted
      easily to at least one major swap subsystem change.  As of 3.4, there are
      three in-tree users of frontswap patiently waiting for this patchset and
      for CONFIG_FRONTSWAP to be enabled: zcache (staging driver merged at
      2.6.39), Xen tmem (merged at 3.0 and 3.1) and RAMster (staging driver
      merged at 3.4).  In addition, a RFC has been posted for a KVM backend.
      The frontswap patchset has been in linux-next since next-110603.  Earlier
      versions of frontswap already ship in the Oracle Unbreakable Enterprise Kernel
      and SuSE SLES.
      
      This patch, 1of4, provides the header file for the core code for frontswap
      that interfaces between the hooks in the swap subsystem and a frontswap
      backend via frontswap_ops.
      ---
      New file added: include/linux/frontswap.h
      
      [v14: add support for writethrough, per suggestion by aarcange@redhat.com]
      [v14: rebase to 3.4-rc2]
      [v11: konrad.wilk@oracle.com: squashed s/flush/invalidate/ in]
      [v10: no change]
      [v9: akpm@linux-foundation.org: change "flush" to "invalidate", part 1]
      [v8: rebase to 3.0-rc4]
      [v7: rebase to 3.0-rc3]
      [v7: JBeulich@novell.com: new static inlines resolve to no-ops if not config'd]
      [v7: JBeulich@novell.com: avoid redundant shifts/divides for *_bit lib calls]
      [v6: rebase to 3.1-rc1]
      [v5: no change from v4]
      [v4: rebase to 2.6.39]
      Signed-off-by: NDan Magenheimer <dan.magenheimer@oracle.com>
      Reviewed-by: NAndrew Morton <akpm@linux-foundation.org>
      Acked-by: NJan Beulich <JBeulich@novell.com>
      Acked-by: NSeth Jennings <sjenning@linux.vnet.ibm.com>
      Cc: Jeremy Fitzhardinge <jeremy@goop.org>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Nitin Gupta <ngupta@vflare.org>
      Cc: Matthew Wilcox <matthew@wil.cx>
      Cc: Chris Mason <chris.mason@oracle.com>
      Cc: Rik Riel <riel@redhat.com>
      [v15: int/bool on some functions]
      Signed-off-by: NKonrad Wilk <konrad.wilk@oracle.com>
      c3ba9698