skywind3000/kcp

求助: 一些压测出现的问题, 发大包后不断累积

kcpnewly opened this issue · 5 comments

1: 局域网, 每个tick发送65535 * 64个包到对端(想每次发送4M的图片过去), tick频率是100ms, 发现很快ikcp_waitsnd就到了4000多, 日志是ikcp_waitsnd=4105, snd_wndsize=2048。
感觉在不断累积。

我的设置是:
pKCP_ = ikcp_create((IUINT32)conv, (void*)pSession_);
pKCP_->output = &UdpSocket::kcp_output;

// 配置窗口大小:平均延迟200ms,每20ms发送一个包,
// 而考虑到丢包重发,设置最大收发窗口为128
int sndwnd = 2048;
int rcvwnd = 2048;

// nodelay-启用以后若干常规加速将启动
// interval为内部处理时钟,默认设置为 10ms
// resend为快速重传指标,设置为2
// nc为是否禁用常规流控,这里禁止
int nodelay = 1;
int interval = 1;
int resend = 2;
int disableNC = 1;
int minrto = 5;

// kcp默认为1400
//ikcp_setmtu(pKCP_, 512);

ikcp_wndsize(pKCP_, sndwnd, rcvwnd);
ikcp_nodelay(pKCP_, nodelay, interval, resend, disableNC);
pKCP_->rx_minrto = minrto;
pKCP_->interval = interval;

2: 在1出现问题的情况下, 客户端向服务器发包后, 经常自己也会出发收包事件, 但recvfrom返回-1, 一下返回13**, 一下返回-1, 交替来。

这大概是哪的问题呢? 服务器客户端都在本机虚拟机上, 使用ip:127.0.0.1

recvfrom阻塞套接字是不会出现-1的呢

按照我之前调试过遇到的情况,看看对你有没有帮助:
1,通过sar或类似的工具查看收发的速率
2,跟踪kcp的日志,是有出现超时重传,丢包重传的情况
3,lo回环口,udp也不能说是可靠的,iperf过大概0.1%左右

recvfrom阻塞套接字是不会出现-1的呢

按照我之前调试过遇到的情况,看看对你有没有帮助:
1,通过sar或类似的工具查看收发的速率
2,跟踪kcp的日志,是有出现超时重传,丢包重传的情况
3,lo回环口,udp也不能说是可靠的,iperf过大概0.1%左右

套接字是异步的, 交给libevent事件通知了。
我试试测试工具, 谢谢

这玩意是无解的,只要你的发送速率高于物理处理速度(不论是系统资源不足,还是数据IO瓶颈),这问题就会出现。加大socket层面(用户层面)的缓存,也只能将这问题延缓一下。根本解决方法要不加高处理数据能力(升级硬件,升级带宽),要不放缓发送速率。