• Dan Magenheimer's avatar
    staging: zcache: in-kernel tmem code · daa6afa6
    Dan Magenheimer authored
    [PATCH V2 1/3] drivers/staging: zcache: in-kernel tmem code
    
    Transcendent memory ("tmem") is a clean API/ABI that provides
    for an efficient address translation and a set of highly
    concurrent access methods to copy data between a page-oriented
    data source (e.g. cleancache or frontswap) and a page-addressable
    memory ("PAM") data store.  Of critical importance, the PAM data
    store is of unknown (and possibly varying) size so any individual
    access may succeed or fail as defined by the API/ABI.
    
    Tmem exports a basic set of access methods (e.g. put, get,
    flush, flush object, new pool, and destroy pool) which are
    normally called from a "host" (e.g. zcache).
    
    To be functional, two sets of "ops" must be registered by the
    host, one to provide "host services" (memory allocation) and
    one to provide page-addressable memory ("PAM") hooks.
    
    Tmem supports one or more "clients", each which can provide
    a set of "pools" to partition pages.  Each pool contains
    a set of "objects"; each object holds pointers to some number
    of PAM page descriptors ("pampd"), indexed by an "index" number.
    This triple <pool id, object id, index> is sometimes referred
    to as a "handle".  Tmem's primary function is to essentially
    provide address translation of handles into pampds and move
    data appropriately.
    
    As an example, for cleancache, a pool maps to a filesystem,
    an object maps to a file, and the index is the page offset
    into the file.  And in this patch, zcache is the host and
    each PAM descriptor points to a compressed page of data.
    
    Tmem supports two kinds of pages: "ephemeral" and "persistent".
    Ephemeral pages may be asynchronously reclaimed "bottoms up"
    so the data structures and concurrency model must allow for
    this.  For example, each pampd must retain sufficient information
    to invalidate tmem's handle-to-pampd translation.
    its containing object so that, on reclaim, all tmem data
    structures can be made consistent.
    Signed-off-by: default avatarDan Magenheimer <dan.magenheimer@oracle.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    daa6afa6
tmem.c 19.4 KB