使用 bcache 自制「混合硬盘」
source link: https://blog.lilydjwg.me/2015/5/11/self-made-sshd-with-bcache.92025.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
使用 bcache 自制「混合硬盘」
本文来自依云's Blog,转载请注明。
换了新本子,外存是1T机械硬盘和16G固态硬盘。这16G SSD 速度挺快的尤其是读的时候,可它拿来放 / 都不够呢,于是拿来作缓存加速。根据局部性原理,虽然数据很多,但是最常访问的只占其中一小部分呢。
搜索的结果是有三个方案:bcache、dm-cache 和 Facebook 的 flashcache。前两者在官方内核里,不需要另外安装。我是最先在 Arch Wiki 上看到 bcache 的,后来又看 dm-cache,发现需要自己指定元数组的存储什么的,略复杂。而且一些评测显示 bcache 性能要好一点,所以就它了。
配置起来其实很简单。首先安装 AUR 里的 bcache-tools,然后创建存储数据的分区和用于缓存的分区:
make
-bcache -B
/dev/sda2
make
-bcache -C
/dev/sdb1
教程上使用的是 SSD 的分区。换成 SSD 的块设备本身应该也可以。
参数什么的我没调。然后是把缓存设备的 UUID 写到 /sys/block/bcache0/bcache/attach 里。
为了最优性能,往 /sys/block/bcache0/bcache/cache_mode 里写入「writeback」来更改其缓存策略为「写回」。默认是「写通」(writethrough),也就是写的时候同时写缓存和后端设备,不会在缓存出问题时丢数据,但是会慢。另一个可选的策略是「writearound」,不知道该怎么译,是只写到后端设备而不写缓存的。最后一个是「none」,不知道用了它会发生什么……
换出策略使用默认的 LRU(最近最少使用)。剩下的两个(FIFO 和随机)应该效果没 LRU 好。
这些设备是会记住的,无需在启动时重启配置。至少我用的 4.0.1 内核是这样。
弄好之后就可以折腾 /dev/bcache0 这个块设备了。我放弃了之前使用文件级的 eCryptfs,改用在备份里使用得挺爽的块设备级的 dm-crypt,然后才格式化成 ext4。也就是:
所以我的 /etc/mkinitcpio.conf 里要加上 bcache 和 encrypt 两个 hook:
HOOKS=
"base udev autodetect modconf block bcache encrypt filesystems keyboard fsck resume"
(不过这样子不能用外接 USB 键盘输入密码的。)
然后 mkinitcpio -p linux 一下,生成新的 initramfs 镜像。
为了共享缓存,我把 / 和 /home 放一起了(不过我猜对 /dev/bcache0 进行分区也是可以的?)。虽然这样子整个 / 用去了60多G空间,但是缓存的命中率还是非常高的——
>>> bcache-status -a
--- bcache ---
Device /dev/bcache0 (254:0)
UUID 07a9b6a5-7f18-4950-84d6-c90abaaf65dc
Block Size 0.50KiB
Bucket Size 512.00KiB
Congested? False
Read Congestion 2.0ms
Write Congestion 20.0ms
Total Cache Size 14.91GiB
Total Cache Used 14.91GiB (100%)
Total Cache Unused 0B (0%)
Dirty Data 0.50KiB (0%)
Evictable Cache 14.17GiB (95%)
Replacement Policy [lru] fifo random
Cache Mode writethrough [writeback] writearound none
Last 5min Hits 439 (92%)
Last 5min Misses 38
Last 5min Bypass Hits 424 (100%)
Last 5min Bypass Misses 0
Last 5min Bypassed 61.50MiB
Last Hour Hits 46003 (88%)
Last Hour Misses 6051
Last Hour Bypass Hits 94043 (100%)
Last Hour Bypass Misses 0
Last Hour Bypassed 400.00MiB
Last Day Hits 79485 (88%)
Last Day Misses 10214
Last Day Bypass Hits 170383 (100%)
Last Day Bypass Misses 0
Last Day Bypassed 602.00MiB
Total Hits 79485 (88%)
Total Misses 10214
Total Bypass Hits 170383 (100%)
Total Bypass Misses 0
Total Bypassed 602.00MiB
bcache-status 脚本来自这里。
感觉还挺快的,特别是各种程序如火狐、gvim、pidgin、zsh 的启动速度,以及 mlocate、pacman 的搜索速度都非常快。没有对比数据,因为我没有试过在这个本子上不用 bcache 的情况下把系统弄起来。之前的旧本子可能因为分区太满导致碎片严重,所以 I/O 性能很差劲的。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK