

使用 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
-
41
作者 | AISHWARYA SINGH 编译 | VK 来源 | Analytics Vidhya 概述 高斯混合模型是一种强大的聚类算法 ...
-
19
目前很多网站使用PNG来做图标,那么能否通过CSS更改其颜色? 从而适应不同的网站风格? 混合模式 css3添加了两个与混合模式相关的属性: mix-blend-mode,background-blend-mode 这种方法的基本...
-
13
iMac - @Essaim - 同事买了个 21.5 的 iMac,加固态开始想着太贵,然后问我有没有动手能力,我找了一些 ifix 拆解之类的视频看之后,觉得没问题,就应允了,然后今天拆开之后发现,不选混合硬盘,居然直接把 M.2
-
15
英特尔发布傲腾H20混合固态硬盘:能为PC提速近一倍 新酷产品第一时间免费试玩,还有...
-
6
上一节介绍了 linux 操作系统中信号的概念,我们知道了崩溃性错误通常会伴随着信号的产生。例如段错误引发的 SIGSEGV 信号,0 做除数引发的 SIGFPE 信号等等。
-
14
AWS 在 2020 年12 月举行的 re:Invent 大会上发布了 EKS-D ,此举旨在联合合作伙伴,开源 AWS 维护大规模 EKS 集群的经验,帮助用户实现混合云场景下 Kubernetes 的一致性的体验。本文...
-
9
我們最近有個專案需求特別複雜,由於是個已經持續維護 10 年的系統要改版,很多商業邏輯已經不可考,只能從程式碼中找尋蛛絲馬跡。不過,有些資料的欄位來自於程式碼,但更多來自於一組極其複雜的動態資料表設計。我們除了從現有的頁面上進行新系統設計外,有時...
-
7
使用 Python 自制 expect 功能 本文来自依云's Blog,转载请注明。 ...
-
8
This is a simple guide, part of a series I'll call 'How-To Guide Without Ads'. In it, I'm going to document how I set up bcache on a Raspberry Pi, so I could use an SSD as a cache in front of a RAID array. Getting bcache...
-
7
V2EX › 推广 自制的兔年红包封面,欢迎 v 友们使用
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK