这是电子科技大学本科毕设:Monkey-X-NIC(Minkun-Xue-NIC)。近期英伟达收购mellanox这一重磅事件也提示我们网卡的重要性,本毕业设计聚焦于前沿领域,NIC、路由器是下个时代极其重要的构件,它为分布式机器学习、分布式训练、分布式存储、存算分离、物联网、嵌入式领域、网络安全打下了基础。网卡如何设计?存储、计算、网络如何协同?架构的改进将会产生极大的经济效益。更多介绍见下文。

目录

写作前面

如何使本设计生效?

#1生成bitstream
cd /path/to/Monkey-X-NIC/fpga/mqnic/Alveo/fpga_100g/fpga_AU200
make 
#2使用Vivado-Hardware-Manager烧录至Xilinx-Alveo-U200
#此处略
#3热重启板卡
cd /path/to/Monkey-X-NIC/scripts/pcie
sudo ./pcie_reset.sh 41:00.0  #重置PCIe插槽
#4装载驱动
sudo rmmod mqnic  #卸载驱动
sudo ./pcie_rescan.sh #扫描PCIe设备
cd /path/to/Monkey-X-NIC/modules/mqnic
sudo insmod mqnic.ko  #重新装载驱动
#5连通性(使用另一个主机ping)
ip a #查看网口名,为enp65s0np0
sudo ip link set dev enp65s0np0 up
sudo ip addr add 172.0.0.2/24 enp65s0np0
sudo ip link set mtu 9000 dev enp65s0np0
ping 10.0.0.2 #能ping通
#6可编程性测试
cd /path/to/Monkey-X-NIC/scripts/
python3 testx
python3 testy
python3 testz

0.整体框图

整体设计:

image-20241201121237333.png

时钟树逻辑整理:

image.png

1.移植准备

梳理数据包流程:

见6-8节

2.关键点

1.HOST向NIC发起控制交互的方式为MMIO;NIC向HOST发起控制交互的方式为触发中断。

2.只需要关注发送数据过程,接收数据过程不涉及调度器。

3.HOST驱动预先构造了两个缓存区,一个for所有描述符队列,另一for所有的skb。

4.描述符和真实的包都在HOST内存中,NIC需要发起两次DMA读才能获取真实的包:一次for描述符,拿到描述符(存有真包地址及其他信息)后,第二次DMA读到真实包。

5.NIC在发起两次DMA读操作之前就决定好了要调度哪个队列。