Yolinux.com

LVMCACHE manpage

Search topic Section


LVMCACHE(7)							   LVMCACHE(7)



NAME
       lvmcache -- LVM caching


DESCRIPTION
       The  cache  logical volume type uses a small and fast LV to improve the
       performance of a large and slow LV.  It does this by storing  the  fre-
       quently	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  account-
       ing  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 logi-
       cal volumes.  All of these associated LVs must be in the same VG.


Cache Terms
       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
       The primary method for using a cache type logical volume:



   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
   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	neces-
       sary, 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
   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  cir-
       cumstances, 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



SEE ALSO
       lvm.conf(5), lvchange(8), lvcreate(8), lvdisplay(8), lvextend(8), lvre-
       move(8),	 lvrename(8),  lvresize(8),  lvs(8),  vgchange(8), vgmerge(8),
       vgreduce(8), vgsplit(8)



Red Hat, Inc	   LVM TOOLS 2.02.166(2)-RHEL7 (2016-11-16)	   LVMCACHE(7)