我可以使用 SSD 缓存 mdadm raid 吗?

我可以使用 SSD 缓存 mdadm raid 吗?

我在 Ubuntu 8 上设置了一个 1TB 阵列,raid 1用于mdadm存储关键任务文件。我想通过缓存到 SSD 来加快读/写速度,尤其是对于大文件。这可能吗?是否mdadm包含缓存到另一个驱动器的功能?

或者,我应该做些什么来将普通 RAM 分配给缓存?有 4GB RAM,要写入的文件很少大于 1GB,所以我认为仅使用 RAM 缓存,写入应该相当快。

任何帮助将不胜感激。

答案1

mdadm 是否包含缓存到另一个驱动器的功能?

不,Linux 软件 RAID(由 管理mdadm)纯粹是为了创建一组磁盘冗余目的。1

我知道有两个项目将要让你这样做:dm-缓存闪存缓存(两者都是相对实验性的)。它使您可以将 SSD 用作较慢硬盘或任何其他块设备(如 md 设备)的缓存(读取和写入)。两者都提供了巨大的性能提升,并且非常易于调整以在耐用性和性能之间找到平衡。

不幸的是,目前它还没有打包或包含在内核中。因此,在 Ubuntu 中这不是一项非常简单的任务。您可以随意动手,但请记住,这是一款实验性软件,很难获得支持。

相关问题:

1 不过,你可以暗示内核主要使用其中一个驱动器进行读取,以获得一些读取性能的改进,但这与真正的 SSD 缓存并不完全相同。请参阅Gilles 的这个回答如何做到这一点。


我应该做些什么来将普通内存分配给缓存?

每个 Linux 内核都已启用此功能!您可以使用以下命令查看缓存页面的数量free

free -m
             total       used       free     shared    buffers     cached
Mem:         24047      17703       6343          0       6492       3550
-/+ buffers/cache:       7660      16386
Swap:         3811          0       3811

这里你可以看到缓存中现在有 3550 MB 的页面(文件系统级别),我的机器上有 6492 MB 的页面(块设备级别)。读取其中一个不会导致从磁盘读取。

为了演示块级缓存,请尝试以下命令:

hdparm -Tt /dev/md127  # replace with your device - try both disks and md devices!

/dev/md127:
 Timing cached reads:   8624 MB in  2.00 seconds = 4313.50 MB/sec
 Timing buffered disk reads: 282 MB in  2.93 seconds =  96.31 MB/sec

第一个结果显然来自内存中的缓存,而第二个结果则是直接从磁盘读取的。

为了演示基于文件系统的缓存,使用dd

# first time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 25.9253 s, 229 MB/s

# second time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 4.91444 s, 1.2 GB/s

# third time, with file system cache disabled using iflag=direct
# yields results similar to first one
# Try using a bigger blocksize (bs=10M for example) if you're seeing very low speeds
dd if=/home/gert/bigfile.img of=/dev/null iflag=direct

答案2

对于 RAID4/5/6 有一个类似的解决方案: https://www.kernel.org/doc/Documentation/md/raid5-cache.txt

您可以选择将额外的驱动器添加到 RAID4/5/6 配置中,仅用于缓存目的。还有多种模式可以提高性能(读取或写入)或可靠性。

相关内容