---
title: SPDK中断聚合优化
description: "Virtio+SPDK通过SPDK绕过传统内核存储栈，通过用户态驱动 + 共享内存的方式实现了一套低延迟、高吞吐的虚拟化存储 I/O 加速方案。针对前端中断占比较高的场景，提出SPDK中断聚合优化，采用virtio前后端感知的中断聚合技术，通过感知前后端I/O请求、I/O完成请求数，减少后端对前端的中断通知数量，释放CPU算力给前端I/O请求下发以及前端的I/O数据读取，提升系统整体的吞吐性能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/systuningguide/systemtg/kunpeng_shty_zn_64_011.html
sourcePath: /source/zh/kunpengcpfs/systuningguide/systemtg/kunpeng_shty_zn_64_011.html
indexId: eed2210a046ad751856670647b2821d3c00743e9a161ee44593c6f644ae22bbe74
---
# SPDK中断聚合优化

Virtio+SPDK通过SPDK绕过传统内核存储栈，通过用户态驱动 + 共享内存的方式实现了一套低延迟、高吞吐的虚拟化存储 I/O 加速方案。针对前端中断占比较高的场景，提出SPDK中断聚合优化，采用virtio前后端感知的中断聚合技术，通过感知前后端I/O请求、I/O完成请求数，减少后端对前端的中断通知数量，释放CPU算力给前端I/O请求下发以及前端的I/O数据读取，提升系统整体的吞吐性能。

1. 下载SPDK 24.01源码。
  1 2 3 mkdir SPDK_24.01 cd SPDK_24.01 git clone https://github.com/spdk/spdk -b v24.01.x

2. 下载SPDK补丁。
  1 2 3 4 git clone https://gitcode.com/src-openeuler/spdk.git cd spdk git checkout -b 2403SP2_SPDK origin/openEuler-24.03-LTS-SP2 cp 0013-vhost-add-vhost-interrupt-coalescing.patch ../SPDK_24.01/spdk

  合入补丁。

  1 git am --reject 0013-vhost-add-vhost-interrupt-coalescing.patch

3. 安装依赖。
  1 yum install fuse3-devel

4. 编译使用新的SPDK。
  1 2 3 4 5 6 7 cd ../SPDK_24.01/spdk git submodule update --init ./configure --disable-tests --disable-unit-tests --enable-lto --disable-debug make -j`nproc` make -j`nproc` install ln -s `pwd`/build/bin/vhost /usr/bin/vhost ln -s `pwd`/scripts/rpc.py /usr/bin/rpc

5. 开启SPDK中断聚合。
  1 2 3 vhost -S /var/tmp -m [4,6,8,10] -E & rpc bdev_aio_create /dev/nvme1n1 aio_0 512 rpc vhost_create_blk_controller vhost.0 aio_0

  其中“-E”参数为新增的中断聚合使能开关。 [4,6,8,10]为SPDK绑定的4个轮询核
