Linux: network: tcp_rmem/rmem_default
创始人
2024-02-06 00:07:41

文章目录

  • tcp_rmem - 取值是:3个整数向量: min, default, max
    • min
    • default:
    • max
  • rmem_default
  • rmem_max
  • 具体的用法
  • 相关的方法

tcp_rmem - 取值是:3个整数向量: min, default, max

min

TCP sockets使用的最小接收缓存大小。这个最小值的作用是在,内存处在轻微压力下时,也会给socket分配的内存大小。
Default: 4K

default:

TCP sockets 初始时分配的接收缓存大小。这个值会覆盖net.core.rmem_default这个值。 默认是:87380 bytes。这个值也是计算窗口的输入值,This value results in window of 65535 with default setting of tcp_adv_win_scale and tcp_app_win:0 and a bit less for default tcp_app_win. See below about these variables.

max

允许TCP socket自动选择接收缓存的最大值。不会覆盖net.core.rmem_max。调用setsockopt()设置SO_RCVBUF会将自动调整缓存大小的方法关闭,这样这个值就没有任何作用了。默认值,在87380字节到6M之间,具体值依赖于RAM的大小。

rmem_default

The default setting of the socket receive buffer in bytes.

rmem_max

The maximum receive socket buffer size in bytes.

具体的用法

创建socket一开始的recv buff的大小是rmem_default;后续tcp层会重新设置这个receivebuffer到tcp_rmem:default;
然后,socket的用户标记为SOCK_RCVBUF_LOCK;就会调用tcp_fixup_rcvbuf函数进行接收缓存大小的重新计算。
sk->sk_userlocks |= SOCK_RCVBUF_LOCK;

在这里插入图片描述

相关的方法


void sock_init_data(struct socket *sock, struct sock *sk)
{sk_init_common(sk);sk->sk_send_head	=	NULL;timer_setup(&sk->sk_timer, NULL, 0);sk->sk_allocation	=	GFP_KERNEL;sk->sk_rcvbuf		=	sysctl_rmem_default;{.procname	= "rmem_default",.data		= &sysctl_rmem_default,.maxlen		= sizeof(int),.mode		= 0644,.proc_handler	= proc_dointvec_minmax,.extra1		= &min_rcvbuf,
},/* 3. Tuning rcvbuf, when connection enters established state. */
static void tcp_fixup_rcvbuf(struct sock *sk)
{u32 mss = tcp_sk(sk)->advmss;int rcvmem;rcvmem = 2 * SKB_TRUESIZE(mss + MAX_TCP_HEADER) *tcp_default_init_rwnd(mss);/* Dynamic Right Sizing (DRS) has 2 to 3 RTT latency* Allow enough cushion so that sender is not limited by our window*/if (sock_net(sk)->ipv4.sysctl_tcp_moderate_rcvbuf)rcvmem <<= 2;if (sk->sk_rcvbuf < rcvmem)sk->sk_rcvbuf = min(rcvmem, sock_net(sk)->ipv4.sysctl_tcp_rmem[2]);
}case SO_RCVBUF:/* Don't error on this BSD doesn't and if you think* about it this is right. Otherwise apps have to* play 'guess the biggest size' games. RCVBUF/SNDBUF* are treated in BSD as hints*/val = min_t(u32, val, sysctl_rmem_max);
set_rcvbuf:/* Ensure val * 2 fits into an int, to prevent max_t()* from treating it as a negative value.*/val = min_t(int, val, INT_MAX / 2);sk->sk_userlocks |= SOCK_RCVBUF_LOCK;/** We double it on the way in to account for* "struct sk_buff" etc. overhead.   Applications* assume that the SO_RCVBUF setting they make will* allow that much actual data to be received on that* socket.** Applications are unaware that "struct sk_buff" and* other overheads allocate from the receive buffer* during socket buffer allocation.** And after considering the possible alternatives,* returning the value we actually used in getsockopt* is the most desirable behavior.*/sk->sk_rcvbuf = max_t(int, val * 2, SOCK_MIN_RCVBUF);

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...