![BCache + MDADM 运行极其缓慢](https://linux22.com/image/904554/BCache%20%2B%20MDADM%20%E8%BF%90%E8%A1%8C%E6%9E%81%E5%85%B6%E7%BC%93%E6%85%A2.png)
我有 3 个 14TB 东芝硬盘管理-ed ( /dev/md0
) 将 5 个 raid 组合在一起,设置为 bcache。我有一个 256GB 的快速 SSD 作为 bcache 的前端。
回写已在 bcache 上启用。
几天后,设备 ( /dev/bcache0
) 变得非常慢。我的意思是第 1000其正常速度。
我有两个问题:
对于 /dev/md0,我应该对这些东芝驱动器进行哪些调整?它是 4k 块 64k 块。
我可以对 bcache 进行任何调整吗?
我甚至不确定我该在这里放什么其他信息。但如果你问我,我会更新这篇文章。谢谢!
更新 1-我的 IOSTAT 读取速度为 100mb/秒,写入速度仅为 3mb/秒: https://pastebin.com/wKKf4LTq
该计算机是配备 32GB RAM 的 amd 2990wx。CPU 不是问题。
我 2010 年左右买的旧 3770k 的读写速度肯定比这个快。这肯定是某种设置或调整。谢谢!
更新 2-当系统正常运行时,下面是 hdparm 的输出。当系统运行不正常时,hdparm 需要很长时间才能运行。
/dev/md0:
Timing cached reads: 11148 MB in 2.00 seconds = 5578.33 MB/sec
Timing buffered disk reads: 1372 MB in 3.00 seconds = 456.84 MB/sec
/dev/bcache0:
Timing cached reads: 12564 MB in 2.00 seconds = 6286.57 MB/sec
Timing buffered disk reads: 1226 MB in 3.00 seconds = 408.66 MB/sec
谢谢!
答案1
对于三星 TLC 内存,我会坚持使用 512k 存储桶大小。这将与每 3 个存储桶的页面大小对齐(通常您会反过来匹配,但没有合理的方法将 1.5MB 与任何存储桶大小 = 2^n 对齐)。使用 4k 的扇区大小。顺便说一句:这假设三星 TLC 使用 1.5MB 页面大小,但这并未在某处正式记录。但对于 2MB 页面大小,512k 仍然是一个安全值,因为它将每 4 个存储桶对齐一次。
另外,请将数据偏移量与 RAID5 设置对齐。bcache 文档对此提供了一些提示。正确执行此操作非常重要。就我个人而言,我还没有尝试过这样的设置,但我猜[sysfs]/bdev*/partial_stripes_expensive
在 RAID-5 中可能也很有趣。
我还猜测,当缓存已满时,速度会变慢。您应该禁用缓存的丢弃功能,由于固件错误,对于许多驱动器来说,这是一个同步操作。相反,删除 bcache cdev,修剪整个分区,然后将分区大小调整为原始大小的 80-90%,将其与 2MB 边界对齐,然后重新创建 bcache。然后,永远不要触碰这个空闲的分区空间,它允许驱动器进行后台磨损均衡,然后不再需要丢弃。您可以创建一个保护分区来保留这个空间,这也使得修剪保留空间变得容易。
要重新创建缓存设备,请通过 sysfs 将其从备份设备中分离,等待完成,然后取消注册,按照正确重新创建的步骤操作,然后将备份设备重新连接到新缓存。这一切都可以在线完成,无需重启。但如果您不习惯这样做,请先进行备份。
答案2
这肯定还在构建或重新索引什么的。不知从何而来,它开始运行得非常快。
因此,如果其他人遇到此问题,请查看您的 mdadm 状态。如果它正在执行任何操作,则可能是原因。此外,默认情况下,它会在每个月的第一个星期日重新索引。