带有选项MSG_WAITALL的kernel_recvmsg需要很长时间才能接收数据。甚至尝试使用标志0的默认选项。整体吞吐量受kernel_recvmsg的影响。 TCP_NODELAY套接字选项也设置。尝试在客户端和服务器之间更改各种recv和发送缓冲区选项,但整体吞吐量没有改变。
服务器:Windows 10 PC 客户端:Android 7.1 linux版本4.4.63
在5 ghz网络中进行测试......
是否有任何选项可供尝试。
下面添加的计时器显示kernel_recvmsg中消耗的时间更多。甚至perf工具调用显示kenrel_recvmsg中消耗的时间更多。
t_usb.rx_rcv_start = ktime_get();
while (total_rcvd < length && total_rcvd >= 0 &&
!kthread_should_stop()) {
kvec.iov_base = tcp_recv_buf+data_rcvd;
kvec.iov_len = length-data_rcvd;
data_rcvd = kernel_recvmsg(tcp_socket->socket, msg, &kvec,
1, length - total_rcvd, MSG_WAITALL);
if (data_rcvd > 0) {
total_rcvd += data_rcvd;
} else {
vfree(tcp_recv_buf);
return data_rcvd;
}
}
t_usb.rx_start = t_usb.rx_rcv_end=ktime_get();