我正在用 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文档的故障排除性能部分所建议的那样
首先我通过执行这个命令将sequential_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,这非常好。HGST 驱动器在我用 NTFS 的水晶磁盘标记进行测试时能够写入高达 90MBps。由于文件系统是 ext4,我似乎可以在 pi 上获得 113MBps。
如果我能获得超过 80MBps 的 ftp 上传速度,我可以接受。我的问题是
为什么 FTP 流在使用 bcache 时不断崩溃,以及为什么 bcache 挂载超时。
为什么即使将sequential_cutoff设置为0,缓存使用率也很低
有人用 Raspberry PI 4 测试过 bcache 吗?如果是,我怎样才能正确使用 SSD 进行缓存
最后,有人可以解释更多关于 bcache 在写回模式下的实际工作原理。我只将它用于存档数据,我不需要访问 SSD 类型的设置上的热数据。