拜托,Linux 内核黑客,在性能方面,write(2)
对套接字或文件的系统调用的合理缓冲区大小是多少?很明显它是一些页面大小的倍数,但是哪一个呢?有关系吗?什么是“太小”和“太大”?
最佳答案
取决于你对对端的延迟有多大,假设你有一个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));
关于c++ - 套接字和文件推荐的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347356/