pc0de 2016-07-31 11:44 采纳率: 100%
浏览 2493
已采纳

windows Server UDP丢包的问题

首先说说环境。

  • 网络环境很理想,万兆内网,主机之间使用一台光纤交换机连接并无任何中间节点;
  • 环境中的所有主机操作系统均为win2008Server x64 128G,CPU 32核 2.8GHz
  • 一台主机发送数据(通过UDP组播),其它主机接收
  • 发送数据的主机开启8路组播端口,每路发送数据很均匀为51.2MBps。(总数据量为8x51.2Mbps)
  • 接收数据的主机同样开启8路组播端口接收数据。并同时保存数据,需要保证平均每1分钟以上才会发生丢包
  • 编码使用C++ WIN32API,磁盘存储使用的内存映射,单个文件最多存储1GB。(内存映射文件应该是效率最高的存储了吧?)

问题来了

我在实际测试的时候发现;单独存储数据或单独接收组播数据都能达到要求(存得过来,也能保证丢包率稳定在允许范围内),但是边收边存就会导致丢包率猛增。

解决思路

在看过下面的博文后,得知磁盘IO操作频繁会导致CPU等待而不能及时处理内核socket缓冲区中的udp数据包 (ps:该文前面所说的MTU限制并不适用于我当前的内网环境)
该文所说的磁盘IO操作与SOCKET缓冲区的抢夺CPU是否正确?
是否有方法规避该问题 ,比如单个存储文件的大小与单次写入大小是否存在最佳效率?

浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)http://www.cnblogs.com/linuxbug/p/4906000.html

  • 写回答

1条回答 默认 最新

  • 鱼弦 全栈领域优质创作者 2016-07-31 12:04
    关注

    UPD 丢包很严重的,如果传输的信息安全程度高的话,建议不要使用,使用TCP 比较好,使用内存映射的方式,如果包很多的话,会发生阻塞,更会加剧
    信息 传输的 不可靠, 建议最一个内存 阀值检查,一旦超过,就 立即停止发送或接收, 过一段时间再发

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器