
dm-cache
最近、Linuxが最近大幅に改善されたという記事が見つかりました。また、ユーザースペースではこれを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
もっと良くなるでしょうかlvmcache
?私は何が起こっているのかを知っていて、設定の明確さほど使いやすさを大切にしないので、これは良いと思います。しかし、lvmcacheを使用してキャッシュを設定する方が最適化されている場合は、それを使用することはもう考える必要はないと思います。
答え1
lvmcache
dm-cache
その上に構築され、dm-cache
設定に論理ボリュームを使用し、これを防止します。ブロックオフセットとサイズを計算する必要があります。。すべてがマンページに文書化されています。基本的なアイデアは次のとおりです。
- 元のLV(遅い、キャッシュが必要)
- 新しいキャッシュデータLV
- 新しいキャッシュメタデータLV
2つのキャッシュLVは「キャッシュプール」LVにグループ化され、元のLVとキャッシュプールLVは元のLVの代わりに使用可能なキャッシュLVにグループ化されます。
lvmcache
また、冗長キャッシュ設定、キャッシュモード、ポリシーの変更などを簡単に実行できます。
答え2
@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