最近、Linuxでdm-cache
が大幅に改善されたことに言及した記事を最近見つけました。また、ユーザー空間ではlvmcache
と表示されることもわかりました。そして、それは私にとってかなり混乱しています。 LVMのキャッシュメカニズムはdm-cache
とは異なるものだと思いました。私のサーバーでは、dmsetup
コマンドを使用して、デバイスマッパーレベルでdm-cache
を直接設定しています。 LVMコマンドは含まれていません。
結局それは何ですか? lvmcache
はdm-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を使用して設定されたキャッシュがより最適化されている場合は、代わりにそれを使用するのは簡単です。
lvmcache
はdm-cache
の上に構築されます。論理ボリュームを使用してdm-cache
を設定し、 ブロックのオフセットとサイズを計算する必要がある を回避します。すべてはマンページに記載されています。基本的な考え方は
2つのキャッシュLVは「キャッシュプール」LVにグループ化され、元のLVとキャッシュプールLVは、元のLVの代わりに使用するキャッシュされたLVにグループ化されます。
lvmcache
を使用すると、冗長キャッシュの設定、キャッシュモードやポリシーの変更なども簡単になります。
@ 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