
新钛云服已为您服务1048天

大咖专栏
什么是Bcache?
如今,一些SSD的顺序读写性能也比单个HDD盘要好,但无法与某些SAS的RAID进行比较。尽管如此,SSD在随机IO中表现仍然会更好。有一个可配置选项允许bcache也可以缓存顺序的读写。Bcache缓存模式
“writeback”:
最高性能的缓存模式。 写入设备的数据首先写入ssd,然后异步复制到后端设备,在SSD上复制结束时,写入就被视为完成。为了安全起见,此处的机制始终确保在将数据完全写入后端设备(脏页)之前,不认为任何数据是安全的,因此,如果在SSD上仍存在数据时断电,则在下次启动时,数据将被推回支撑设备。这是使bcache能够和软件Linux Raid与具有BBU的硬件Raid设备一样安全。
“writethrough”:
安全缓存模式。 写入设备的数据将同时复制到ssd和HDD上,在HDD写入结束时,写入才被视为完成。因此,这往往比“writeback”更为安全,但缺乏一些性能。
“writearound”:
只读缓存模式。 写入设备的数据直接进入HDD,而根本不写入SSD,因此不会对写有任何性能提升。第一次读取此数据时,将从HDD中读取该数据。这样做的好处是有更多空间用于缓存读取,并减少了SSD的磨损。
“none” :
停用缓存功能(但/dev/bcache设备仍然可用)
sudo cat sys/block/bcache0/bcache/cache_mode
writethrough [writeback] writearound none
sudo su - -c 'echo writethrough > sys/block/bcache0/bcache/cache_mode'
sudo cat sys/block/bcache0/bcache/cache_mode
[writethrough] writeback writearound none
使用Bcache
Bcache是从Linux-3.10开始正式并入内核主线的,因此,要使用Bcache,需要将内核升级到3.10及以上版本才行。(本文使用ubuntu 20.04) 固态硬盘 普通hdd硬盘
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install bcache-tools
系统将位于/dev/sda hdd硬盘(称为后端设备)将为/dev/sdb ssd(称为缓存设备)将为/dev/sdc。
sudo dd if=/dev/zero if=/dev/sdb bs=512 count=8
sudo dd if=/dev/zero if=/dev/sdc bs=512 count=8
wipefs -a dev/sdb
wipefs -a dev/sdc
make-bcache -C dev/sdc -B dev/sdb
make-bcache -C dev/sdc -B dev/sdb --discard --writeback
-C用于您的缓存设备(ssd) -B用于您的后端设备(hdd) --discard用于在ssd上使用TRIM,默认情况下未激活。 --writeback使用缓存模式写回,默认情况下它设置为直写。
fstrim提供此功能,它可以为写入新数据而准备驱动器,并延长驱动器的使用寿命。由于在我使用的 Linux 发行版上 SSD 的 trim 不是自动的,所以必须去调度该操作,否则 SSD 的性能会随着时间的推移而降低。
ls dev/bcache*
/dev/bcache0
sudo mkfs.ext4 dev/bcache0
sudo mkdir media/bcache
sudo mount dev/bcache0 media/bcache
sudo su - -c “/dev/bcache0 media/bcache ext4 rw 0 0 >> etc/fstab”
blkid dev/bcacheX
一些简单的性能测试
将基础镜像复制n份,并同时启动n个vm,直到它们都关闭电源。 同时启动n个虚拟机,直到它们全部断电。
kvm -m 512 -nographics -drive if=virtio,file=${BASE}${BASE_IMAGE} -net nic -net user -k fr --kernel $BASE/vmlinuz --initrd $BASE/initrd --append "root=/dev/vda1 nomodeset"
HDD only:
SSD only:
Bcache writearound模式:
Bcache writethrough模式:
Bcache writeback模式:
恢复先前配置的bcache设备
sudo modprobe bcache
sudo su - -c ‘echo bcache >> etc/modules’
sudo bcache-super-show -f dev/sdb
sudo bcache-super-show -f dev/sdc
sudo su - - c ‘echo /dev/sdb > /sys/fs/bcache/register’
sudo su - - c ‘echo /dev/sdc > /sys/fs/bcache/register’
sudo mount /dev/bcacheX /media/bcache
删除bcache
Backup:
Umount:
sudo umount -v /dev/bcache0
Stopping the bcache:
sudo su - -c "echo 1 >/sys/fs/bcache/......../unregister"
sudo su - -c "echo 1 >/sys/block/bcache0/bcache/stop"
sudo wipefs -a /dev/sdX_caching
sudo wipefs -a /dev/sdY_backing
ceph 中的Bcache
SSD和HDD不支持热插拔 从缓存池中卸载HDD时,需要等待所有脏数据被刷新,这需要很长时间 当硬盘损坏时,无法删除SSD中相应的脏数据,从而浪费空间 系统重启后无法恢复精简闪存卷
当上层中的大量随机写入IO充满了缓存空间时,您必须等待所有脏数据被刷新,然后才能继续为写入IO提供缓存 当GC线程运行时,它将导致业务IO的波动 Bcache元数据缓存会占用大量内存。当系统内存不足时,无法缓存大量的元数据。需要从SSD读取它并影响性能
为每个SSD创建一个缓存池,将相同数量的HDD附加到每个缓存池 从每个缓存池创建一个精简闪存卷,以将每个OSD的OMAP目录分离到其中 日记可以独立放置到SSD中,也可以从缓冲池中创建多个精简卷来写入日记
每月第1周首篇 大咖专栏
新钛云服布道师 祝祥
· 资深云计算架构师
· OpenStack官方特邀讲师
· 上万台云主机和几十PB分布式存储的
建设管理经验

点👇分享

戳👇在看
文章转载自新钛云服,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





