基于XDMA的简易FPGA网卡实现(二)

本文详细描述了作者在实现百兆FPGA网卡过程中,通过优化XDMA的描述符旁路模式、环形缓冲区管理和自定义中断,解决TCP发送速度低的问题。最终,通过调整TCP窗口大小,将发送速度提升至94Mb,解决了包间隔过大的问题。
摘要由CSDN通过智能技术生成

基于XDMA的简易FPGA网卡实现(二)

上一期笔者实现了百兆网卡,但使用iperf测tcp速度时,tcp发送速度只有33Mb。本期记录此问题解决过程。

开发环境

FPGA开发板XC7K325T
CPURK3399
开发主机Win11 and ubuntu20.04
IDE版本Xilinx Vitis IDE v2021.1.0 (64-bit) Vivado v2021.1 (64-bit)

优化XDMA

  • 首先将xdma改为描述符旁路模式,使用旁路模式时,FPGA可以绕过CPU,使用FPGA侧旁路接口写入描述符,实现数据搬运
    在这里插入图片描述

  • FPGA侧实现环形缓冲区管理,通过判断读写指针,实现数据收发。环形缓冲区可以实现数据缓冲,减少CPU开销同时提高性能

  • 使用xdma的usr_irq自定义中断,完成多个描述符或者超时后发起usr_irq,可以有效减少CPU中断开销

测试

测试发现发送速度依旧不理想,分析wireshark抓包,并无重传,仔细检查发现如下线索:
在这里插入图片描述

396939和396940两个包间隔了42ms,出现概率约1/30,电脑IP为192.168.1.106,意味着电脑间隔了42ms才发出下一个包。换用两台电脑进行iperf测试,未出现此情况,猜测是tcp窗口太大导致。使用iperf -s -w 65536命令指定电脑tcp窗口为64KB,测试结果如下:

在这里插入图片描述

tcp收发速度均在94Mb左右,wireshark抓包,包间隔不超过3ms

关注博主公众号,优质文章不断更新
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最好有梦想~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值