套接字和文件都建议缓冲区大小

时间:2011-12-01 19:46:53

标签: c++ c linux gcc linux-kernel

请Linux内核黑客,write(2)系统调用套接字或文件的合理缓冲区大小,性能方面是什么?很明显,这是一些页面大小,但是哪一个?有关系吗?什么是“太小”和“太大”?

1 个答案:

答案 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));