---
title: 配置bcache
description: "启动智能预取前，请停止当前集群服务程序。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2003/accel/kunpengaccel_ip_06_0042.html
sourcePath: /source/zh/kunpengboostkithistory/2003/accel/kunpengaccel_ip_06_0042.html
indexId: 948a67b7de43bc58bc1038e096cf67dca932e5ae65a749dd33f95b450b0c1fc473
---
# 配置bcache

启动智能预取前，请停止当前集群服务程序。


以下以sdb盘为例说明操作步骤，读者请根据实际盘号操作。


#### 为数据盘创建bcache盘

1. 删除磁盘上原有的数据，创建bcache盘，格式化bcache盘为ext4文件系统格式。

```
wipefs -a /dev/sdb --force
make-bcache -B /dev/sdb --wipe-bcache
mkfs.ext4 /dev/
[bcache]
```


2. 修改bcache盘参数。

  a. 获取max_sectors_kb（设备允许的最大请求大小）实际参数。

```
cat /sys/block/sdb/queue/max_sectors_kb
```


    回显结果为：

```
[数据盘最大扇区数量]
（例如1024）
```


  b. 获取read_ahead_kb（预读数据大小）实际参数。

```
cat /sys/block/sdb/queue/read_ahead_kb
```


    回显结果为：

```
[数据盘预读数量]
（例如128）
```


  c. 根据获取到的实际参数配置max_sectors_kb和read_ahead_kb。

```
echo
数据盘最大扇区数量
> /sys/block/
[bcache]
/queue/max_sectors_kb
```

```
echo
数据盘预读数量
> /sys/block/
[bcache]
/queue/read_ahead_kb
```


    针对以上步骤命令中涉及的[数据盘最大扇区数量]、[数据盘预读数量]和[bcache]有如下两条说明。 [数据盘最大扇区数量]和[数据盘预读数量]以具体的数据盘的值为准，不同的数据盘，其参数可能不一样。 具体[bcache]值需根据“/sys/block/”目录下内容进行设置，该目录下所有[bcache]设备都需要按此处理。


#### 为Ramdisk缓存盘创建bcache盘

1. 创建Ramdisk盘。

```
modprobe brd rd_nr=12 rd_size=$((1048576))
```


  命令中，12表示缓存盘数量；1048576表示缓存盘大小为1G，具体大小请根据业务自己配置，一般大数据场景配置1G大小即可。

2. 将缓存盘格式化为bcache盘。

```
make-bcache --wipe-bcache -b 262144 -C /dev/ram0
```


  命令中，262144表示缓存盘block大小为256K。

3. 挂载缓存盘到对应的bcache盘。

```
echo $uuid > /sys/block/
[bcache]
/bcache/attach
```


  命令中的$uuid值取其结果的cset.uuid对应的uuid值，查看$uuid值。 bcache-super-show /dev/ram0

4. 修改bcache策略。

```
echo writearound > /sys/block/
[bcache]
/bcache/cache_mode
```

```
echo 1 > /sys/block/
[bcache]
/bcache/clear_stats
```

```
echo 0 > /sys/block/
[bcache]
/bcache/readahead
```

```
echo 10 > /sys/block/
[bcache]
/bcache/writeback_percent
```

```
echo 0 > /sys/block/
[bcache]
/bcache/cache/congested_read_threshold_us
```

```
echo 0 > /sys/block/
[bcache]
/bcache/cache/congested_write_threshold_us
```

```
echo 1 > /sys/block/
[bcache]
/bcache/read_bypass
```

```
echo lru > /sys/block/
[bcache]
/bcache/cache/cache0/cache_replacement_policy
```


  命令中涉及的具体[bcache]值需根据“/sys/block/”目录下内容进行设置，该目录下所有[bcache]设备都需要按此处理。


创建完Ramdisk缓存盘后，系统会划分对应的内存给bcache使用，如果运行的业务需要使用大量内存，建议调整业务内存资源配置，以免业务运行因为内存不足而失败。比如Spark Kmeans，应用会消耗大量内存，此时需要调整Yarn的内存资源配置，确保业务不会因为内存不足而失败。


#### 为SSD缓存盘创建bcache盘

1. 确保有空闲的SSD缓存盘。
  举例说明：

2. 格式化缓存盘为bcache盘。

```
make-bcache --wipe-bcache -b 262144 -C /dev/nvme0n1p1
```

```
echo /dev/nvme0n1p1 > /sys/fs/bcache/register
```


  262144表示缓存盘block大小为256K。

3. 挂载缓存盘到对应的bcache盘。

```
echo $uuid > /sys/block/
[bcache]
/bcache/attach
```


  命令中的$uuid值取其结果的cset.uuid对应的uuid值，查看$uuid值。 bcache-super-show /dev/nvme0n1p1

4. 修改bcache策略。

```
echo writeback > /sys/block/
[bcache]
/bcache/cache_mode
echo 1 > /sys/block/
[bcache]
/bcache/clear_stats
echo 0 > /sys/block/
[bcache]
/bcache/readahead
echo 10 > /sys/block/
[bcache]
/bcache/writeback_percent
echo 0 > /sys/block/
[bcache]
/bcache/cache/congested_read_threshold_us
echo 0 > /sys/block/
[bcache]
/bcache/cache/congested_write_threshold_us
echo 0 > /sys/block/
[bcache]
/bcache/cache/read_bypass
echo 0 > /sys/block/
[bcache]
/bcache/sequential_cutoff
echo lru > /sys/block/
[bcache]
/bcache/cache/cache0/cache_replacement_policy
```


5. 修改bcache的queue目录参数。
  在以下命令中，根据后端盘修改max_sectors_kb的参数为适合值。

```
echo 1024 > /sys/block/
[bcache]
/queue/max_sectors_kb
```


  命令中涉及的具体[bcache]值需根据“/sys/block/”目录下内容进行设置，该目录下所有[bcache]设备都需要按此处理。


#### 挂载数据盘对应的bcache盘

1. 手动装载bcache盘对应的数据盘。

```
mount /dev/
[bcache]
/ data/
[data]
```


  请根据实际数据盘目录配置[bcache]和[data]。


创建完成bcache磁盘后，原先/etc/fstab中的操作系统默认启动挂载数据盘的配置需要删除，以免重启服务器后数据盘被重新格式化成非bcache盘。
