lvmcache와 dm-cache의 차이점은 무엇입니까?

lvmcache와 dm-cache의 차이점은 무엇입니까?

dm-cache최근에 Linux가 최근에 크게 개선되었다는 기사를 발견했습니다 . 또한 사용자 공간에서는 이를 lvmcache. 나는 LVM 캐싱 메커니즘이 관련되어 있다고 생각합니다 dm-cache. 내 서버에서는 명령을 사용하여 dm-cache장치 매퍼 수준에서 직접 설정했습니다 dmsetup. LVM 명령은 포함되지 않습니다.

그럼 정확히 무엇입니까? lvmcacheCLI만 사용하여 설정하는 것이 더 쉬울 수 있습니까 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

lvmcachedm-cache그 위에 구축되었으며 dm-cache설정을 위해 논리 볼륨을 사용하고 이를 방지합니다.블록 오프셋과 크기를 계산해야 합니다.. 모든 것이 맨페이지에 문서화되어 있습니다. 기본 아이디어는 다음과 같습니다.

  • 원본 LV(느림, 캐시 필요)
  • 새로운 캐시 데이터 LV
  • 새로운 캐시 메타데이터 LV

두 개의 캐시 LV는 "캐시 풀" LV로 그룹화되고, 원래 LV와 캐시 풀 LV는 원래 LV 대신 사용할 수 있는 캐시 LV로 그룹화됩니다.

lvmcache또한 중복 캐시 설정, 캐싱 모드 또는 정책 변경 등을 쉽게 수행할 수 있습니다.

답변2

@stephen-kitt는 차이점을 아주 잘 요약했습니다. 어느 정도 최신 시스템에서 가능할 때마다 lvmcache(7)를 사용하면 많은 시간과 노력을 절약할 수 있습니다. 또한 RHEL 7.2+(커널 4.2에서 백포트됨) 및 최신 버전의 SLES에서도 통합 및 지원됩니다. 물론 데비안이나 우분투도 괜찮을 것입니다.

나는 최근 프라하에서 열린 LinuxDays 2017에서 바로 이 문제에 대해 강연했습니다.https://www.youtube.com/watch?v=6W_xK5Ks-Lw

슬라이드쇼:https://www.linuxdays.cz/2017/video/Adam_Kalisz-SSD_cache_testing.pdf

관련 정보