我正在使用 ubuntu 在树莓派 4 上测试 bache。我选择 ubuntu 的原因是我发现标准 raspbian 在 bcache 方面存在一些问题,因为内核模块未正确加载。我尝试进行一些故障排除,但后来我转移到 ubuntu,它立即就可以工作了
我的设置是这样的。
1 x 1TB HGST 5400RPM 2.5 laptop hard disk
1 x 256GB WD Green 2.5 SSD
Raspberry pi 4 4GB model with large heat-sink for cooling and 4A power.
我使用 USB 3.0 端口将 HDD 和 SSD 连接到树莓派(均为外部供电)并启动至 ubuntu。首先我测试了欠压错误,发现一切正常。
SSD -> /dev/sda
HDD -> /dev/sdb
然后我在两个驱动器上创建 1 个分区并创建 bcache,如下所示。
make-bcache -B /dev/sdb1
make-bcache -C /dev/sda1
然后我将 /dev/bcache0 安装在 /datastore 上
然后我按如下方式连接缓存设备
echo MYUUID > /sys/block/bcache0/bcache/attach
然后我启用回写缓存
echo writeback > /sys/block/bcache0/bcache/cache_mode
然后我安装了 vsftpd 服务器并将根 ftp 目录作为我的 bcache0 挂载点,然后开始测试。最初的几次测试我可以上传文件 113MBps,并且我注意到大多数文件直接写入支持设备,即使附加了缓存也是如此。
当我使用 bcache-status 脚本测试状态时https://gist.github.com/damoxc/6267899我看到大部分写入未命中缓存并直接写入支持设备,113MBps 直接来自机械硬盘:-O?
然后我开始微调。正如本部分的性能故障排除部分所建议的https://www.kernel.org/doc/Documentation/bcache.txt文档
首先,我通过执行此命令将equential_cutoff设置为零
echo 0 > /sys/block/bcache0/bcache/sequential_cutoff
此后我可以立即看到 SSD 设备缓存命中率增加。同时我连续运行 iostat。我可以从iostat看到SSD正在被直接访问。但几分钟后,我的 filezilla 客户端挂起,并且无法重新启动 FTP 上传流。当我尝试访问 bcache0 挂载时,速度非常慢。缓存状态显示为“脏”
然后我重新启动 pi 并再次连接该设备。并设置以下设置
echo 0 > /sys/fs/bcache/MYUUID/congested_read_threshold_us
echo 0 > /sys/fs/bcache/MYUUID/congested_write_threshold_us
根据https://www.kernel.org/doc/Documentation/bcache.txt这篇文章是为了避免 bcache 跟踪支持设备延迟。但即使在这个选项之后。我的 FTP 上传流不断崩溃。然后我将所有设置恢复为默认值。仍然有大量文件上传它崩溃
我注意到在测试中 pi CPU 没有得到充分利用。
我使用 pi 4 1Gbps 以太网可以获得的最大吞吐量是 930Mbps,这非常好。当我使用 NTFS 水晶盘进行测试时,HGST 驱动器的写入速度可达 90MBps。由于文件系统是 ext4,我似乎可以在 pi 上获得 113MBps。
如果我能获得超过 80MBps 的 ftp 上传速度,我就可以接受。我的问题是
为什么与 bcache 一起使用时 FTP 流不断崩溃以及为什么 bcache 安装随着时间的推移变得缓慢。
为什么即使将equential_cutoff设置为0,缓存使用率也非常低
有人用 Raspberry PI 4 测试过 bcache 吗?如果是的话我怎样才能正确使用SSD进行缓存
最后有人可以详细解释一下 bcache 在写回模式下如何实际工作。我仅将其用于存档数据,并且不需要访问 SSD 类型设置上的热数据。
答案1
我按照以下说明设法解决了这个问题https://www.raspberrypi.org/forums/viewtopic.php?t=245931这个话题。
这是由于 Raspberry PI 4 USB 3.0 UASP 驱动程序问题导致我的外部 SSD 连接间歇性。在 cmdline.txt 添加行以忽略 UAS 接口后,我的 SSD 和 bcache 都可以完美工作
基本上您需要找到您的外部 USB 3.0 SSD/外壳 VID 和 PID
lsusb
然后我必须编辑 cmdline.txt 并在文件末尾添加以下行。其中 aaaa 等于 VID,bbbb 等于 PID
usb-storage.quirks=aaaa:bbbb:u
然后重新启动树莓派。重新启动后,我的 SSD 稳定,并且我在 kern.log 中看不到任何有关 UAS 接口的错误
除此之外,bcache 设置在 Raspberry pi 4 上完美运行。我使用 Ubuntu 进行测试