none
如何在大流量的情况下保证网络数据包的接收? RRS feed

  • 问题

  • 做了一个网络摄像机,通过千兆网与PC连接(网线直连)。摄像机采到图像后,以UDP包的方式将数据发到PC,由于没有对图像进行缓存,传输的速率基本是固定的,无流量控制和重发机制。流量大约是400多Mbps吧。
    在PC端做接收时,一开始我用UDPSocket做,效果很差,丢包情况很严重;然后我用RawSocket做,情况好了不少;最后我尝试用NDIS中间层驱动做(修改DDK的passthru例程,收到数据后就COPY到一个图像缓存中,应用程序直接从这个缓存取数据),性能再次得到了提升,但是丢包情况依然会发生,好像主要是发生在显示方面有明显活动的时候,如移动窗口,或是我的应用程序对图像进行显示时。我认为,丢包是CPU没有及时响应低层网络接收造成的。由于这种情况相当于网卡按一定速率频繁地收到数据,CPU如果有某一时刻没有及时响应网络接收,可能就会造成包的丢失。
    我应该如何做,才能进一步提升性能?比如是不是能提高网卡中断的优先级,让CPU能优先处理网卡的请求?或者,集成网卡的接收缓存是共享内存的吗,是的话能不能手动将它开得大一些?我不太清楚PC最低层的网络接收是如何做的,望大大们解答..........谢谢了。
    我的CPU是E5200,2.5GHz双核,内存2G,集成网卡是Realtek的,显卡也是集成的,系统是XPsp2。应用中平均CPU占用率是不高的,一般不超过20%,最多40%~50%,两个核的繁忙程度也差不多。所以我觉得如果调度得好的话问题应该能解决。再次拜谢!
    2009年10月22日 2:35