我的目标是借助多核微控制器将从gbit以太网接收的数据包转发到串行接口。我得到了它的工作,但转发TCP流量时的性能很差。我正在寻找可能导致TCP性能不佳的想法。
当前状态
gbit-ethernet功能已基于微控制器制造商提供的库实现。我只做了一些小调整(删除mac过滤)。 串行接口是从头开始编写的,完全基于软件,并且达到大约19 MBit / s的线数据速率。传输以太网数据包时的数据包错误率<0.05%。
两个接口都基于数据包工作,并为接收和发送数据包提供缓冲。它们通过桥接线程连接。在接口A上接收到数据包时,会通知桥接线程,抓取数据包并将其转发到接口B进行传输。所有线程上的时间测量表明,这些操作所花费的时间远远少于物理层上的数据包传输时间。
表现不佳
使用两个微控制器,可以构建一个以太网 - 以太网桥,其间有串行通信。建立与DHCP服务器的连接在网桥上运行良好。速度测试显示1,1 / 0,3 MBit / s(Ookla)和~5 / ~3 MBit / s(T-Online)Down / Upload的结果,平均ping为20 ms。当试图加载网站时,页面可能在接下来的2-3分钟内完成加载或者根本没有完成加载(建立连接,因为网站的前几个文件总是被加载)。
当通过网桥连接两台PC并运行iPerf / jPerf进行Bandwith测试时,由于19 MBit串行链路,我预计会遇到系统物理限制。我期望实现TCP带宽&gt; 10 Mbit / s。然而,带宽低且不稳定,最大约1MBit / s,下降到<1。 60 KBit / s。
在wirehark的帮助下检查网络流量时,我看到很多(loooooot)重传和重复的ACK,但我不知道可能是什么原因。
我确信以太网库运行良好(开源,由芯片制造商提供)。当在一个微控制器上人工创建数据包并通过串行接口将其发送到网络时,wireshark会正确显示所有生成的数据包,验证串行接口的功能。性能必须由TCP与硬件设置结合使用的方式引起,但我没有想法。有什么建议吗?
如果需要,我可以提供wireshark文件