深入理解Linux网络:第二章-内核是怎么接收数据包的?

2023-05-16

关于中断

内核和网络设备驱动都是通过中断的方式来处理的。

当然中断分为两种,硬中断和软中断。当设备有数据进来了,设备首先会触发硬中断,因为处理数据需要耗费很长的时间所以CPU肯定是要把耗时的事情交给别人去干,随后CPU会发出软中断,让内核线程去处理数据。

两种中断的触发方式,硬中断通过给CPU相关的引脚发出一个电压变化,软中断通过一个内存里面的变量来做一个标记。同时程序里面说的那种都是软中断。他只是一个标记不会真的,意思是当前线程需要让出CPU资源。

内核收到路径

  1. 数据帧从外部网络到达网卡
  2. 网卡把帧DMA到内存上(RingBuffer)
  3. 网卡硬中断通知CPU
  4. CPU 响应硬中断,建立处理后发出软中断给内核线程
  5. 内核线程处理软中断,开始调用网卡驱动注册的poll函数开始收包
  6. 内核线程把数据从RingBuffer 上摘下来 保存为一个skb (网络协议栈数据结构体)
  7. 协议层开始处理网络帧,处理完成后数据data被放到socket的接收队列中。 (处理 :主要是传输层的一些处理,会根据不同的协议包来处理 拆包 封包等等)
  8. 内核唤醒用户进程

标记:这里最好结合计算机网络模型一起看

RingBuffer

RingBuffer 由三部分组成 igb_rx_buffer (这个数组是内核使用的), e1000_adv_rx_desc 数组(这个数组是网卡硬件使用的), skb (网络帧数据结构体)。

RingBuffer 是有大小的。

RingBuffer 当然也分为RX TX 两种,RX:接收数据队列,TX:发送数据队列

RingBuffer 丢数据的情况?

当RingBuffer 满的时候,新来的数据包就会被丢弃。使用ifconfig命令查看网卡的时候,可以看到里面有一个overruns,表示因为RingBuffer 队列满被丢弃的包数,如果发现有 丢包,可以通过ethtool 命令来加大环形队列的长度。

为什么网卡开启多队列能提升网络性能?

每一个队列都有独立的、不同的中断好,所以不同的队列在将数据接收到自己的 RingBuffer 后,会想不同的CPU 发起硬中断通知,而在硬中断处理中,软中断的执行是基于当前CPU核来执行的。所以如果只有一个队列的话,那么每一次处理数据都是由同一个CPU在执行。需要开启多队列,让不同的CPU来处理网络数据接收。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解Linux网络:第二章-内核是怎么接收数据包的? 的相关文章

  • 关于从Github上下载历史版本

    第一步 打开一个仓库 xff0c 可以看到此时在主分支下 xff0c 点击1位置查看历史版本 第二步 现在可以查看到所有的版本 xff08 提交 xff09 信息 xff0c 单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步
  • 数据结构——结构体

    结构体是一种复合数据类型 xff0c 定义了一组变量列表 xff0c 这些变量将放在一个内存块中的名称下 它允许通过使用指向结构的一个指针来访问不同的变量 struct structure name data type member1 da
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • ROS学习笔记—— rospy

    所有资料均来自于 https www icourse163 org learn ISCAS 1002580008 learn announce 和 https github com DroidAITech ROS Academy for B
  • XCOM(串口监视器,无单片机)+ESP8266显示心知天气天气信息

    XCOM xff08 串口监视器 xff0c 无单片机 xff09 43 ESP8266显示心知天气天气信息 ESP8266 AT指令显示 这是第一次写博客 xff0c 写的内容尽量通俗易懂贴近生活 PS 写的不好务必不要打我 ESP826
  • Linux编程——交叉编译器基本指令介绍

    Linux编程 交叉编译器基本指令介绍 arm span class token operator span linux span class token operator span gnueabihf span class token o
  • 马尔可夫链蒙特卡洛采样(MCMC)

    首先我们要明确的是马尔可夫链蒙特卡洛采样以下简称MCMC xff0c 它首先是个采样方法 1 采样的目的 采样作为任务 xff0c 用于生成新的样本求和 求积分 比如我们知道样本z的后验分布 我们经常会有一个需求 xff0c 得到目标函数f
  • dlang语法的简单整理

    dlang整理 为什么使用dlang 优点 xff1a 快速 xff0c 开发高效的 xff0c 方便 xff0c 无虚拟机的 xff0c 快速的 xff0c 高性能的 垃圾回收 缺点 xff1a 语法较为复杂 xff0c 支持gc 曾经很
  • docker 搭建基于prometheus的监控体系

    Prometheus是一个时间序列数据库 但是 xff0c 它不仅仅是一个时间序列数据库 它涵盖了可以绑定的整个生态系统工具集及其功能 Prometheus主要用于对基础设施的监控 包括服务器 xff0c 数据库 xff0c VPS xff
  • React回退上个页面及跳转下个页面

    回退上个页面 React 不保存数据 span class token keyword this span span class token punctuation span props span class token punctuati
  • Linux上jar包运行,但是接口测试Connect超时

    工作过程中遇到的 xff0c 这个异常就是连接超时 引起连接超时的问题有很多 xff0c 因为是feign调用超时 xff0c 我第一时间没怀疑是不是我的程序无法访问 xff0c 我一直怀疑是feigin那部分出错了 xff0c 什么跨服务
  • 网络调试助手(pc端)+ESP8266指令

    一 所需软件 链接 xff1a https pan baidu com s 1ycyOSZJOsiIocY3umrG7 g 提取码 xff1a 38f2 链接 xff1a https pan baidu com s 1EUuXUKcvf A
  • AD、PADS、allegro 哪个好用?

    AD PADS allegro 哪个好用 xff1f 用哪个都没问题 xff0c 都能完成任务 xff0c 主要看公司的选择了 AD是元老级的软件了 xff0c 也是PCB设计最先出的软件 xff0c 使用最为广范 在很多操作上都非常的人性
  • 基于python+pyqt5的串口助手

    基于python 43 pyqt5的串口助手 环境 xff1a pycharm python3 8 xff0c pyqt5 xff0c pyserial xff08 需要该节的工程文件 请私信 xff0c 或加VX xff1a Crazzy
  • STM32F4四轴飞行器总结

    xff08 菜鸡一枚 xff0c 记录一些学习的体会 xff0c 并记录了学习时提出的问题 xff0c 便于自己再次查阅 xff0c 若有错误之处 xff0c 希望大佬们指正 xff0c 谢谢 xff09 四旋翼简介 xff1a 嵌入式芯片
  • 详解RTK,RTD,SBAS,WAAS,PPP,PPK,广域差分等技术之间的关系与区别

    RTK与RTD的区别 xff0c 一个是载波相位差分 一个是码差分 xff0c 并且RTK的定位精度要高一些 RTK与PPK的区别 xff0c 一个是实时提供数据信息 xff0c 一个是事后处理 WAAS是SBAS系统一个具体的实例 xff
  • c实现set集合

    集合有点编程语言会带有 xff0c 有的没有 但是我想redis的集合set你一定听说过或者用过 下面咱们用链表来实现set 相信有了前面的基础我们可以很容易的实现set集合 需要引入我的链表的list c和list h 头文件 span
  • 实时单目物体SLAM Real-time Monocular Object SLAM

    2015 摘要 xff1a 我们提出了一个基于对象的实时SLAM系统 xff0c 该系统利用了迄今为止最大的对象数据库 我们的方法包括两个主要部分 xff1a 1 xff09 利用对象刚性约束改进地图并找到其真实比例的单目SLAM算法 xf
  • linux下多线程服务器编程

    前言 xff1a 整个程序的架构就是一开始创建一个线程 xff0c 在这个线程里面做下面几个操作 xff1a 1 调用socket xff0c 创建监听客户端的socket 2 设置socket属性 xff0c 端口可以重用 3 调用bin
  • MavLink简单使用

    参考连接 xff1a https mavlink io zh 整体说明 本文不探究mavlink协议的具体内容 xff0c 只说明如何简单使用 环境 xff1a win10 c c 43 43 MAVLink仓库clone 我们其实clon

随机推荐

  • gazebo支持的载具类型

    类型make指令四旋翼make px4 sitl gazebo具有光流的四旋翼make px4 sitl gazebo iris opt flow3DR Solo xff08 四旋翼 xff09 make px4 sitl gazebo s
  • YoLov3目标检测代码C++版本运行

    论文地址 xff1a YOLO YOLOv2 YOLO9000 YOLOv3 YOLOv4 YOLO系列权重 配置文件下载地址 xff1a https github com AlexeyAB darknet 代码解读 xff1a Deep
  • C++ ::

    表示作用域 xff0c 和所属关系 是运算符中等级最高的 xff0c 它分为三种 1 global scope 全局作用域符 xff09 xff0c 用法 xff08 name 2 class scope 类作用域符 xff09 xff0c
  • 下载Gazebo模型

    下载Gazebo模型 这时运行下面Gazebo命令 xff0c OK xff0c 错误没有了 xff0c 但怎么是一抹黑啊 xff01 roscore amp rosrun gazebo ros gazebo 首次运行Gazebo xff0
  • Linux 项目实战记录

    1 阻塞 非阻塞 同步 异步 网络IO 典型的一次IO的两个阶段是什么 xff1f 数据就绪和数据读写 数据就绪 xff1a 根据IO操作的就绪状态 阻塞 xff1a 1 调用IO方法的线程进入阻塞状态 xff0c xff08 函数进入wa
  • Mission Planner日志分析

    将找到的不同平台的Mission planner日志分析资源汇总起来以便以后查看 xff1a Pixhawk无人机教程 8 1 在Mission Planner中下载与分析日志 APM 自动拍摄后期POS数据 APM和PIX飞控日志分析入门
  • 关于iai_kinect2中标定数据的个人理解

    iai kinect2 kinect2 bridge data 196605135147 iai kinect2 kinect2 bridge data 299150235147
  • mac地址的作用

    最近读一本关于linux编程的书籍 xff0c 看到一部分很迷茫 xff0c 忽然不知道mac地址的作用 xff0c 既然已经有了ip地址了要mac地址何用呢 xff1f MAC地址是数据链路层的地址 xff0c 如果mac地址不可直达 直
  • putty远程连接服务器,显示超时,网络么有问题

    今天用putty连接阿里云服务器时 xff0c 用ip连接一直显示超时 换了端口号也没用 xff0c 最后 xff0c 重启了一下服务就好了 xff0c 记录一下以免以后碰到
  • CUDA11.x VS2017编译报错MSB3721

    问题原因 xff1a 11 XCUDA版本太高 xff0c 用10版本的就行了 博主电脑是联想拯救者3070显卡 xff0c 于是就按照网上的教程下载了适合我NVIDIA版本11 4的CUDA 按照网上配置弄完之后 xff0c VS2017
  • Ubuntu 使用VNCserver远程连接灰屏问题的解决方案

    问题 xff1a Ubuntu需要使用VNCserver服务提供远程桌面 xff0c 使用TightVNC Viewer远程连接主机 xff0c 发现只能出现三个正常显示的桌面 xff0c 继续开更多的桌面 xff0c 就会发现新开的窗口都
  • opencv-python(六):颜色空间及转换

    0 颜色模式 RGB 模式 百万种颜色 CMYK 模式 四种印刷色 索引模式 256 种颜色 xff09 灰度模式 256 级灰度 xff09 位图模式 两种颜色 xff09 0 1 灰度模式 也就是灰度图 黑白照片 xff0c 每个像素只
  • python爬虫之多线程、多进程爬虫

    一 原因 多线程对爬虫的效率提高是非凡的 xff0c 当我们使用python的多线程有几点是需要我们知道的 xff1a 1 Python的多线程并不如java的多线程 xff0c 其差异在于当python解释器开始执行任务时 xff0c 受
  • Ubuntu16 ROS ORB-SLAM3 intelD435与单目USB_CAM 跑自己的摄像头运行成功记录

    我也是根据其他人的教程来的 xff0c 其实我应该搞错了顺序 xff0c 按道理是先安装ROS xff0c 然后是D435驱动 xff0c 再下载ORBSLAM3 再编译SLAM3的非ROS xff0c 再编译SLAM3的ROS 但是这个顺
  • stm32 驱动ADXL345传感器例程(IIC驱动,可自行改SPI方式)

    stm32 驱动ADXL345传感器例程 xff08 IIC驱动 xff0c 可自行改SPI方式 xff09 前言一 介绍ADXL345传感器二 STM32驱动使用步骤1 配置IIC通信协议2 寄存器初始化配置3 读入数据串口打印 三 成果
  • (6)gazebo打开后黑屏,提示preparing your world

    问题描述 xff1a 运行roscore xff0c 再运行rosrun gazebo ros gazebo xff0c 可以打开gazebo xff0c 但是发现界面会发现一直处于黑屏这种状态 xff0c 提示preparing your
  • 树莓派3B+(64位)安装Ubuntu mate 16.04.2以及彩虹屏解决方案及相关文件

    1 烧录工具 链接 xff1a https pan baidu com s 1c5Vf9zzpCBySEyBNP 7nw pwd 61 1234 提取码 xff1a 1234 2 树莓派3B 43 xff08 64位 xff09 Ubunt
  • [shopee内推] 前端、后端、测试目前公司拉美市场急缺人才

    待遇超级好 薪资超级高 工作地点 xff1a 深圳 可直接发送简历到 xff1a ziwen jiang 64 qq com 可加微信 xff1a JZWen tiger 职位描述 岗位职责 xff1a 1 参与面向东南亚等地区的线上 am
  • mac xcode出现xxx.h没有出现的问题

    mac xcode出现xxx h没有出现的问题 xff0c 在命令行使用g 43 43 lxx编译代码却完全没有问题 xff0c 得出的结论是xcode的配置不到位 找了半个小时没找到莫名的烦躁 xff0c 使用xarman studio
  • 深入理解Linux网络:第二章-内核是怎么接收数据包的?

    关于中断 内核和网络设备驱动都是通过中断的方式来处理的 当然中断分为两种 xff0c 硬中断和软中断 当设备有数据进来了 xff0c 设备首先会触发硬中断 xff0c 因为处理数据需要耗费很长的时间所以CPU肯定是要把耗时的事情交给别人去干