最近做的万兆以太网,实现基于10G Ethernet Subsystem的UDP网络通信,以FPGA开发板作为远端设备,PC电脑端作为主控端,使用了一块10G网卡,实现10G UDP网络通信。
1、支持ARP
2、支持ICMP,PC主控端可以通过ping连接设备
3、支持接收,发送UDP包
最困扰的问题,UDP丢包问题,当连续大量发送UDP包时,接收软件丢包,但是抓包软件能抓到,数量也是对的。
接收软件是在window开发的,从以下几个方面优化了:
1、改接收软件,将数据处理线程和接收线程独立开来,丢包少了很多;
2、设置socket 接收缓存
int set_recvBuf_val = 8*1024*1024;
if( setsockopt(s, SOL_SOCKET, SO_RCVBUF, &set_recvBuf_val, sizeof(set_recvBuf_val) ) != 0)
printf("setsockopt error\n");
增加接收缓存后还是有丢包现象,丢包时的带宽没有太大的改善;
3、改FPGA支持巨帧发送,将包payload大小从1024改为4096,测试结果并没有改变。
因为包大小增大了,但是为了不丢包,包间隔相应也改大了,测试下来不丢包的边界带宽并没有提高。
结论:UDP丢包问题未解决,最终还是通过调整发包间隔,保证接收软件不丢数。