请Linux内核黑客,write(2)
系统调用套接字或文件的合理缓冲区大小,性能方面是什么?很明显,这是一些页面大小,但是哪一个?有关系吗?什么是“太小”和“太大”?
答案 0 :(得分:7)
取决于你对同伴的延迟有多大,假设你有一个100MBps的连接,延迟50ms,那么你可以计算
100MBps * 0.050 sec / 8 = 0.625MB = 625KB
但Linux 2.6中的默认窗口大小约为110KB,这将限制您的通过率大约为2.2MBps(110KB / 0.050)
所以,为了解决这个问题,你可以setsockopt
int ret, sock, buf_size;
sock = socket(AF_INET, SOCK_STREAM, 0);
buf_size = 625*1024;
ret = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size));
ret = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size));