NAME | DESCRIPTION | Cache Terms | Cache Usage | Cache Removal | Cache Topics | SEE ALSO | COLOPHON

LVMCACHE(7)                                                      LVMCACHE(7)

NAME         top

       lvmcache — LVM caching

DESCRIPTION         top

       An lvm(8) cache Logical Volume (LV) uses a small and fast LV to
       improve the performance of a large and slow LV.  It does this by
       storing the frequently used blocks on the faster LV.  LVM refers to
       the small fast LV as a cache pool LV.  The large slow LV is called
       the origin LV.  Due to requirements from dm-cache (the kernel
       driver), LVM further splits the cache pool LV into two devices - the
       cache data LV and cache metadata LV.  The cache data LV is where
       copies of data blocks are kept from the origin LV to increase speed.
       The cache metadata LV holds the accounting information that specifies
       where data blocks are stored (e.g.  on the origin LV or on the cache
       data LV).  Users should be familiar with these LVs if they wish to
       create the best and most robust cached LVs.  All of these associated
       LVs must be in the same Volume Group (VG).

Cache Terms         top

       origin LV           OriginLV      large slow LV
       cache data LV       CacheDataLV   small fast LV for cache pool data
       cache metadata LV   CacheMetaLV   small fast LV for cache pool metadata
       cache pool LV       CachePoolLV   CacheDataLV + CacheMetaLV
       cache LV            CacheLV       OriginLV + CachePoolLV

Cache Usage         top

       The primary method for using a cache type LV:
   0. create OriginLV
       Create an LV or identify an existing LV to be the origin LV.
       lvcreate -n OriginLV -L LargeSize VG SlowPVs
       Example
       # lvcreate -n lvol0 -L 100G vg
   1. create CacheDataLV
       Create the cache data LV.  This LV will hold data blocks from the
       OriginLV.  The size of this LV is the size of the cache and will be
       reported as the size of the cache pool LV.
       lvcreate -n CacheDataLV -L CacheSize VG FastPVs
       Example
       # lvcreate -n cache0 -L 10G vg /dev/fast
   2. create CacheMetaLV
       Create the cache metadata LV.  This LV will hold cache pool metadata.
       The size of this LV should be 1000 times smaller than the cache data
       LV, with a minimum size of 8MiB.
       lvcreate -n CacheMetaLV -L MetaSize VG FastPVs
       Example
       # lvcreate -n cache0meta -L 12M vg /dev/fast
       # lvs -a vg
         LV         VG   Attr       LSize   Pool Origin
         cache0     vg   -wi-a-----  10.00g
         cache0meta vg   -wi-a-----  12.00m
         lvol0      vg   -wi-a----- 100.00g
   3. create CachePoolLV
       Combine the data and metadata LVs into a cache pool LV.  The behavior
       of the cache pool LV can be set in this step.
       CachePoolLV takes the name of CacheDataLV.
       CacheDataLV is renamed CachePoolLV_cdata and becomes hidden.
       CacheMetaLV is renamed CachePoolLV_cmeta and becomes hidden.
       lvconvert --type cache-pool --poolmetadata VG/CacheMetaLV
              VG/CacheDataLV
       Example
       # lvconvert --type cache-pool --poolmetadata vg/cache0meta vg/cache0
       # lvs -a vg
         LV              VG   Attr       LSize   Pool Origin
         cache0          vg   Cwi---C---  10.00g
         [cache0_cdata]  vg   Cwi-------  10.00g
         [cache0_cmeta]  vg   ewi-------  12.00m
         lvol0           vg   -wi-a----- 100.00g
   4. create CacheLV
       Create a cache LV by linking the cache pool LV to the origin LV.  The
       user accessible cache LV takes the name of the origin LV, while the
       origin LV becomes a hidden LV with the name OriginLV_corig.  This can
       be done while the origin LV is in use.
       CacheLV takes the name of OriginLV.
       OriginLV is renamed OriginLV_corig and becomes hidden.
       lvconvert --type cache --cachepool VG/CachePoolLV VG/OriginLV
       Example
       # lvconvert --type cache --cachepool vg/cache0 vg/lvol0
       # lvs -a vg
         LV              VG   Attr       LSize   Pool   Origin
         cache0          vg   Cwi---C---  10.00g
         [cache0_cdata]  vg   Cwi-ao----  10.00g
         [cache0_cmeta]  vg   ewi-ao----  12.00m
         lvol0           vg   Cwi-a-C--- 100.00g cache0 [lvol0_corig]
         [lvol0_corig]   vg   -wi-ao---- 100.00g

Cache Removal         top

   Split a cache pool LV off of a cache LV
       A cache pool LV can be disconnected from a cache LV, leaving an
       unused cache pool LV, and an uncached origin LV.  This command writes
       back data from the cache pool to the origin LV when necessary.
       lvconvert --splitcache VG/CacheLV
   Removing a cache pool LV without removing its linked origin LV
       This writes back data from the cache pool to the origin LV when
       necessary, then removes the cache pool LV, leaving the uncached
       origin LV.
       lvremove VG/CachePoolLV
       An alternative command that also disconnects the cache pool from the
       cache LV, and deletes the cache pool:
       lvconvert --uncache VG/CacheLV
       Example
       # lvs vg
         LV     VG   Attr       LSize   Pool   Origin
         cache0 vg   Cwi---C---  10.00g
         lvol0  vg   Cwi-a-C--- 100.00g cache0 [lvol0_corig]
       # lvremove vg/cache0
       # lvs vg
         LV    VG   Attr       LSize   Pool Origin
         lvol0 vg   -wi-a----- 100.00g
   Removing a cache LV: both origin LV and the cache pool LV
       Removing a cache LV removes both the origin LV and the linked cache
       pool LV.
       lvremove VG/CacheLV

Cache Topics         top

   Tolerate device failures in a cache pool LV
       Users who are concerned about the possibility of failures in their
       fast devices that could lead to data loss might consider making their
       cache pool sub-LVs redundant.
       Example
       0. Create an origin LV we wish to cache
       # lvcreate -L 10G -n lv1 vg /dev/slow_devs
       1. Create a 2-way RAID1 cache data LV
       # lvcreate --type raid1 -m 1 -L 1G -n cache1 vg \
            /dev/fast1 /dev/fast2
       2. Create a 2-way RAID1 cache metadata LV
       # lvcreate --type raid1 -m 1 -L 8M -n cache1meta vg \
            /dev/fast1 /dev/fast2
       3. Create a cache pool LV combining cache data LV and cache metadata LV
       # lvconvert --type cache-pool --poolmetadata vg/cache1meta vg/cache1
       4. Create a cached LV by combining the cache pool LV and origin LV
       # lvconvert --type cache --cachepool vg/cache1 vg/lv1
   Cache mode
       The default cache mode is "writethrough".  Writethrough ensures that
       any data written will be stored both in the cache pool LV and on the
       origin LV.  The loss of a device associated with the cache pool LV in
       this case would not mean the loss of any data.
       A second cache mode is "writeback".  Writeback delays writing data
       blocks from the cache pool back to the origin LV.  This mode will
       increase performance, but the loss of a device associated with the
       cache pool LV can result in lost data.
       With the --cachemode option, the cache mode can be set when creating
       a cache LV, or changed on an existing cache LV.  The current cache
       mode of a cache LV can be displayed with the cache_mode reporting
       option:
       lvs -o+cache_mode VG/CacheLV
       lvm.conf(5) allocation/cache_mode
       defines the default cache mode.
       Example
       0. Create an origin LV we wish to cache (yours may already exist)
       # lvcreate -L 10G -n lv1 vg /dev/slow
       1. Create a cache data LV
       # lvcreate -L 1G -n cache1 vg /dev/fast
       2. Create a cache metadata LV
       # lvcreate -L 8M -n cache1meta vg /dev/fast
       3. Create a cache pool LV
       # lvconvert --type cache-pool --poolmetadata vg/cache1meta vg/cache1
       4. Create a cache LV by combining the cache pool LV and origin LV,
          and use the writethrough cache mode.
       # lvconvert --type cache --cachepool vg/cache1 \
            --cachemode writethrough vg/lv1
   Cache policy
       The cache subsystem has additional per-LV parameters: the cache
       policy to use, and possibly tunable parameters for the cache policy.
       Three policies are currently available: "smq" is the default policy,
       "mq" is an older implementation, and "cleaner" is used to force the
       cache to write back (flush) all cached writes to the origin LV.
       The "mq" policy has a number of tunable parameters. The defaults are
       chosen to be suitable for the majority of systems, but in special
       circumstances, changing the settings can improve performance.
       With the --cachepolicy and --cachesettings options, the cache policy
       and settings can be set when creating a cache LV, or changed on an
       existing cache LV (both options can be used together).  The current
       cache policy and settings of a cache LV can be displayed with the
       cache_policy and cache_settings reporting options:
       lvs -o+cache_policy,cache_settings VG/CacheLV
       Example
       Change the cache policy and settings of an existing cache LV.
       # lvchange --cachepolicy mq --cachesettings \
            'migration_threshold=2048 random_threshold=4' vg/lv1
       lvm.conf(5) allocation/cache_policy
       defines the default cache policy.
       lvm.conf(5) allocation/cache_settings
       defines the default cache settings.
   Chunk size
       The size of data blocks managed by a cache pool can be specified with
       the --chunksize option when the cache LV is created.  The default
       unit is KiB. The value must be a multiple of 32KiB between 32KiB and
       1GiB.
       Using a chunk size that is too large can result in wasteful use of
       the cache, where small reads and writes can cause large sections of
       an LV to be mapped into the cache.  However, choosing a chunk size
       that is too small can result in more overhead trying to manage the
       numerous chunks that become mapped into the cache.  Overhead can
       include both excessive CPU time searching for chunks, and excessive
       memory tracking chunks.
       Command to display the cache pool LV chunk size:
       lvs -o+chunksize VG/CacheLV
       lvm.conf(5) cache_pool_chunk_size
       controls the default chunk size used when creating a cache LV.
       The default value is shown by:
       lvmconfig --type default allocation/cache_pool_chunk_size
   Spare metadata LV
       See lvmthin(7) for a description of the "pool metadata spare" LV.
       The same concept is used for cache pools.
   Automatic pool metadata LV
       A cache data LV can be converted to cache pool LV without specifying
       a cache pool metadata LV.  LVM will automatically create a metadata
       LV from the same VG.
       lvcreate -n CacheDataLV -L CacheSize VG
       lvconvert --type cache-pool VG/CacheDataLV
   Create a new cache LV without an existing origin LV
       A cache LV can be created using an existing cache pool without an
       existing origin LV.  A new origin LV is created and linked to the
       cache pool in a single step.
       lvcreate --type cache -L LargeSize -n CacheLV
              --cachepool VG/CachePoolLV VG SlowPVs
   Single step cache pool LV creation
       A cache pool LV can be created with a single lvcreate command, rather
       than using lvconvert on existing LVs.  This one command creates a
       cache data LV, a cache metadata LV, and combines the two into a cache
       pool LV.
       lvcreate --type cache-pool -L CacheSize -n CachePoolLV VG FastPVs
   Convert existing LVs to cache types
       When an existing origin LV is converted to a cache LV, the specified
       cache pool may be a normal LV, rather than a cache pool LV.  In this
       case, lvm will first convert the normal LV to a cache pool LV.  A
       pool metadata LV may optionally be specified.
       lvcreate -n OriginLV -L LargeSize VG
       lvcreate -n CacheDataLV -L CacheSize VG
       lvconvert --type cache --cachepool VG/CataDataLV VG/OriginLV
       This is equivalent to:
       lvcreate -n OriginLV -L LargeSize VG
       lvcreate -n CacheDataLV -L CacheSize VG
       lvconvert --type cache-pool VG/CacheDataLV
       lvconvert --type cache --cachepool VG/CachePoolLV VG/OriginLV
   Cache metadata formats
       There are two disk formats for cache metadata.  The metadata format
       can be specified when a cache pool is created, and cannot be changed.
       Format 2 has better performance; it is more compact, and stores dirty
       bits in a separate btree, which improves the speed of shutting down
       the cache.  With auto, lvm selects the best option provided by the
       current dm-cache kernel target.
       lvconvert --type cache-pool --cachemetadataformat auto|1|2
              VG/CacheDataLV

SEE ALSO         top

       lvm.conf(5), lvchange(8), lvcreate(8), lvdisplay(8), lvextend(8),
       lvremove(8), lvrename(8), lvresize(8), lvs(8), vgchange(8),
       vgmerge(8), vgreduce(8), vgsplit(8)

COLOPHON         top

       This page is part of the lvm2 (Logical Volume Manager 2) project.
       Information about the project can be found at 
       ⟨http://www.sourceware.org/lvm2/⟩.  If you have a bug report for this
       manual page, send it to linux-lvm@redhat.com.  This page was obtained
       from the project's upstream Git repository 
       ⟨git://sourceware.org/git/lvm2.git⟩ on 2017-07-05.  If you discover
       any rendering problems in this HTML version of the page, or you
       believe there is a better or more up-to-date source for the page, or
       you have corrections or improvements to the information in this
       COLOPHON (which is not part of the original manual page), send a mail
       to man-pages@man7.org
Red Hat, Inc       LVM TOOLS 2.02.173(2)-git (2017-06-28)        LVMCACHE(7)

Pages that refer to this page: pcp-dmcache(1)lvchange(8)lvconvert(8)lvcreate(8)lvdisplay(8)lvextend(8)lvm(8)lvmconfig(8)lvmdiskscan(8)lvm-fullreport(8)lvm-lvpoll(8)lvreduce(8)lvremove(8)lvrename(8)lvresize(8)lvs(8)lvscan(8)pvchange(8)pvck(8)pvcreate(8)pvdisplay(8)pvmove(8)pvremove(8)pvresize(8)pvs(8)pvscan(8)vgcfgbackup(8)vgcfgrestore(8)vgchange(8)vgck(8)vgconvert(8)vgcreate(8)vgdisplay(8)vgexport(8)vgextend(8)vgimport(8)vgimportclone(8)vgmerge(8)vgmknodes(8)vgreduce(8)vgremove(8)vgrename(8)vgs(8)vgscan(8)vgsplit(8)