dm-cache 的基本设置

dm-cache 的基本设置

我发现 bcache 更适合我,但由于今天的讨论,我来测试 dm-cache。我没有找到很好的入门文档来介绍如何操作,所以我想我也可以在这里记录和分享 - 并通过这种方式使其“可搜索”。

那么如何在 Ubuntu 上实际设置 dm-cache?

答案1

我开始了解这个信息充分利用你的 NVMe,也是man lvmcache一个很好的资源。

我(抱歉)没有更多的磁盘:

/dev/sda2 (931G slow)
/dev//dev/nvme0n1 (372.6G fast)

基本设置:

$ sudo pvcreate /dev/sda2
  Physical volume "/dev/sda2" successfully created.
$ sudo pvcreate /dev/nvme0n1
  Physical volume "/dev/nvme0n1" successfully created.
$ sudo vgcreate cache /dev/sda2 /dev/nvme0n1
  Volume group "cache" successfully created
$ sudo lvcreate -L 200G -n origin_device cache /dev/sda2
  Logical volume "origin_device" created
$ sudo lvcreate -L 60G -n cache_block cache /dev/nvme0n1
  Logical volume "cache_block" created.
$ sudo lvcreate -L 2G -n cache_meta cache /dev/nvme0n1
  Logical volume "cache_meta" created.
$ sudo lvconvert --type cache-pool /dev/cache/cache_block --poolmetadata /dev/cache/cache_meta
  WARNING: Converting logical volume cache/cache_block and cache/cache_meta to pool's data and metadata volumes.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert cache/cache_block and cache/cache_meta? [y/n]: y
  Converted cache/cache_block to cache pool.
$ sudo lvconvert --type cache /dev/cache/origin_device --cachepool /dev/cache/cache_block
  Logical volume cache/origin_device is now cached.

之后,您就可以“照常”使用该设备了。我还创建了一个非缓存设备作为基本测试的参考:

$ sudo lvcreate -L 200G -n origin_device_reference cache /dev/sda2
  Logical volume "origin_device_reference" created.
$ sudo mkfs -t xfs /dev/cache/origin_device
$ sudo mkfs -t xfs /dev/cache/origin_device_reference

并安装它

$ sudo mkdir /mnt/lv-xfs
$ sudo mkdir /mnt/lv-xfs-cached
$ sudo mount /dev/cache/origin_device_reference /mnt/lv-xfs
$ sudo mount /dev/cache/origin_device /mnt/lv-xfs-cached

此后我的设置如下所示:

$ lsblk (filtered of other disks)
NAME                              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                                 8:0    0 931.5G  0 disk 
|-sda2                              8:2    0   931G  0 part 
| |-cache-origin_device_reference 252:4    0   200G  0 lvm  /mnt/lv-xfs
| `-cache-origin_device_corig     252:3    0   200G  0 lvm  
|   `-cache-origin_device         252:0    0   200G  0 lvm  /mnt/lv-xfs-cached
nvme0n1                           259:0    0 372.6G  0 disk 
|-cache-cache_block_cdata         252:1    0    60G  0 lvm  
| `-cache-origin_device           252:0    0   200G  0 lvm  /mnt/lv-xfs-cached
`-cache-cache_block_cmeta         252:2    0     2G  0 lvm  
  `-cache-origin_device           252:0    0   200G  0 lvm  /mnt/lv-xfs-cached

$ sudo dmsetup table
cache-cache_block_cdata: 0 125829120 linear 259:0 2048
cache-origin_device_reference: 0 419430400 linear 8:2 423626752
cache-cache_block_cmeta: 0 4194304 linear 259:0 125831168
cache-origin_device: 0 419430400 cache 252:2 252:1 252:3 128 1 writethrough smq 0
cache-origin_device_corig: 0 419430400 linear 8:2 2048

请注意,dm-cache 已经发生了很大变化。仍有许多指南建议使用“dmsetup message ...”调整缓存,但所有这些都是旧“mq”策略的一部分。请参阅内核文档。如今,随机多队列 (smq) 是默认设置,被认为是更高级的,并且没有任何调整旋钮。自内核 4.6 以来,甚至删除了“mq”,并将其作为 smq 策略的别名。

真是太基本基准测试有两个慢速同步 io 顺序磁盘爬虫和两个 aio 随机热点(并非所有爬虫都能放入缓存,但热点很容易做到)。还有更多细节如果您想查看结果,可以查看结果。结果比没有缓存时好得多,但测试用例不够复杂,无法详细检查。

Uncached
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.10     0.20  259.95  126.45  1840.00   599.32    12.63    65.96  170.43  126.56  260.62   2.59 100.00
dm-4              0.00     0.00  260.05  126.65  1840.00   599.32    12.62    65.99  170.37  126.53  260.39   2.59 100.00
   READ: io=1109.4MB, aggrb=1891KB/s
  WRITE: io=370212KB, aggrb=616KB/s


Cached
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.85    1.75  395.75   112.00  1679.40     9.01    33.18   83.44   82.97   83.44   2.52 100.00
nvme0n1         755.05     0.00 159339.95    0.25 873790.40    16.00    10.97    25.14    0.16    0.16    0.00   0.01 100.12
dm-0              0.00     0.00 156881.90  395.95 873903.00  1679.40    11.13    58.35    0.37    0.16   84.19   0.01 100.12
dm-1              0.00     0.00 160095.25    0.25 873791.00    16.00    10.92    25.41    0.16    0.16    0.00   0.01 100.10
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-3              0.00     0.00    1.75  396.60   112.00  1679.40     8.99    34.50   86.51   82.97   86.52   2.51 100.00
   READ: io=415116MB, aggrb=708356KB/s
  WRITE: io=1004.8MB, aggrb=1714KB/s

这不应该成为关于 bcache、dm-cache 等的讨论,正如我在开头所说的,我通常也更喜欢 bcache,但这不是重点。但是另一方面,如果您对 dm-cache 有任何建议,请随时使用评论部分。

相关内容