---
title: Bcache
description: "Bcache 是Linux内核块设备层cache，支持将一个或多个速度较快的磁盘设备（如SSD）作为读写速度相对较慢的磁盘设备的cache。Bcache从Linux-3.10开始正式并入内核主线。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/twp/kunpengsdss_19_0018.html
sourcePath: /source/zh/kunpengsdss/twp/kunpengsdss_19_0018.html
indexId: 8761d5c369a3f87ae4248b7217668bf3f77e7371bc7c88f4757d76e1d553c3f251
---
# Bcache

#### Bcache简介

Bcache 是Linux内核块设备层cache，支持将一个或多个速度较快的磁盘设备（如SSD）作为读写速度相对较慢的磁盘设备的cache。Bcache从Linux-3.10开始正式并入内核主线。

Bcache具有以下特征。

- 一个缓存设备可以作为多个设备的缓存，并且可以在设备运行时动态添加和删除缓存。
- 可以从非正常状态关机中恢复，只有当缓存写入到后端设备才会确认写完成。
- 正确处理写阻塞和刷缓存。
- 支持writethrough、writeback和writearound等写缓存模式。
- 检测并避开顺序IO（可配置阈值，或关闭该选项）。
- 当检测到SSD延迟超过配置边界值，减少到SSD流量（当一个SSD作为多个磁盘缓存时使用）。
- 缓存不命中时预读（默认关闭）。
- 高性能的writeback实现：脏数据通过排序后再刷到磁盘中。如果设置了writeback_percent值，后台的writeback进程利用PD控制器根据脏数据比例平滑地处理脏数据。
- 使用高效率的B+树，硬件设备足够快速的情况下，bcache随机读可以达到1M IOPS。
- 可在生产中稳定的使用。


#### Bcache的缓存策略

Bcache支持三种缓存策略：writeback（回写策略）、writethrough（写通策略）、writearound（旁路策略）。默认使用writethrough，缓存策略可动态修改。

- writeback：此策略模式下，则所有的数据将先写入缓存盘，然后等待系统将数据回写到后端数据盘中，此策略默认关闭。
- writethrough：此策略模式下，数据同时写入缓存盘和后端数据盘，适用于读多写少的场景，此策略默认打开。
- writearound：选择此策略，数据将直接写入后端磁盘。


#### 常用优化方法

1. 设置writeback提高写性能。

```
echo writeback > /sys/block/bcache0/bcache/cache_mode
```


2. 允许缓存顺序I/O或者顺序I/O阈值。

  - 支持缓存顺序I/O。

```
echo 0 > /sys/block/bcache0/bcache/sequential_cutoff
```


  - 调整顺序I/O阈值。

```
echo 4M > /sys/block/bcache0/bcache/sequential_cutoff
```


上述设置，当顺序I/O缓存量超过该阈值后，相应的I/O将直接写到后端数据盘上。
3. 关闭拥塞控制项。

```
echo 0 > /sys/fs/bcache/<cache set uuid>/congested_read_threshold_us
echo 0 > /sys/fs/bcache/<cache set uuid>/congested_write_threshold_us
congested_read_threshold_us #默认为2000us；
congested_write_threshold_us #默认为20000us；
```

更多信息可参考Bcache主页及手册。

  -     获取链接1(https://bcache.evilpiepirate.org/)

  -     获取链接2(https://evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt)
