lvmcache 和 dm-cache 有什么区别?

Lap*_*sio 5 cache lvm device-mapper

最近我发现一篇文章提到最近dm-cachelinux 有了显着的改进。我还发现在用户空间中您将其视为lvmcache. 这对我来说很困惑。我认为 LVM 缓存机制与dm-cache. 在我的服务器上,我dm-cache使用命令直接在设备映射器级别上进行设置dmsetup。不涉及 LVM 命令。

那么到底是什么?lvmcache仅使用 CLI就可以更轻松地dm-cache进行设置吗?使用它而不是原始dmsetup命令是更好的主意吗?

我当前的脚本如下所示:

#!/bin/bash

CACHEPARAMS="512 1 writethrough default 0"
CACHEDEVICES="o=/dev/mapper/storage c=/dev/mapper/suse-cache"
MAPPER="storagecached"

if [ "$1" == "-u" ] ; then
{
  for i in $CACHEDEVICES ; do
    if [ "`echo $i | grep \"^c=\"`" != "" ] ; then
      __CACHEDEV=${i:2}
    elif [ "`echo $i | grep \"^o=\"`" != "" ] ; then
      __ORIGINALDEV=${i:2}
  fi
  done

  dmsetup suspend $MAPPER
  dmsetup remove $MAPPER
  dmsetup remove `basename $__CACHEDEV`-blocks
  dmsetup remove `basename $__CACHEDEV`-metadata

}
else
{
  for i in $CACHEDEVICES ; do
    if [ "`echo $i | grep \"^c=\"`" != "" ] ; then
      __CACHEDEV=${i:2}
    elif [ "`echo $i | grep \"^o=\"`" != "" ] ; then
      __ORIGINALDEV=${i:2}
    fi
  done


  __CACHEDEVSIZE="`blockdev --getsize64 \"$__CACHEDEV\"`"
  __CACHEMETASIZE="$(((4194304 + (16 * $__CACHEDEVSIZE / 262144))/512))"
  if [ "$__CACHEMETASIZE" == ""$(((4194303 + (16 * $__CACHEDEVSIZE / 262144))/512))"" ] ; then
    __CACHEMETASIZE="$(($__CACHEMETASIZE + 1))" ; fi
  __CACHEBLOCKSSIZE="$((($__CACHEDEVSIZE/512) - $__CACHEMETASIZE))"
  __ORIGINALDEVSIZE="`blockdev --getsz $__ORIGINALDEV`"


  dmsetup create `basename $__CACHEDEV`-metadata --table "0 $__CACHEMETASIZE linear /dev/mapper/suse-cache 0"
  dmsetup create `basename $__CACHEDEV`-blocks --table "0 $__CACHEBLOCKSSIZE linear /dev/mapper/suse-cache $__CACHEMETASIZE"
  dmsetup create $MAPPER --table "0 $__ORIGINALDEVSIZE cache /dev/mapper/`basename $__CACHEDEV`-metadata /dev/mapper/`basename $__CACHEDEV`-blocks $__ORIGINALDEV $CACHEPARAMS"
  dmsetup resume $MAPPER
}
fi
Run Code Online (Sandbox Code Playgroud)

lvmcache做得更好吗?我觉得这样做还不错,因为我知道发生了什么,我并不看重易用性,而看重设置的清晰度。但是,如果使用 lvmcache 设置缓存会得到更好的优化,那么我认为使用它是毫不费力的。

Ste*_*itt 2

lvmcache建立在dm-cache;之上 它dm-cache使用逻辑卷进行设置,并避免计算块偏移和大小。一切都记录在联机帮助页中;基本思想是使用

  • 原始LV(慢,要缓存)
  • 新的缓存数据LV
  • 一个新的缓存元数据LV

两个缓存 LV 被分组为一个“缓存池”LV,然后原始 LV 和缓存池 LV 被分组为一个缓存 LV,您可以使用该 LV 来代替原始 LV。

lvmcache还可以轻松设置冗余缓存、更改缓存模式或策略等。