深入理解Linux网络技术内幕(十二)——中断事件一般性参考数据

news2024/10/6 12:25:05

文章目录

  • 前言
  • 统计数据
  • 通过/proc和sysfs文件系统调整
  • 本部分涉及的函数和变量
  • 本部分涉及的文件和目录


前言

这篇博客的内容不是很多,主要是介绍几种一般性信息,适用于前面所讲涉及中断事件和帧的处理

统计数据

有关帧接收的统计数据保存在各个CPU数组netdev_rx_stat中,其元素为netif_rx_stats类型(参见include/linux/netdevice.h

struct netif_rx_stats netdev_rx_stat(NR_CPUS);
struct netif_rx_stats
{
    unsigned total;
    unsigned dropped;
    unsigned time_squeeze;
    unsigned throttled;
    unsigned fastroute_hit;
    unsigned fastroute_success;
    unsigned fastroute_defer;
    unsigned fastroute_deferred_out;
    unsigned fastroute_latency_reduction;
    unsigned cpu_clollision;
}__cacheline_aligned

netif_rx_stats的元素有

  • total

    • 已处理的入口帧总数,包括任何可能被丢弃的。此值会在netif_rx_receive_skb中更新,也就说,当驱动程序不使用NAPI时(netif_rx接口),同一个帧被计算两次(错误)。
  • dropped

    • 因为接收时CPU处于窒息状态而被丢弃的帧的数目
  • time_squeeze

    • 当帧依然在CPU入口队列中,因此没有变成CPU的贪婪者时,net_rx_action返回的次数。
  • throttled

    • CPU进入窒息状态的次数,此值由netif_rx递增
  • fastroute_hit

  • fastroute_success

  • fastroute_defer

  • fastroute_letency_reduction

  • fastroute_deferred_out

    • 由Fastroute功能所用的一些字段。
  • cpu_collision

    • CPU无法获得设备驱动程序锁(明确的讲就是dev->xmit_lock)的次数,因为该锁已被另一个CPU取走。这个计数器会在qdisc_restart中更新,而qdisc_restart只处理帧传输,而无接收。cpu_collision是此结构中唯一与传输有关的统计数据。

前述有些计数器目前都由netif_rx(由非NAPI驱动程序所用)更新,这表示使用NAPI驱动程序时,其值是不正确的。

netdev_rx_stat向量的内容可通过/proc接口查看。

其他统计数据则由驱动程序、较高层协议以及流量控制队列控制保存在私有数据结构中。这些值有些可以通过用户空间程序读取,如ifconfig、tc、ip或netstat,其他则可通过/proc输出。

通过/proc和sysfs文件系统调整

下表列出了所有在/proc/sys/net/core中的文件,都定义在/net/core/sysctl_net_core.c,你可以找出文件与内核变量之间的关联性。

文件名内核变量默认值
netdev_max_backlognetdev_max_backlog300
mod_congmod_cong290
lo_conglo_cong100
no_congno_cong20
no_cong_threshno_cong_thresh10
dev_weightweight_p64

需要强调的是,NAPI驱动程序不需要上表中的任何字段。NAPI驱动程序应该以驱动程序的局部变量值设置net_device->weight,而不使用weight_p。但是,如果NAPI驱动程序想用weight_p,也可以使用,特别是它们通常都使用相同的默认值64。从内核2.6.12版本起,net_deviceweight子段值可以在运行期间以sysfs通过各个设备文件/sys/class/net/device_name/weight进行调整。Weight文件是在net/core/net-sysfs.c中创建的。

netdev_rx_stats结构所收集的统计数据可通过文件/proc/net/softnet_stat读取(其输出是十六进制格式)。

本部分涉及的函数和变量

下表介绍或涉及的主要函数、变量以及数据结构。(与中断事件及帧处理相关的函数、变量以及数据结构)

名称描述
函数
netif_rx把输入帧排入CPU队列
netif_rx_schedule调度NET_RX_SOFTIRQ软件中断以准备执行
__netif_rx_schedule功能同上
netif_rx_completenet_device->poll虚拟函数清除队列时就会调用此函数
netif_start_queue开启设备的传输
netif_stop_queue关闭设备的传输
netif_queue_stopped检查设备是否已开启传输功能
netif_schedulenetif_schedule用于调度设备以准备传输。
netif_wake_queue开启设备传输功能,并且设备调度以准备传输
qdisc_run从设备出口队列中退出帧,将其压入设备驱动程序以进行传输。
process_backlog非NAPI设备驱动程序所用poll虚拟函数
netif_receive_skb处理输入帧传给较高层协议处理函数
dev_queue_xmit帧传输的主要函数
dev_kfree_skb释放sk_buff结构
dev_kfree_skb_irqnet_tx_softirq函数调用
dev_kfreee_skb_any同上
do_IRQ启用相关联的处理函数以负责硬件中断通知信息
open_softirq为软件中断注册以及调度。
raise_softirq下半部函数
raise_softirq_irqoff同上
do_softirq启用相关联的处理函数以负责未决的软件中断。
invoke_softirq用于处理未决状态的中断事件
net_rx_actionNET_RX_SOFTIRQ的处理函数
net_tx_actionNET_TX_SOFTIRQ的处理函数
tasklet_init初始化tasklet_struct结构
tasklet_actionTASKLET_SOFTIRQ软件中断的处理函数
tasklet_hi_actionHI_SOFTIRQ软件中断的处理函数
tasklet_enable分别是开启和关闭微任务。
tasklet_hi_enable
tasklet_disable
tasklet_disable_nosync
tasklet_schedule为微任务调度以准备执行
tasklet_hi_schedule
变量
mod_cong输入队列的拥塞等级(由非NAPI设备所用)
lo_congsoftnet_data字段
no_cong
no_cong_thresh
netdev_max_backlogCPU输入队里的最大尺寸
数据结构
softnet_data那两个NET_XXX_SOFTIRQ软件中断会为每个CPU都使用这么一个结构
tasklet_struct代表一个微任务。

本部分涉及的文件和目录

xxx关键词代表一种体系结构。有些体系结构不需要特殊的特细结构专用文件,因为一个通用文件有时也可以由好几种体系结构使用。
在这里插入图片描述

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

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

相关文章

SMOKE模型排放清单处理技术及在多模式下实践应用方法与VOCs排放量核算

【查看原文】SMOKE模型排放清单处理技术及在多模式下实践应用方法与VOCs排放量核算 随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染…

嵌入式开发为啥不适合macOS系统?

关注星标公众号,不错过精彩内容作者 | strongerHuang微信公众号 | strongerHuangMac电脑适合做嵌入式开发吗?不定期有小伙伴问我类似的问题,我的回答是:不适合!至于为什么,只要你用心观察一下身边做嵌入式软…

入行必看:数字后端工程师有哪些就业机会?

今年高校毕业生人数首破千万,对于即将踏入IC这个行业的应届生来说,今年的就业形势不大乐观。 很多迷茫的同学问了我一些问题: 如果我开始做一名后端工程师,5年后我会做些什么?我能切换到一个设计的工作吗&#xff1f…

数据图表工具-FineReport数字控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件输入数字信息(整数、负数、小数),录入填报的数据,如下图所示: 1.2.2 参数控件 参数面板处可以通过该…

[附源码]Python计算机毕业设计SSM基于网络C++实验管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

只会用 Go 写 O(N²) 的冒泡排序算法?来看看优化后最好情况下的 O(N) 算法吧

只会用 Go 写 O N 的冒泡排序算法?来看看优化后最好情况下的 O N 算法吧冒泡排序图片演示普通的冒泡排序算法优化算法小结耐心和持久胜过激烈和狂热。 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现冒泡排序算法。如果本文对你有帮助&…

单商户商城系统功能拆解43—应用中心—门店自提

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

岗位认识---算法工程师、数据分析

1,算法工程师 1.1 定义 AI算法 算法能力工程能力业务能力 算法工程师 算法职位名称: 算法工程师(机器学习大类) NLP(自然语言处理)算法工程师 CV(计算机视觉)算法工程师 CG&…

Vision Transformer with Deformable Attention

论文地址:https://arxiv.org/abs/2201.00520 代码地址:https://github.com/LeapLabTHU/DAT Abstract Transformers 最近在各种视觉任务上表现出了卓越的性能。大的,有时甚至是全局的感受野赋予了 Transformer 模型比 CNN 模型更高的表示能力…

Kubelet v1.25.x源码——syncLoop

1. 环境说明 Kubernetes源码版本:remotes/origin/release-1.25 Kubernetes编译出来的Kubelet版本:Kubernetes v1.24.0-beta.0.2463ee7799bab469d7 Kubernetes集群实验环境:使用Kubernetes v1.25.4二进制的方式搭建了一个单节点集群 K8S 单节…

RNA-seq 详细教程: `DESeq2` 差异表达分析(7)

学习目标 了解如何设计公式了解如何使用 DESeq2 执行差异表达分析1. DE 分析 差异表达分析工作流程的最后一步是将原始计数拟合到 NB 模型并对差异表达基因进行统计检验。在这一步中,我们本质上是想确定不同样本组的平均表达水平是否存在显著差异。 Paul Pavlidis, …

C语言第二十课:实用调试技巧

目录 前言: 一、Bug: 二、调试: 1.调试是什么: 2.调试的基本步骤: 3. Debug 与 Release : 三、在Windows环境下进行调试: 1.调试环境的准备: 2.调试的快捷键: 3.调试…

【嵌入式硬件芯片开发笔记】HART调制解调器AD5700芯片配置流程

【嵌入式硬件芯片开发笔记】HART调制解调器AD5700芯片配置流程 低功耗HART调制解调器 适用于AD5700/AD5700-1 我的是XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时,为解调&…

React源码(一): render createElement

React源码——渲染(render && createElement)的简单实现 前言 当前市面上公司对React需求越来越大主, 对于React的源码学习必须提上日程 初始化项目 React脚手架创建项目 全局安装npm install -g create-react-app创建项目create-react-app M…

Web大学生网页作业成品——仿腾讯游戏官网网站设计与实现(HTML+CSS+JavaScript)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

常规构件的立面CAD图案绘制

今天绘制的这个常规构件CAD立面图形呢,用到的都是很基础的CAD命令,有直线、修剪、倒角和旋转等,绘制出来也是很简单的,可以跟着一起操作一下 目标对象 操作步骤 1.使用直线命令绘制出一下线段,形成一个封闭图形 2.用…

【Windows基础】本地安全策略

本地安全策略基本内容 概念 对登陆到计算机上的账号定义一些安全设置,在没有活动目录集中管理的情况下,本地管理员必须为计算机进行设置以确保其安全。 主要是对登录到计算机得账户进行一些安全设置主要影响是本地计算机安全设置 打开方式 三种方式&…

python的distutils、setuptools模块

python中安装包的方式有很多种: 源码包:python setup.py install在线安装:pip install 包名(linux) / easy_install 包名(window) python包在开发中十分常见,一般的使用套路是所有的功能做一个python模块包…

一个bug,干倒一家估值1.6亿美元的公司

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注! 动态类型一时爽,代码重构火葬场。 ——题记 你生涯中写过的最严重的bug是什么? 我们日常接触的bug,无非是页面崩溃&a…

【Zookeeper】学习笔记(一)

Zookeeper学习笔记一、概述1.1、Zookeeper1.2、Zookeeper工作机制1.3、Zookeeper特点1.4、数据结构1.6、应用场景1.6.1、统一命名服务1.6.2、统一配置管理1.6.3、统一集群管理1.6.4、服务器动态上下线1.6.5、软负载均衡二、下载安装2.1、集群规划2.1、集群规部署三、zk选举3.1、…