Linux TCP参数——tcp_adv_win_scale

文章目录

tcp_adv_win_scale

adv-advise;win-window;
用于指示TCP中接收缓存比例的值。

static inline int tcp_win_from_space(int space)
{return sysctl_tcp_adv_win_scale<=0 ?(space>>(-sysctl_tcp_adv_win_scale)) :space - (space>>sysctl_tcp_adv_win_scale);
}

在这里插入图片描述

ip-sysctl.txt解释

tcp_adv_win_scale - INTEGERCount buffering overhead as bytes/2^tcp_adv_win_scale(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale),if it is <= 0.Possible values are [-31, 31], inclusive.Default: 1

指定计算缓冲 Overhead 的方式:
如果 tcp_adv_win_scale > 0 则为 bytes/2^tcp_adv_win_scale 否则为bytes - bytes/2^(-tcp_adv_win_scale)。

默认值:1(低版本默认值是 2)
可选值:[-31, 31]

buffering overhead

buffering overhead即缓冲开销,即除去数据部分的其他开销,包括头字段开销以及内核结构体(例:sk_buffer)设置部分的上下文参数的开销。
也就是接收缓存区其实是由数据信息和辅助信息组成!!!
所以“Count buffering overhead as”说明这是计算辅助信息(即非数据信息)的所占空间大小,而该参数就是比例因子。

内核缓存和应用缓存

tcp手册描述,“application” buffer,以及延伸出内核缓存概念(形容可能不是那么恰当准确,所以不用太过于陷入这个命名之中,否则会不利于你的理解)

The socket receive buffer space is shared between the
application and kernel.  TCP maintains part of the buffer
as the TCP window, this is the size of the receive window
advertised to the other end.  The rest of the space is
used as the "application" buffer, used to isolate the
network from scheduling and application latencies.  The
tcp_adv_win_scale default value of 2 implies that the
space used for the application buffer is one fourth that
of the total.

注:应用部分的作用是“used to isolate the network from scheduling and application latencies”,具体指的应该是内核的 skb_shared_info 结构,对 TCP 本身没什么用,但对其它模块有用。

所以需要理解的其实就是:

  1. 内核缓存,表示的就是TCP载荷(数据),也就是TCP滑动窗口机制中的通告窗口大小
  2. 应用缓存,表示的就是内核中的辅助标识数据的元数据信息
    帮助理解
    REF:关于Linux TCP接收缓存以及接收窗口的一个细节解析

示例计算

tcp_adv_win_scale > 0bytes/2^tcp_adv_win_scale
tcp_adv_win_scale <= 0bytes - bytes/2^(-tcp_adv_win_scale)1:1/2 即非数据使用1/2区域,数据使用1/2区域
2:1/4 即非数据使用1/4区域,数据使用3/4区域

你会发现:在Linux内核版本优化中为什么该值会从2到1呢?(我的第一反应是增大非数据区的比例不是会减少载荷导致效率反而下降吗?)

深入理解从2到1(tcp_adv_win_scale的值)

比较Linux 2.6.32和Linux 3.10版本的sk_buffer

之所以要比较sk_buffer,是因为struct sk_buffer是网络协议栈中整个网络数据包存储的地方。(这个数据结构会被网络协议栈中的各层用来储存它们的协议头、用户数据和其他它们完成工作需要的数据)

# 以下命令可以查看到内核部分结构大小
sudo cat /proc/slabinfo
sudo cat slabtop

对比结果是sk_buff变打了,因为功能扩展,除了skb的膨胀之外,系统中还有别的膨胀,比如为了效率的“对齐开销”,但更大的开销增加是skb_shared_info结构体的计入。

虽然这种开销的膨胀在TCP层面几乎看不到什么收益(反而付出了代价,你不得不配置更大的rcvbuf…),然而skb等并不单单服务于TCP,这种膨胀的收益可能被调度,中断,IP路由,负载均衡等机制获取了。所以这种变化对于整个系统来说,是好的变化,好的发展。
记住两点即可:首先,Linux内核各个子系统是一个整体,其次,内存越来越便宜而时间一去不复返,空间换时间,划得来!

总结

tcp_adv_win_scale计算出非载荷的占比,也被称之为application” buffer的占比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…

Mesh网格obj文件构成解析

众所周知&#xff0c;Mesh网格是三维重建的常用手法&#xff0c;通过顶点-三角面的形式来完成对三维物体的表达。其中&#xff0c;最常见的Mesh网格文件格式就是obj格式。看起来复杂的三维形状其实在数值表示上是很简单的&#xff0c;大家跟我一起来做个小实验就好&#xff1a;…

echarts散点图自定义tooltip,鼠标放上去展示多行数据

先放效果图 如图&#xff0c;就是鼠标悬停在散点上&#xff08;这里的散点我替换成了图片&#xff0c;具体做法参考这篇文章&#xff1a;echarts散点图的散点用自定义图片替代-CSDN博客&#xff09;时&#xff0c;可以展示多行数据。之前查找资料的时候&#xff0c;很多用字符串…

练习unittest+Fixture实现

练习01 创建⼀个⽬录 case, 作⽤就是⽤来存放⽤例脚本,在这个⽬录中创建 5 个⽤例代码⽂件 , test_case1.py使⽤ TestLoader 去执⾏⽤例 将来的代码 ⽤例都是单独的⽬录中存放的 test_项⽬_模块_功能.py test_case1.py # 1. 导包 unittest import unittest # 2. 定义测试类, 只…

面试经典150题(114-118)

leetcode 150道题 计划花两个月时候刷完之未完成后转&#xff0c;今天完成了5道(114-118)150 gap 了一周&#xff0c;以后就不记录时间了。。 114.(70. 爬楼梯) 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不…

旅行社旅游线路预定管理系统asp.net

旅行社旅游线路预定管理系统 首页 国内游 境外游 旅游景点 新闻资讯 酒店信息―留言板 后台管理 后台管理导航菜单系统管理修改密码留言管理注册会员管理基础数据设置国别设置有份设地区设置 旅行社管理友情链接管理添加友情链接友情链接管理新闻资讯管理添加新闻资讯新闻资讯管…

LayerNormalization 和 RMSNormalization的计算方法和区别

目录 问题来源 Layer Normalization 与 RMSNormalization 的详细计算方法 Layer Normalization&#xff08;层归一化&#xff09; RMSNormalization&#xff08;均方根归一化&#xff09; Layer Normalization与RMSNormalization的异同 Layer Normalization RMSNormaliza…

24 OpenCV直方图反向投影

文章目录 参考反向投影作用calceackProject 反向投影mixchannels 通道图像分割示例 参考 直方图反向投影 反向投影 反向投影是反映直方图模型在目标图像中的分布情况简单点说就是用直方图模型去目标图像中寻找是否有相似的对象。通常用HSV色彩空间的HS两个通道直方图模型 作用…

基于时空上下文(STC)的运动目标跟踪算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

Midjourney 和 Dall-E 的优劣势比较

Midjourney 和 Dall-E 的优劣势比较 Midjourney 和 Dall-E 都是强大的 AI 绘画工具&#xff0c;可以根据文本描述生成图像。 它们都使用深度学习模型来理解文本并将其转换为图像。 但是&#xff0c;它们在功能、可用性和成本方面存在一些差异。 Midjourney 优势: 可以生成更…

js判断对象是否有某个属性

前端判断后端接口是否返回某个字段的时候 <script>var obj { name: "John", age: 30 };console.log(obj.hasOwnProperty("name")); // 输出 trueconsole.log(obj.hasOwnProperty("email")); // 输出 falselet obj11 { name: "Joh…

9. 编程常见错误归类

编程常见错误归类 9.1 编译型错误9.2 链接型错误9.3 运行时错误 9.1 编译型错误 编译型错误⼀般都是语法错误&#xff0c;这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的&#xff0c;双击错误信息也能初步的跳转到代码错误的地方或者附近。编译错误&#xff0c;随着语言的熟练…

力扣栈题:删除最外层括号

char* removeOuterParentheses(char* s) {int stack 0;int num0;for(int i0;i<strlen(s);i){if(s[i](){stack;if(stack>1){s[num]s[i];}}else{--stack;if(stack>0){s[num]s[i];}}}s[num]\0;return s; } 思路&#xff1a;迭代加栈&#xff0c;如果不是第一个的左括号则…

苍穹外卖-day10:Spring Task、订单状态定时处理、来单提醒(WebSocket的应用)、客户催单(WebSocket的应用)

苍穹外卖-day10 课程内容 Spring Task订单状态定时处理WebSocket来单提醒客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a; 来单提醒&#xff1a; 客户催单&#xff1a; 1. Spring Task 1.1 介绍 Spring Task 是Spring框…

win32汇编弹出对话框

之前书上有一个win32 asm 的odbc例子&#xff0c;它有一个窗体&#xff0c;可以执行sql&#xff1b;下面看一下弹出一个录入数据的对话框&#xff1b; 之前它在.code段包含2个单独的asm文件&#xff0c;增加第三个&#xff0c;增加的这个里面是弹出对话框的窗口过程&#xff0…

哪些AI知识库比较好用?企业高管必看!

在科技进步的时代&#xff0c;工作效率和知识管理是企业面临的两大挑战。而AI知识库&#xff0c;正是解决这个问题的利剑。接下来&#xff0c;我将与你分享三款好用的AI知识库平台&#xff0c;感兴趣就往下看吧。 首先&#xff0c;我们不得不提的是Helplook。这是一个根据人工智…

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…

spring-boot-starter-thymeleaf加载外部html文件

在Spring MVC中&#xff0c;我们可以使用Thymeleaf模板引擎来实现加载外部HTML文件。 1.Thymeleaf介绍 Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;用于构建漂亮、可维护且易于测试的动态Web应用程序。它适用于与Spring框架集成&#xff0c;并且可以与Spring M…

每日OJ题_牛客HJ12 字符串反转(IO型OJ)

目录 牛客HJ12 字符串反转 解析代码 牛客HJ12 字符串反转 字符串反转_牛客题霸_牛客网 解析代码 #include <iostream> using namespace std; int main() {string str "";cin >> str;int left 0, right str.size() - 1;while (left < right){ch…

Flink源码解析(1)TM启动

网络传输模型 首先在看之前,回顾一下akka模型: Flink通讯模型—Akka与Actor模型-CSDN博客 注:ActorRef就是actor的引用,封装好了actor 下面是jm和tm在通讯上的概念图: RpcGateway 不理解网关的作用,可以先移步看这里:网关_百度百科 (baidu.com) 用于定义RPC协议,是…