bcache 状态/配置 文件详细介绍(翻译自官网)
声明:
- 文中 斜体带下划线 的段落为翻译不够准确的段落
- 原文:https://www.kernel.org/doc/Documentation/bcache.txt
- 官网:https://bcache.evilpiepirate.org/
什么是bcache
bcache是linux内核块层cache.它使用类似SSD来作为HDD硬盘的cache,从而起到加速作用。 HDD硬盘便宜并且空间更大,SSD速度快但更贵。如果能两者兼得,岂不快哉?bcache能做到。
bcache使用SSD作为其他块设备cache.类似ZFS的L2Arc,但bcache还增加了写回策略,并且是与文件系统无关的。bcache被设计成只需要最小的代价,无需配置就能在所有环境中工作。默认状态下bcache不缓存顺序IO,只缓存随机读写。
bcache适用于桌面、服务器,高级存储阵列,甚至是嵌入式环境。设计bcache目标是让被缓存设备与SSD一样快(包括缓存命中、缓存不命中、透写和回写)。现在还未达到初衷,特别是顺序写。同时测试结果表明离目标很接近,甚至有些情况下表现更好,例如随机写。
bcache是数据安全的。对于写回策略缓存来说,可靠性是非常重要的,出错就意味着丢失数据。bcache是用电池备份阵列控制器的替代选择,同时也要求bcache在异常掉电时也是数据安全的。对于写而言,必须在所有数据写到可靠介质之后才能向上层返回写成功。如果在写一个大文件时掉电了,则写入是失败的。异常掉电数据安全是指 cache 中的脏数据是不会丢的,不像内存中的脏数据掉电就没了。
bcache性能设计目标是等同于SSD.最大程度上去最小化写放大,并避免随机写。bcache将随机写转换为顺序写,首先写到SSD,然后回写缓存使用SSD缓存大量的写,最后将写有序写到磁盘或者阵列上。对于RAID6阵列,随机写性能很差,还要花费不菲的价格购买带有电池保护的阵列控制器。现在有了bcache,你就可以直接使用linux自带的优秀软RAID,甚至可以在更廉价的硬件上获取更高的随机写性能。
特性:
1、一个缓存设备可以作为多个设备的缓存,并且可以在设备运行时动态添加和删除缓存。
2、只有当写到磁盘后缓存才会确认写完成。
3、正确处理写阻塞和刷缓存
4、支持writethrough, writeback和writearound
5、检测并避开顺序IO(可配置关闭该选项)
6、当检测到SSD延迟超过配置边界值,减少到SSD流量(当一个SSD作为多个磁盘缓存时使用)
7、缓存不命中时预读(默认关闭)
8、高性能的 writeback 实现:脏数据都是排序后再回写。如果设置了 writeback 水位线,PD控制器会根据脏数据比例来平滑处理到后台writeback流量。
9、使用高效率的 B+树,bcache随机读可以达到1M IOPS
10、稳定
安装
调优
错误处理
- 对于从缓存读取,如果它们出现错误,将从 backing device 重新尝试读取
- 对于 writethroungh writes,如果写入缓存错误,我们只需切换到缓存中的 lba(Logical Block Address, LBA) 上使数据无效(即我们为绕过 cache write 做同样的事情)
- For writethrough writes, if the write to the cache errors we just switch to invalidating the data at that lba in the cache (i.e. the same thing we do for a write that bypasses the cache)
- 对于 writeback writes,我们目前将该错误传递给文件系统/用户空间。这可以改进 - 我们可以尝试绕过缓存的写入,所以可心避免写入错误。
- 对于分离操作,我们首先尝试刷新任何脏数据(如果我们以 writeback 模式运行)。但是,如果它无法读取脏数据,它将不会做任何操作。
BACKING DEVICE
- no cache:从未附加到缓存集。
- clean:部分缓存集,且 cache 没有脏数据。
- dirty:部分缓存集,且 cache 有脏数据。
- inconsistent:backing device 被用户强制运行后 cache 中存在脏数据但缓存集不可用时;backing device 上的任何数据可能已损坏
BACKING DEVICE 状态统计:
bdev0 -> ../../../devices/pci0000:/::02.2/::00.0/host0/port-:/expander-:/port-::/end_device-::/target0::/:::/block/sdg/bcache
cache0 -> ../../../devices/pci0000:/::02.2/::00.0/host0/port-:/expander-:/port-::/end_device-::/target0::/:::/block/sdf/bcache
CACHE SET INTERNAL
- 延伸知识:在SSD上使用TRIM,默认是不开启的 (固态硬盘(SSD)为什么需要TRIM?,TRIM 的解释查看参考资料 Trim)
关于缓存中最近的数据被访问的统计信息。这可以显示您的工作集大小。
- Unused:是不包含任何数据的缓存的百分比
- Metadata:是bcache的元数据占的百分比
- Average:是 cache buckets 的平均优先级。
- Quantiles:是每个具有优先级阈值的分位数的列表
- 原文:
- a list of quantiles with the priority threshold of each
bcache 状态/配置 文件详细介绍(翻译自官网)的更多相关文章
- bcache 状态/配置 文件详细介绍
什么是bcache bcache是linux内核块层cache.它使用类似SSD来作为HDD硬盘的cache,从而起到加速作用. HDD硬盘便宜并且空间更大,SSD速度快但更贵.如果能两者兼得,岂不快 ...
- vue 文件插件 Vetur 设置说明官网
vue 文件插件 Vetur 设置说明官网 https://vuejs.github.io/vetur/formatting.html#settings
- vue中eslintrc.js配置最详细介绍
本文是对vue项目中自带文件eslintrc.js的内容解析, 介绍了各个eslint配置项的作用,以及为什么这样设置. 比较详细,看完能对eslint有较为全面的了解,基本解除对该文件的疑惑. /* ...
- kubernetes实战篇之helm示例yaml文件文件详细介绍
系列目录 前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm ...
- springmvc系列一 之配置介绍(包含官网doc)
1.springmvc 官网参考地址: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html 2 ...
- Spring Boot2(001):入门介绍和一些官网链接参考
Spring官方文档比较齐全,学习的过程中可以多参考官方文档,最权威的版本.01.Spring Boot的一些官方链接 01.01 Spring Boot官网 https://spring.io/pr ...
- log4j的log4j.properties文件配置的详细介绍
参考(common): http://blog.csdn.net/qq_30175203/article/details/52084127 参考2(log4j.additivity): http:// ...
- CCNA网络工程师学习进程(4)网络设备的基本配置和详细介绍
网络设备(路由器.交换机和防火墙等)与计算机一样需要操作系统.网络设备采用专用的操作系统,统称为IOS(Internetwork Operating System,网络操作系统). ( ...
- Ceph14.2.5 RBD块存储的实战配置和详细介绍,不看后悔! -- <3>
Ceph RBD介绍与使用 RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型.RBD块设备类似磁盘可以被挂载. RBD块设备具有快照.多副本.克隆 ...
随机推荐
- WeakMap 本身释放,而 keyObject 没有释放的情况下,value 会释放吗?
const keyObject = ['keyObject']; new WeakMap().set(keyObject, ['value']); 问题:现在 ['value'] 会被释放吗? 听说W ...
- Linux 笔记 - 第十九章 配置 Squid 正向代理和反向代理服务
一.简介 Squid 是一个高性能的代理缓存服务器,对应中文的乌贼,鱿鱼的意思.Squid 支持 FTP,gopher 和 HTTP 协议.和一般的代理缓存软件不同,Squid 用一个单独的,非模块化 ...
- 59 (OC)* atomic是否绝对安全
场景:如今项目中有这样一个场景,在一个自定义类型的Property在一个线程中改变的同时也要同时在另一个线程中使用它,使我不得不将Property定义成atomic,但是由此发现atomic并不会保证 ...
- mysql安装和配置环境
第一步:打开网址,https://www.mysql.com,点击downloads之后跳转到https://www.mysql.com/downloads 第二步 :跳转至网址https://dev ...
- Python虚拟环境管理工具virtualenvwrapper安装及配置
1. 安装virtualenv 使用pip install virtualenv安装virtualenv虚拟环境工具 2. 安装virtualenvwrapper a) Linux环境,直接使用p ...
- 【Django】一对多表结构
1.创建project数据库表 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.co ...
- Spring 梳理 - 构造web项目时,使用eclipse如何引用jar包
方法1:直接将jar复制到web项目中的WEB-INF/lib目录中 方法2:构造buildpath时,不使用“外部jar”的形式
- 一个低级错误引发Netty编码解码中文异常
前言 最近在调研Netty的使用,在编写编码解码模块的时候遇到了一个中文字符串编码和解码异常的情况,后来发现是笔者犯了个低级错误.这里做一个小小的回顾. 错误重现 在设计Netty的自定义协议的时候, ...
- Kubernetes 系列(一):本地k8s集群搭建
我们需要做以下工作: (1)安装VMware,运行CentOs系统,一个做master,一个做node. (2)安装K8s. (3)安装docker和部分镜像会需要访问外网,所以你需要做些网络方面的准 ...
- Python3 学习笔记之 变量/字符串/if/while/逻辑运算符/模块引用
变量/if/while/逻辑运算符/模块引用: 变量: 使用变量前必须先赋值. 大小写区分. Python创建字符串,在字符串两边可以加上单引号或者双引号. 打印单引号或双引号,使用转移\ 使用\进行 ...