Linux TCP参数——tcp_adv_win_scale

2024-03-19 05:20
文章标签 参数 linux tcp win scale adv

本文主要是介绍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的占比。

这篇关于Linux TCP参数——tcp_adv_win_scale的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824928

相关文章

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与