我目前正在使用实用程序在 Linux 下构建软件 RAID mdadm
,并且阅读了一些文章,这些文章描述了如何增加该 RAID 的 stripe_cache_size 值以及如何计算 stripe_cache_size 的适当值。
我已将我的设置增加到 16384,/proc/mdstat 中新 RAID5 上的当前同步率已从 71065K/秒跃升至 143690K/秒(翻倍!),这是个好消息。我还看到 RAM 使用率也出现了相应和预期的增长,但我找不到任何关于此设置的作用及其工作原理的文档。
它似乎是 RAM 中存在的 RAID 的某种缓存。从它的名称以及更改它所看到的效果来看,我只能知道这些。有没有关于此设置及其说明的官方“Linux”文档?
答案1
据我所知,stipe_cache_size 是条带缓存中的条带条目数。条带条目因系统而异,但主要由页面大小控制(Linux 系统上的默认值为 4096 字节)(https://github.com/torvalds/linux/blob/master/drivers/md/raid5.c#L73,如果您想深入挖掘,此文件具有条带缓存的所有逻辑)因此在 4 磁盘 RAID5 中,32768 的 stripe_cache_size 将花费您 512MB 的 RAM。据我所知,它只影响 raid5。
以下是 2 个文档参考:-https://github.com/torvalds/linux/blob/master/Documentation/md.txt#L603 -https://raid.wiki.kernel.org/index.php/Performance#Some_problem_solving_for_benchmarking
答案2
这有助于向我解释目的:https://docs.kernel.org/driver-api/md/raid5-cache.html
回写模式
写回模式也修复了“写入漏洞”问题,因为所有写入数据都缓存在缓存磁盘上。但“写回”缓存的主要目标是加快写入速度。如果写入跨越条带的所有 RAID 磁盘,我们称之为全条带写入。对于非全条带写入,MD 必须先读取旧数据,然后才能计算新的奇偶校验。这些同步读取会影响写入吞吐量。一些连续但未同时分派的写入也会受到此开销的影响。写回缓存将聚合数据,并在数据成为全条带写入后将数据刷新到 RAID 磁盘。这将完全避免开销,因此对某些工作负载非常有帮助。典型的工作负载是先执行顺序写入,然后执行 fsync,这就是一个例子。
在写回模式下,数据到达缓存盘后,MD 会立即向上层(通常是文件系统)报告 IO 完成。在满足特定条件后,数据才会刷新到 raid 磁盘。因此缓存盘故障将导致数据丢失。
在写回模式下,MD 还会将数据缓存在内存中。内存缓存包含存储在缓存磁盘上的相同数据,因此断电不会导致数据丢失。内存缓存大小会影响阵列的性能。建议大小较大。用户可以通过以下方式配置大小:
echo "2048" > /sys/block/md0/md/stripe_cache_size 缓存盘太小会导致此模式下写入聚合效率降低,具体取决于工作负载。建议在写回模式下使用至少几 GB 大小的缓存盘。