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,一经查实,立即删除!

相关文章

【字符串算法题】541. 反转字符串 II

题目链接 思考 把字符串以2k的步长分成count_reverse个子区间。考虑最后一个子区间的字符数量&#xff1a;1&#xff09;如果大于等于k&#xff0c;则它要和前面的子区间一样&#xff0c;要对区间内的前k个字符进行反转&#xff1b;2&#xff09;如果小于k&#xff0c;则它的…

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;很多用字符串…

【兆易创新GD32H759I-EVAL开发板】 LUT功能

颜色查找表&#xff08;LUT, Lookup Table&#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 个台阶。你有多少种不…

24计算机考研调剂 | 集美大学(11408)

[2024考研调剂]集美大学计算机工程学院智慧城市创新实验室招收学硕 考研调剂招生信息 学校:集美大学 专业:工学->软件工程 年级:2024 招生人数:8 招生状态:正在招生中 联系方式: ********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 实验…

旅行社旅游线路预定管理系统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两个通道直方图模型 作用…

探索未来科技:量子计算的前沿与挑战

随着信息技术的飞速发展&#xff0c;传统的计算模式已经难以满足日益增长的数据处理需求。在这个背景下&#xff0c;量子计算作为一种全新的计算模式&#xff0c;逐渐进入人们的视野。本文将探讨量子计算的前沿技术以及在软件开发领域所面临的挑战。 量子计算的前沿技术 量子计…

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

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

Android Framework开发之Linux +Vim命令

一、linux常用命令 在Android源码开发中&#xff0c;Linux命令的运用是至关重要的。这些命令不仅帮助开发者有效管理文件、目录和系统资源&#xff0c;还能在源码编译、调试和排错过程中发挥关键作用。以下是对Android源码开发中常用Linux命令的更详细介绍&#xff1a; 当然可…

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;随着语言的熟练…

本地mysql测试成功后上传至云服务器出现了这么多问题?

本地MySQL数据库迁移至云服务器的过程中可能出现多种问题,以下是常见的一些原因及其解决思路: 权限问题: 账户权限:本地MySQL数据库的用户权限设置可能与云服务器上的MySQL实例不同,比如未授权远程连接或赋予了错误的权限。你需要确认云服务器MySQL数据库的用户是否有从远…

JAVA八股文面经问题整理第6弹

文章目录 目录 文章目录 提问问题 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 问题9 问题10 问题11 问题12 写在最后 提问问题 介绍一下Linux常⽤命令&#xff0c;例如&#xff1a;Vim快捷键&#xff0c;常⽤查看Log的命令&#xff0c;路径相关&#x…

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

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;如果不是第一个的左括号则…