---
title: 配置bcache
description: "以下以sdb盘为例说明操作步骤，读者请根据实际盘号操作。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/storage/ug-ip/kunpengaccel_ip_06_0034.html
sourcePath: /source/zh/kunpengaccel/storage/ug-ip/kunpengaccel_ip_06_0034.html
indexId: fac3ee512c11c9e02f77d45a318a2eb07f1a4e338210d7d6bbe76d4a19f8773966
---
# 配置bcache

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


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

1. 删除磁盘上原有的数据，创建bcache盘，格式化bcache盘为ext4文件系统格式。
  1 2 3 wipefs -a /dev/sdb --force make-bcache -B /dev/sdb --wipe-bcache mkfs.ext4 /dev/[bcache]

2. 修改bcache盘参数。

  a. 获取max_sectors_kb（设备允许的最大请求大小）实际参数。
    1 cat /sys/block/sdb/queue/max_sectors_kb

    回显结果为数据盘最大扇区数量，示例如下：

    1 1024

  b. 获取read_ahead_kb（预读数据大小）实际参数。
    1 cat /sys/block/sdb/queue/read_ahead_kb

    回显结果为数据盘预读数量，示例如下： 1 128

  c. 根据获取到的实际参数配置max_sectors_kb和read_ahead_kb。
    1 echo 数据盘最大扇区数量 > /sys/block/[bcache]/queue/max_sectors_kb

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

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


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

1. 创建Ramdisk盘。
  1 modprobe brd rd_nr=12 rd_size=$((1048576))

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

2. 将缓存盘格式化为bcache盘。
  1 make-bcache --wipe-bcache -b 262144 -C /dev/ram0

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

3. 挂载缓存盘到对应的bcache盘。
  1 echo $uuid > /sys/block/[bcache]/bcache/attach

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

4. 修改bcache策略。
  1 echo writearound > /sys/block/[bcache]/bcache/cache_mode

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

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

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

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

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

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

  1 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盘。
  1 make-bcache --wipe-bcache -b 262144 -C /dev/nvme0n1p1

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

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

3. 挂载缓存盘到对应的bcache盘。
  1 echo $uuid > /sys/block/[bcache]/bcache/attach

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

4. 修改bcache策略。
  1 2 3 4 5 6 7 8 9 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的参数为适合值。 1 echo 1024 > /sys/block/[bcache]/queue/max_sectors_kb

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


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

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

手动挂载bcache盘对应的数据盘，请根据实际数据盘目录配置[bcache]和[data]。```
mount /dev/[bcache]/ data/[data]
```
