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

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

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

任何帮助将不胜感激。

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

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

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

不幸的是,这个尚未打包或包含在内核中。 因此,在Ubuntu中执行它并不是一项非常简单的任务。 随意弄脏你的手,但要记住它是一些实验性的软件,很难获得支持。

相关问题:

  • 如何安装和使用flashcache / bcache将HDD缓存到SSD?
  • SSD和两个硬盘驱动器的raid建议

1 但是,您可以提示内核使用其中一个驱动器进行主要读取,以获得读取性能的一些改进,但这与真正的SSD缓存并不完全相同。 请参阅Gilles关于如何执行此操作的答案 。


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

这已经在每个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