WSASend速度和优化

时间:2016-03-08 20:58:49

标签: c++ sockets tcp winsock iocp

我正在实施一个受此示例启发的简化的静态Web服务器:

https://github.com/young2code/IOCP/blob/master/IOCP%20-%20NewThreadPool/Server/Server.cpp

问题是在LAN或同一台机器上WSASend不能超过2 Mbit / s。 WSARecv没有此限制。套接字未被修改,Nagle已启用。 以下是我在Chrome上执行的测试以及Windows 8.1 64位上的一个活动连接:

  • 使用专用线程切换到阻止模式(不再是IOCP) - >没有变化
  • 创建专用线程池 - >没有变化
  • 各种缓冲区大小 - >没有变化
  • 调试或发布 - >没有变化
  • 限制同一套接字上的同时帖子数:0(仅在上一篇文章完成后的新帖子),1,10,100,1000:数字越大,启动速度越高。达到极限后,回到低速。如果没有限制:RAM的使用率逐渐上升至99%。

这是一个拥堵问题吗? tcp窗口不正确? 为了获得最佳性能,应该在不等待之前的帖子通知的情况下同时发布多少个数据包?

实测值。每当新数据包准备好从输出FIFO发送时,就会有一个事件唤醒一个线程。错误是某些事件同时发出信号,因此它们被合并,并且根据需要不经常调用WSASend。

在使用16KB数据包通知之前建议的同时调用WSASend的建议将非常有用。

0 个答案:

没有答案