RealTek 8168(r8169 linux driver) - Rx描述符环混乱

时间:2016-07-08 13:55:01

标签: linux interrupt ethernet nic

我正在研究控制系统的东西,其中NIC中断用作触发器。这对于大于3微秒的循环时间非常有效。现在我想做一些性能测试并测量传输时间,分别是两次中断之间的最短时间。

发件人正在尽快发送60字节的包。接收器应该每个包产生一个中断。我正在测试256个数据包,即Rx描述符环的大小。在测试期间不会处理分组数据。只有中断才有意思。

麻烦的是,两个中断之间的接收速度非常快,不到1微秒,但只有大约70个中断/描述符。然后NIC设置RDU(Rx描述符不可用)位并在到达环结束之前停止接收。令人困惑的是,当我将Rx描述符环的大小增加到2048(例如)时,中断的数量也在增加(大约800)。我不明白这种行为。我认为他应该在70次中断后再次停止。

这似乎是一个时间问题,但为什么呢?我忽视了什么,但是什么?有人可以帮我吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我认为由于较大的RX数据包速率,您的接收中断丢失了。不要计算中断,看看收到了多少数据包。依旧"拥有"接收描述符的位。 除非您在编写RX描述符时遇到一些错误(例如忘记设置所有权位),否则仅在您到达响铃结束时才会设置接收描述符不可用 因此,如果你的RX环有256个描述符,我认为你应该收到256个数据包而不回收RX描述符。 如果您怀疑是否到达振铃结束,请尝试在最后一个RX描述符的完成位上设置中断。这样,在振铃结束时只接收一个中断。