我在 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 配置中,仅用于缓存目的。还有多种模式可以提高性能(读取或写入)或可靠性。