跳转至

BDMA XOR使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 01/29/2026

    1. 概述

    在RAID5/RAID6应用中,需要进行大量XOR计算。若使用CPU进行XOR计算,则会占用大量CPU资源,降低系统性能。使用BDMA XOR硬件进行XOR计算,可以让CPU从XOR计算中解放出来,降低CPU的负载。

    BDMA XOR驱动基于Linux标准的DMA引擎子系统框架,主要用于RAID5/RAID6等需要XOR计算的存储应用场景,通过硬件加速来提升数据处理的效率。

    主要特性:

    • 支持DMA_MEMCPY和DMA_XOR操作
    • 支持最多8个源缓冲区的XOR运算
    • 支持Scatter-Gather List,可批量处理多个描述符
    • 支持ACP(Accelerator Coherency Port)
    • 基于Linux DMA引擎框架,兼容标准异步传输API

    2. 关键字说明

    • BDMA (Byte-aligned data transfer DMA engine)

      主要用于外设与存储器之间、存储器与存储器之间的高速数据传输,并且不需要CPU的参与。

    • XOR计算

      异或运算,在RAID5/RAID6等存储系统中用于计算和校验数据。例如:对于n个源缓冲区,XOR计算会将所有源数据按位异或后写入目标缓冲区。

    • Scatter-Gather List

      分散-聚集列表,允许DMA控制器在一次操作中处理多个非连续的内存区域。

    • ACP (Accelerator Coherency Port)

      加速器一致性端口,用于实现外部加速器(如DMA控制器)与CPU缓存之间的内存一致性访问。启用ACP后,可减少手动刷写cache的操作,提升性能。

    3. 功能描述

    3.1 硬件特性

    参数名称 规格 说明
    最大源缓冲区数量 8 单次XOR计算最多支持8个源缓冲区
    描述符队列深度 1024 支持最多1024个待处理的硬件描述符
    Scatter-Gather List大小 16KB 用于存储Scatter-Gather表项
    数据传输大小范围 1字节 - 4096字节 单次操作的数据大小范围
    Burst长度 支持16和32字节 可配置的DMA传输突发长度

    3.2 工作模式

    BDMA XOR驱动支持以下工作模式:

    1. ACP模式

      • 启用ACP
      • 自动处理缓存一致性,无需手动刷写cache
      • 配置方式:在DTS中设置acp-enable = <1>;
    2. 非ACP模式

      • 手动管理缓存一致性
      • 需要在传输前flush源数据cache
      • 需要在传输后invalidate目标数据cache
      • 配置方式:在DTS中设置acp-enable = <0>;

    3.3 支持的操作

    操作类型 描述 API接口
    DMA_MEMCPY 内存到内存的拷贝操作 device_prep_dma_memcpy
    DMA_XOR 多源缓冲区异或运算 device_prep_dma_xor

    4. Kernel用法介绍

    4.1. Kernel Config配置

    在编译Kernel时需要选择的配置如下:

        Device Drivers  --->
            [*] Sgs SoC platform drivers  --->
                [*] Sgs BDMA XOR driver
    

    Kconfig配置详情:

    config SGS_BDMA_XOR
        bool "Sgs BDMA XOR driver"
        select DMADEVICES
        select DMA_ENGINE
        select DMA_VIRTUAL_CHANNELS
        select DMA_ENGINE_RAID
        select ASYNC_TX_DMA
        select ASYNC_TX_ENABLE_CHANNEL_SWITCH
        select ASYNC_CORE
        select ASYNC_XOR
        select ASYNC_MEMCPY
        default y if ARCH_MHERA
        help
            Sgs BDMA XOR driver function
    

    4.2. DTS配置说明

    可以在dtsi中配置BDMA XOR驱动,示例如下:

        bdma_xor {
            compatible = "sgs,bdma_xor";
            interrupts = <GIC_SPI INT_IRQ_BDMA3 IRQ_TYPE_LEVEL_HIGH>;
            reg = <0x0 0x1F201800 0x100>,  /* BDMA寄存器基地址 */
                  <0x0 0x1F220C00 0x100>;  /* XOR寄存器基地址 */
            acp-enable = <1>;              /* ACP使能标志:1=启用,0=禁用 */
            clocks = <&xtal>;              /* 时钟源 */
            status = "okay";               /* 状态:okay=启用,disabled=禁用 */
        };
    

    参数说明:

    参数 释义 备注
    compatible 驱动兼容性字符串,用于匹配驱动 必须为"sgs,bdma_xor"
    interrupts 中断号和中断触发方式 使用GIC SPI中断,电平触发
    reg 寄存器基地址和大小 第一个是BDMA基地址,第二个是XOR基地址
    acp-enable ACP加速器一致性端口使能 1表示启用,0表示禁用,默认启用
    clocks 时钟源引用 指向xtal时钟
    status 设备状态 okay表示启用,disabled表示禁用

    4.3. 使用方法

    使能BDMA XOR驱动后,Kernel启动log会有如下打印,表示BDMA XOR驱动初始化成功。在RAID5读写时,系统会自动使用BDMA XOR硬件来进行DMA_MEMCPY和DMA_XOR的计算。

        sgs,bdma_xor 1f201800.bdma_xor: DMA use 64-bit address mask
        sgs,bdma_xor 1f201800.bdma_xor: sg_list_virt:0xffffffc009195000
        sgs,bdma_xor 1f201800.bdma_xor: acp enabled
    

    5. RAID5性能测试

    本节介绍RAID5性能测试的方法,包括如何配置Kernel Config,以及测试RAID5的命令。

    5.1. 配置Kernel相关Config

    涉及RAID5的Kernel Config主要包含三部分:

    • 开启RAID5 Config配置
    • 配置组建RAID5的设备
    • 配置DMA_MEMCPY/DMA_XOR计算的硬件

    5.1.1 开启RAID5 Config配置

        Device Drivers  --->
            [*] Multiple devices driver support (RAID and LVM)  --->
                <*>   RAID support
                [*]     Autodetect RAID arrays during kernel boot
                <*>     RAID-4/RAID-5/RAID-6 mode
    

    5.1.2 配置组建RAID5的设备

    可以使用SATA硬盘组建RAID5。如果你没有SATA硬盘,也可以使用内存块设备来组建RAID5进行测试。

    5.1.2.1. 开启SATA Config配置

    具体配置选项请参考SATA相关文档。

    5.1.2.2. 开启内存块设备Config配置
        Device Drivers  --->
            [*] Block devices  --->
                <*>   RAM block device support
                (4)     Default number of RAM disks       /* 配置4个内存块设备 */
                (102400) Default RAM disk size (kbytes)   /* 配置每个内存块设备的size为100MB */
    

    5.1.3 配置DMA_MEMCPY/DMA_XOR计算的硬件

    在RAID5读写时会有大量的DMA_MEMCPY/DMA_XOR计算,使能BDMA XOR驱动时,这部分计算会由BDMA XOR硬件来完成。禁用BDMA XOR驱动时,这部分计算会由CPU来完成。

    使能BDMA XOR驱动的方法请参考上文。

    5.2. 测试RAID5性能

    Step 1. 使用mdadm工具组建RAID,具体命令参数请参考相关文档

    ## 使用SATA硬盘/dev/sda1~/dev/sda4分区组建RAID5
    ./mdadm -C /dev/md1 -l5 -c128 -binternal -n4 /dev/sda[1-4] --assume-clean
    

    ## 使用内存块设备/dev/ram0~/dev/ram3组建RAID5
    ./mdadm -C /dev/md1 -l5 -c128 -binternal -n4 /dev/ram[0-3] --assume-clean
    

    Step 2. 生成随机数据,并写入RAID5

    dd if=/dev/random of=/tmp/data.bin bs=4096 count=80000
    dd if=/tmp/data.bin of=/dev/md1 bs=4096 count=80000
    

    Step 3. 从RAID5读取数据

    dd if=/dev/md1 of=/tmp/data1.bin bs=4096 count=80000
    

    Step 4. 校验原始数据和RAID5中的数据是否一致

    md5sum /tmp/data.bin
    md5sum /tmp/data1.bin