据我所知,/sys/block/md0/md/stripe_cache_size 针对 raid5 和 6 设置了非常低的默认值,以避免机器内存不足。
通过增加此值,您可以显著提高 RAID 阵列的速度。默认值为 256,据我所知,这“翻译”为 256 * 4096 * 个磁盘。因此,对于 8 个磁盘的 RAID 6,这意味着使用了 8 兆字节的内存。
我认为这将相当于每块磁盘约 1 兆字节。现在,大多数磁盘至少有 32MB 的缓存,有时甚至更多。为了能够使用磁盘的所有缓存,我推测 8192 或稍小的值会比较好,并且不会比默认值产生更高的损坏最坏情况。此外,RAID 阵列现在消耗 268MB 的内存,但这是我愿意做出的权衡,除非更改此值会显著增加损坏或数据丢失的风险。
- stripe_cache_size到底是什么?
- 它是如何工作的?
- 增加该值是否会增加损坏/数据丢失的风险?
- 内存使用率是其默认设置较低的唯一原因吗?
答案1
- 据我了解,这是完整数据条带的缓存,准备写入磁盘(包括奇偶校验数据)。
- 在将条带写入磁盘之前,必须在某处形成它。
- 这取决于具体情况。我通常会增加 stripe_cache_size,但减少 dirty bites 缓存,这样所有数据都会直接传送到 MD 驱动程序。这样多年来我都没有遇到数据损坏的情况
这是我如何增加
/etc/udev/rules.d/83-md-stripe-cache.rules KERNEL=="md*", ACTION=="add", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="32768"
这是价值下降
vm.dirty_background_bytes = 2097152
- 为了安全起见,它默认设置为低,而不是为了节省内存。