我可以使用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