c++ - 套接字和文件推荐的缓冲区大小

标签 c++ c linux gcc linux-kernel

拜托,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/

相关文章:

c++ - 在 libxml2 中使用 https 解析页面

c - 函数声明错误

c - gtk 网络教程/资源/示例

linux - 如何从 bash 脚本加密 zip 文件

c++ - 文件警告末尾的反斜杠换行符

c++ - cplusplus.com 错了吗?指针和字符串文字

c - 为什么 (1) ["abcd"] +"efg"-'b' +1 变成 "fg"?

c - C编程中扫描文件并将内容存储在数组中

linux - 将目录/文件输入文本文件,然后显示早于特定日期的文件

c++ - MEX:如何将矩阵从 C++/C 返回到 MATLAB