当前位置: 技术问答>linux和unix
8139网卡驱动问题:如何才能让数据包立即发送
来源: 互联网 发布时间:2016-09-07
本文导语: 现象:我在应用层通过8139网卡每隔1ms发送一个数据包,然后在另外一台直连的机子上通过Wireshark接收包,发现这些数据包的时间间隔完全变了,大概十个个左右数据包的时间间隔是us级别的,接着就是隔几十或几百ms...
现象:我在应用层通过8139网卡每隔1ms发送一个数据包,然后在另外一台直连的机子上通过Wireshark接收包,发现这些数据包的时间间隔完全变了,大概十个个左右数据包的时间间隔是us级别的,接着就是隔几十或几百ms才能收到接下来的十个左右的包(间隔也是us级别),这样循环往复。
需求:对于这种时间间隔不定的收包序列在我的应用中是不允许的,包之间的时间误差只能在us级别内。
解决方法:我现在觉得这个只能在驱动层去解决,但看了8139的网卡驱动,不是很确定该如何修改,有下面几个问题需要高手指点一下:
1:将NUM_TX_DESC的值由4改为1,这样是否可以减少发送缓冲数量,使得每个包都能立即发送出去,而不被缓冲?
2:在函数rtl8139_start_xmit里面,我只看到其将要发送的数据内容和长度拷贝到了缓冲和寄存器,不知道这些数据最后是什么时候发送出去的?
3:对于第2个问题,不知道是不是通过rtl8139_interrupt来发送数据的?如果是,那这个iterrupt是什么时候被触发的呢?是不是跟IntrStatus这个寄存器有关?
谢谢!
需求:对于这种时间间隔不定的收包序列在我的应用中是不允许的,包之间的时间误差只能在us级别内。
解决方法:我现在觉得这个只能在驱动层去解决,但看了8139的网卡驱动,不是很确定该如何修改,有下面几个问题需要高手指点一下:
1:将NUM_TX_DESC的值由4改为1,这样是否可以减少发送缓冲数量,使得每个包都能立即发送出去,而不被缓冲?
2:在函数rtl8139_start_xmit里面,我只看到其将要发送的数据内容和长度拷贝到了缓冲和寄存器,不知道这些数据最后是什么时候发送出去的?
3:对于第2个问题,不知道是不是通过rtl8139_interrupt来发送数据的?如果是,那这个iterrupt是什么时候被触发的呢?是不是跟IntrStatus这个寄存器有关?
谢谢!
|
缓冲满了即触发发送。
也可以咨询下Realtek。
也可以咨询下Realtek。