首页
产品服务
模型广场
Token工厂
算力市场算力商情行业资讯
注册

从Linux内核网络栈到RDMA:一次‘绕过’操作,如何把延迟从100微秒干到3微秒?

发布日期:2026-04-13 来源:CSDN软件开发网作者:CSDN软件开发网浏览:1

传统网络栈:数据包的“官僚主义迷宫”

  当你用send()发送一个数据包时,它经历的流程堪比穿越政府部门:

// 典型TCP发送代码(用户态视角)
int ret = send(socket_fd, buffer, len, 0);

  这行简单调用背后,隐藏着令人窒息的底层操作:

  • 系统调用门禁:从用户态陷入内核态,触发上下文切换(约1000个CPU周期)
  • 协议栈文牍处理
    • 分配sk_buff结构体(内存管理子系统介入)
    • 数据从用户缓冲区拷贝到内核空间(memcpy开销)
    • TCP/IP各层头部封装(校验和计算、序列号维护等)
  • 排队候审
    • 经过QDisc队列纪律(流量整形)
    • 等待软中断调度(NET_TX_SOFTIRQ
  • 硬件海关通关
    • 网卡驱动DMA映射
    • 传输完成触发中断(又一轮上下文切换)
关键瓶颈对比表
实测数据:在100Gbps网络下,传统TCP栈的CPU处理开销可达80%,而同样负载下RDMA的CPU占用<5%

RDMA的“外交豁免权”:硬件直达协议

  RDMA的精髓就像给数据包颁发外交护照,核心机制体现在三个硬件级设计:

内存注册(Memory Registration)

# 注册内存区域的典型verbs API
ibv_reg_mr(pd, addr, length, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_READ);

  这个操作相当于:

  • 在NIC上建立物理地址映射表
  • 设置访问权限密钥(类似签证)
  • 确保内存页锁定(避免被换出)

队列对(Queue Pair)架构

  RDMA的通信端点不是socket,而是由三个硬件队列组成的QP:

发送队列 (SQ)
↑↓ NIC ↑↓
接收队列 (RQ)
完成队列 (CQ)

  工作流程:

  • 应用直接向SQ写入工作请求(WQE)
  • NIC轮询SQ获取指令(完全绕过CPU)
  • 数据传输完成后在CQ生成完成事件(CQE)

传输语义硬件化

  传统网络协议栈的复杂逻辑被简化为几种基本操作:

微秒级延迟的工程实现细节

  要达到3微秒的延迟,需要芯片级优化:

缓存一致性设计

  现代RDMA网卡(如NVIDIA ConnectX-6)采用:

本文转载自CSDN软件开发网, 作者:CSDN软件开发网, 原文标题:《 从Linux内核网络栈到RDMA:一次‘绕过’操作,如何把延迟从100微秒干到3微秒? 》, 原文链接: https://blog.csdn.net/weixin_26846533/article/details/160105940。 本平台仅做分享和推荐,不涉及任何商业用途。文章版权归原作者所有。如涉及作品内容、版权和其它问题,请与我们联系,我们将在第一时间删除内容!
本文相关推荐
暂无相关推荐
点击立即订阅