Linux使用bcache 将SSD加速硬盘
前言
在Linux下,使用SSD为HDD加速,目前较为成熟的方案有:flashcache,enhanceIO,dm-cache,bcache等,多方面比较以后最终选择了bcache。 bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或多个高速磁盘驱动器(例如 SSD)作为一个或多个速度低得多的硬盘的超速缓存。bcache 支持直写和写回,不受所用文件系统的约束。默认情况下,它只超速缓存随机读取和写入,这也是 SSD 的强项。它还适合用于台式机、服务器和高端储存阵列。CentOS和Ubuntu都可以使用bcache。bcache是在3.10以后的版本加入mainline的,因此需要3.10以上的内核版本。但是笔者使用Centos 7在3.10.0的内核上进行配置时,发现无法生成相应的配置文件节点,测试过程中使用4.3.3版的内核。
主要功能:
1,可以使用单个超速缓存设备来超速缓存任意数量的后备设备。在运行时可以挂接和分离已装入及使用中的后备设备。
2,在非正常关机后恢复 - 只有在超速缓存与后备设备一致后才完成写入。
3,SSD 拥塞时限制传至 SSD 的流量。
4,高效的写回实施方案。脏数据始终按排序顺序写出。
5,稳定可靠,可在生产环境中使用。
Bcache通过make-bcache命令完成bcache的创建,需要安装相关的工具包bcache-tools。
我们通过编译安装 (Github)
https://github.com/g2p/bcache-tools/archive/refs/tags/v1.0.8.tar.gz
这是最新的v1.0.8,如果要查看其他版本请访问
Tags · g2p/bcache-tools · GitHub
下载源码(我这里使用了github链接代理加速)
wget https://github.moeyy.xyz/https://github.com/g2p/bcache-tools/archive/refs/tags/v1.0.8.tar.gz
解压源码压缩包
tar -zxvf v1.0.8.tar.gz
安装依赖
yum install libblkid-devel -y
编译安装
如果没有make命令请自行安装软件包
make && make install
格式化硬盘分区
应用硬盘到bcache模式之前需要将目标分区格式化为bcache,这一步会破坏磁盘分区中所有数据。方法和信息如下
# 如果磁盘是第一次使用,或完全是空的,第一步通常不用执行,这一步市为了擦除分区文件信息,如果挂载也要先卸载,否则会出现device busy的问题
wipefs -a /dev/sdb /dev/sdc
创建cache 也就是我们的SSD的分区作为缓存
缓存参数意义:
-B: 设置backing device -C: 设置cache device -w: block size (hard sector size of SSD),默认是2K,可使用--block=4K代替 -b: bucket size,可以使用--bucket=1M代替
make-bcache -C /dev/sdc1
查看下
[root@master ~]# bcache-super-show /dev/sdc1
sb.magic ok
sb.first_sector 8 [match]
sb.csum C322F881FE092899 [match]
sb.version 0 [cache device]dev.label (empty)
dev.uuid d3834fdd-d31d-4347-9da3-31064cae77ac
dev.sectors_per_block 1
dev.sectors_per_bucket 1024
dev.cache.first_sector 1024
dev.cache.cache_sectors 20968448
dev.cache.total_sectors 20969472
dev.cache.ordered no
dev.cache.discard no
dev.cache.pos 0
dev.cache.replacement 0 [lru]cset.uuid 0609854c-f083-408b-8ea6-f90d4afd60c6
创建backend
接着创建被加速的backend
make-bcache -B /dev/sdb
这快硬盘就是我们的HDD 机械硬盘
查看下
[root@master ~]# bcache-super-show /dev/sdb
sb.magic ok
sb.first_sector 8 [match]
sb.csum C71B7848F1913A17 [match]
sb.version 1 [backing device]dev.label (empty)
dev.uuid da958760-83c8-4d05-9789-f8b371bd62aa
dev.sectors_per_block 1
dev.sectors_per_bucket 1024
dev.data.first_sector 16
dev.data.cache_mode 0 [writethrough]
dev.data.cache_state 0 [detached]cset.uuid 9a492f33-f28d-41f8-8cb1-3cfd93d07885
注册
echo /dev/sdb > /sys/fs/bcache/register
echo /dev/sdc1 > /sys/fs/bcache/register
设备绑定
往backend附加cache
此处附加的uuid,是在上面查询到的cache的uuid
echo d3834fdd-d31d-4347-9da3-31064cae77ac > /sys/block/bcache0/bcache/attach
相关文章:
Linux使用bcache 将SSD加速硬盘
前言 在Linux下,使用SSD为HDD加速,目前较为成熟的方案有:flashcache,enhanceIO,dm-cache,bcache等,多方面比较以后最终选择了bcache。 bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或…...
大厂报价查询系统性能优化之道!
0 前言 机票查询系统,日均亿级流量,要求高吞吐,低延迟架构设计。提升缓存的效率以及实时计算模块长尾延迟,成为制约机票查询系统性能关键。本文介绍机票查询系统在缓存和实时计算两个领域的架构提升。 1 机票搜索服务概述 1.1 …...
Carbondata编译适配Spark3
背景 当前carbondata版本2.3.1-rc1中项目源码适配的spark版本最高为3.1,我们需要进行spark3.3版本的编译适配。 原始编译 linux系统下载源码后,安装maven3.6.3,然后执行: mvn -DskipTests -Pspark-3.1 clean package会遇到一些网络问题&a…...
数学建模【灰色关联分析】
一、灰色关联分析简介 一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中,哪些是主要因素,哪些是次要因素;哪些因素…...
Vue.js的单向数据流:让你的应用更清晰、更可控
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
IntelliJ IDEA社区版传统web开发环境搭建
前言 现在主流的开发框架是SpringBoot,使用maven配置的开发环境,网上有很多教程,这里记录一下传统Web开发项目(mvc架构的框架,如SSH)使用idea社区版的开发环境搭建。防止被人说都2024年了还用eclipse。 一、下载文件…...
arm-linux-gnueabi、arm-linux-gnueabihf 交叉编译器区别
1、arm-linux-gnueabi: 使用软件浮点(软浮点)。这意味着所有的浮点运算都将由软件库来处理,而不会利用硬件中的浮点运算单元。因此,生成的目标代码包含了对软件浮点库的调用。 2、arm-linux-gnueabihf: 使…...
什么是RS485
RS-485是一种串行通信标准,它是在1980年代由美国电子工业协会(EIA)制定的。它的全称是“Recommended Standard 485”,通常简称为RS-485。RS-485标准定义了信号的电气特性和信号线的布局,它主要用于工业环境RS-485是一种…...
2024.3.4
报式域套接字 #include<myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_UNIX,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}printf("sfd%d\n",sfd);//判断套接字文件是否存在,如果存在…...
STM32自学☞AD单通道
程序的最终运行成果: 当转动电位器时,数值和电压值发生变化 ad.c文件 #include "stm32f10x.h" #include "stm32f10x_adc.h" #include "ad.h" #include "stdint.h" void ad_Init(void) { /* 初始化步骤:…...
打家劫舍(java版)
📑前言 本文主要是【动态规划】——打家劫舍(java版)的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一…...
Python函数位置参数(*args)与关键词参数(**kwargs)的用法
两种向python函数传递参数的方式: 位置参数(positional argument) 关键词参数(keyword argument) *args与**kwargs的区别 两者都是python中的可变参数; args:表示任何多个无名参数,它…...
Java自学day5
流程控制语句 流程控制语句:通过一些语句,控制程序的执行流程 顺序结构 顺序结构语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行! package orderdemo;public class OrderDemo {public static void main(String[] args) {System.out.println("…...
IO-DAY1
1.用fprintf将链表数据保存到文件中 2用fscanf将文件中数据写入链表 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> typedef int datatype; typedef struct link_list { union { int len; d…...
英福康INFICON真空计MPG400MPG401使用说明PPT讲解课件
英福康INFICON真空计MPG400MPG401使用说明PPT讲解课件...
【lua】lua内存优化记录
这边有一个Unity项目用的tolua, 游戏运行后手机上lua内存占用 基本要到 189M, 之前峰值有200多。 优化点1 加快gc频度: 用uwa抓取的lua内存, 和unity的mono很像,内存会先涨 然后突然gc一下,降下来。 这样…...
紫光展锐T618_4G安卓核心板方案定制
紫光展锐T618核心板是一款采用纯国产化方案的高性能产品,搭载了开放的智能Android操作系统,并集成了4G网络,支持2.5G5G双频WIFI、蓝牙近距离无线传输技术以及GNSS无线定位技术。 展锐T618核心板应用旗舰级 DynamlQ架构 12nm 制程工艺&#x…...
Redis 群集部署
1.关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型基础上,-般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。现实世界中…...
WPF中如何设置自定义控件(二)
前一篇文章中简要讲解了圆角按钮、圆形按钮的使用,以及在windows.resource和app.resource中设置圆角或圆形按钮的样式。 这篇主要讲解Polygon(多边形)、Ellipse(椭圆)、Path(路径)这三个内容。 Polygon 我们先看一下的源码: namespace System.Windows.Shapes { pu…...
【C++】每周一题——2024.3.3
题目 Cpp 【问题描述】 字符环(来源:NOI题库)。有两个由字符构成的环,请写一个程序,计算这两个字符环上最长公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环&a…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
