web-dev-qa-db-ja.com

lvmcacheとdm-cacheの違いは何ですか?

最近、Linuxでdm-cacheが大幅に改善されたことに言及した記事を最近見つけました。また、ユーザー空間ではlvmcacheと表示されることもわかりました。そして、それは私にとってかなり混乱しています。 LVMのキャッシュメカニズムはdm-cacheとは異なるものだと思いました。私のサーバーでは、dmsetupコマンドを使用して、デバイスマッパーレベルでdm-cacheを直接設定しています。 LVMコマンドは含まれていません。

結局それは何ですか? lvmcachedm-cacheのセットアップを簡単にするためのCLIだけですか?生の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

lvmcacheのほうがいいですか?何が起こっているのかがわかるので、セットアップの明確さよりも使いやすさを重視しないので、私はこの方法でそれをやっても大丈夫だと感じています。ただし、lvmcacheを使用して設定されたキャッシュがより最適化されている場合は、代わりにそれを使用するのは簡単です。

4
Lapsio

lvmcachedm-cacheの上に構築されます。論理ボリュームを使用してdm-cacheを設定し、 ブロックのオフセットとサイズを計算する必要がある を回避します。すべてはマンページに記載されています。基本的な考え方は

  • 元のLV(遅い、キャッシュされる)
  • 新しいキャッシュデータLV
  • 新しいキャッシュメタデータLV

2つのキャッシュLVは「キャッシュプール」LVにグループ化され、元のLVとキャッシュプールLVは、元のLVの代わりに使用するキャッシュされたLVにグループ化されます。

lvmcacheを使用すると、冗長キャッシュの設定、キャッシュモードやポリシーの変更なども簡単になります。

2
Stephen Kitt

@ stephen-kittは違いをうまくまとめています。現在のすべてのシステムで、可能な限りlvmcache(7)を使用してください。時間と労力を節約できます。また、RHEL 7.2+(カーネル4.2からバックポート)およびSLESの最近のリリースで統合およびサポートされています。もちろん、DebianとUbuntuで問題ありません。

最近プラハで開催されたLinuxDays 2017でこの件について講演しました: https://www.youtube.com/watch?v=6W_xK5Ks-Lw

スライド: https://www.linuxdays.cz/2017/video/Adam_Kalisz-SSD_cache_testing.pdf

1
AdamKalisz