lvm cache配置 -- 用固态硬盘提升大的存储盘的性能

2017/11/3 posted in  linux

在深度学习任务中,经常会频繁读取大量文件(如图片等),这些大的数据集往往保存在机械硬盘上,机械硬盘上小文件读取速度缓慢,往往GPU需要等待硬盘IO而降低训练效率。本文讲解了怎么通过固态硬盘作cache提升系统IO性能

1.什么是LVM

LVM(logical Volume Manager) 是Linux环境下对磁盘分区进行管理的一种机制,他可以方便的调整各个逻辑分区的大小。

LVM主要有三个组成部分:

  1. PV(Physical Volume),物理存储设备,一般是磁盘,如/dev/sda
  2. VG(Volume Group),一个VG可以由多个PV组成,可以在VG上建立多个LV
  3. LV(logical Volume)类似于非LVM系统的磁盘分区,LV建立在VG之上,可以在LV之上建立文件系统(如mount 到 /home)

2. LVM-Cache

LVM-Cache 用一个小的但是快的LV(fast-lv, cache pool LV)来提高大的但是慢的LV(slow-lv, origin LV)的性能。
它通过缓存slow-lv上被频繁访问的blocks到fast-lv上,应用再次访问这些blocks的时候就可以直接从fast-lv上面访问,从而大大提高了io性能。
cache pool LV被划分为两个lv: cache data LV, cache metadata LVcache data LV是保存被缓存的slow-lv的blocks来提高速度, cache metadata LV用来保存保存blocks的相关元数据(cache了哪些block,这些block保存在了哪等)。 这些相关的LV都必须属于同一个VG.

3. LVM + LVM-Cache 实战

现在有两个4T机械硬盘(slow):/dev/sda, /dev/sdb. 一个高速250G固态硬盘(fast): /dev/sdc. 下面介绍怎么通过 sdc 来cache 两个slow的机械硬盘

3.1 创建PV, VG, LV

#创建pv
pvcreate /dev/sda /dev/sdb /dev/sdc
#创建vg
vgcreate my_vg /dev/sda/ /dev/sdb 
#创建slow_lv
lvcreate -n slow_lv -l 100%FREE my_vg
#创建fast_lv
lvcreate -n cache_data -L 230G my_vg /dev/sdc
lvcreate -n cache_meta -L 250M my_vg /dev/sdc

3.2 创建chache pool lv

lvconvert --type cache-pool --poolmetadata my_vg/cache_meta my_vg/cache_data

3.3 缓存slow lv

lvconvert --type cache --cachepool my_vg/cache_data my_vg/slow_lv

至此slow_lv 被 cache_data缓存了
通过lvs -a my_vg查看my_vg状况

3.4 移除cache

lvremove my_vg/cache_data
lvconvert --uncache my_vg/slow_lv

ref: http://man7.org/linux/man-pages/man7/lvmcache.7.html