Doorbell 机制

作用

在 RDMA 通信中,使用 Doorbell 表明某个 QP 有待处理的 WR,用户态进程使用 post_send_db 来 ring doorbell

原理

用户态协议栈通过 doorbell 机制写入网卡的寄存器,实际上写入的是一个 64 位 (位宽大小) 的值,其中还包括一些标志 (WQE 类型等)。进而使网卡得知 WQE 和 Data 的内存位置 (只有 64 位大小,所以不可能是内存地址,而是一个偏移位置),然后通过 DMA 去取(全部都是走 PCIe)

和 MMIO 的关系

Doorbell 机制的底层原理是 MMIO(内存映射 I/O,Memory-Mapped I/O),MMIO 是一种通过将设备的寄存器或内存与系统的地址空间直接映射的技术,使得处理器能够像访问普通内存那样访问 I/O 设备。内存映射 I/O 的关键思想是通过将 I/O 设备的地址空间与系统内存地址空间合并,省去专门的 I/O 指令,简化了硬件设计和操作系统的复杂性

在系统上,mmap() 函数提供一种能力,使程序可以把硬件寄存器、文件等当作内存去读写。实际上 mmap 函数提供的是一个虚拟内存地址(Virtual Address, VA),用户态程序可以通过 mmap 直接访问特定内存区域,比如设备的 MMIO 空间,方便对硬件进行操作

在用户态程序中,Doorbell 机制就是通过 mmap() 实现对网卡寄存器的写入

和 BAR 空间的关系

待补充

优化

设备可以根据情况响应 doorbell,可以不响应,也可以攒够一定的 doorbell 后一次性处理多个 WQE

业内优化方案:

  • SSQ (Share Send Queue),减少 doorbell,提高性能
  • WQE 和 Data 一起取?

参考

【精讲】PCIe基础篇——BAR(Base Address Register)详解_pcie bar-CSDN博客

PCIe简介-配置空间_pcie配置空间-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值