DPDK源码分析之网络基础知识

news2024/9/29 5:33:36

字节对齐 attribute ((aligned (1)));

  • 在设计不同CPU下的通信协议时,或者编写硬件驱动程序时寄存器的结构这两个地方都需要按一字节对齐。即使看起来本来就自然对齐的也要使其对齐,以免不同的编译器生成的代码不一样.

  • 如果跨越了4字节边界存储,那么cpu要读取两次,这样效率就低了

内存池设计原理

好处:

  • 比malloc/free进行内存申请/释放的方式快

  • 不会产生或很少产生堆碎片

  • 可避免内存泄漏

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

伙伴系统:

包在系统协议栈的流图,操作系统做了那些事情

  • 开始收包之前,Linux要做许多的准备工作,创建ksoftirqd线程,协议栈注册,linux要实现许多协议,比如arp,icmp,ip,udp,tcp,每一个协议都会将自己的处理函数注册一下;网卡驱动初始化,每个驱动都有一个初始化函数,内核会让驱动也初始化一下。在这个初始化过程中,把自己的DMA准备好,把NAPI的poll函数地址告诉内核;启动网卡,分配RX,TX队列,注册中断对应的处理函数

  • 网卡通过DMA将packet写入内核的rx_ring环形队列缓冲区,并触发硬中断(如果没有DMA,CPU就会负责赋值网卡数据到内存中,这个过程非常耗时)

  • CPU在收到中断之后,调用网卡ISR也就是所谓的中断handler,分配sk_buf并入input_pkt_queue(如果队列已满则丢弃),发出一个软中断NET_RX_SOFTIRQ,软中断被调度

  • ksoftirqd线程开始调用驱动的poll函数收包,然后将sk_buf从input_pkt_queue传入process_queue,根据协议类型调用网络层协议的handler,ip_rcv执行包头检查,ip_router_input()进行路由,决定本机/转发/丢弃,tcp_v4_rcv执行包头检查,tcp_v4_lookup查询对应的socket和connection,如果正常,tcp_prequeue将skb放进socket接收队列,socket随即唤醒所在的进程

  • 唤醒的进程调用socket recv系统调用,如果是TCP则调用tcp_recvmsg从sk_buffer拷贝数据

Dpdk调优有哪些

  • 控制层和数据层分离。将数据包处理、内存管理、处理器调度等任务转移到用户空间去完成,而内核仅仅负责部分控制指令的处理。这样就不存在上述所说的系统中断、上下文切换、系统调用、系统调度等等问题。

  • 使用多核编程技术代替多线程技术,并设置 CPU 的亲和性,将线程和 CPU 核进行一比一绑定,减少彼此之间调度切换。

  • 针对 NUMA (Non Uniform Memory Access Architecture)系统,尽量使 CPU 核使用所在 NUMA 节点的内存,避免跨内存访问。

  • 使用大页内存代替普通的内存,减少 cache-miss。

  • 采用无锁技术解决资源竞争问题。

Tcp建链的异常状态维护

  • 第一次握手消息丢失,触发超时重传机制,包括重传次数和重传周期

  • 第二次握手消息丢失:(SYN+ACK),客户端和服务端都会重传

  • 第三次握手消息丢失:(ACK),服务会重传SYN+ACK报文段,直到收到ACK响应或者达到最大重传次数

  • 第一次挥手消息丢失:(FIN),客户端会开启重传流程,达到最大次数后客户端将停止重传,直接进入 CLOSE 状态。

  • 第二次挥手消息丢失:(ACK),客户端会重传FIN报文,直到收到ACK报文,或达到FIN的最大重传次数。

  • 第三次挥手消息丢失:(FIN),TCP状态将从 CLOSE_WAIT 状态转入 LAST_ACK 状态,如果在超时时间内未收到客户端的第四次挥手 ACK报文,则重传FIN报文

  • 第四次挥手消息丢失:(ACK),ACK报文不会重传,服务端在超时未收到ACK后会重传FIN,直至成功收到ACK会达到最大重传次数

TIME_WAIT存在的两个理由

  • 可靠地实现TCP全双工连接的终止;

  • 允许老的重复分节(数据报)在网络中消逝。

B+树

在B +树中, 记录(数据)只能存储在叶节点上, 而内部节点只能存储键值。

B +树的叶节点以单链接列表的形式链接在一起, 以使搜索查询更高效创建

为啥线程的地址空间能一样

线程使用的底层函数和进程一样,都是clone。从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的。进程可以蜕变成线程。线程可看做寄存器和栈的集合。

三级映射:进程PCB --> 页目录(可看成数组,首地址位于PCB中) --> 页表 --> 物理页面 --> 内存单元

两个线程具有各自独立的PCB,但共享同一个页目录,也就共享同一个页表和物理页面。

Reference

(7条消息) 图解 Linux 网络包接收过程_Peter的专栏-CSDN博客

(7条消息) linux内存管理笔记(二十二)----伙伴系统原理奇小葩-CSDN博客伙伴系统原理

原文链接:https://zhuanlan.zhihu.com/p/460993490 

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

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

相关文章

java之JVM的位置和体系结构

JVM的概念: JVM 即 Java Virtual Machine,中文名为 Java虚拟机,一般情况下,对于C/C 程序,编译成二进制文件后,就可以直接执行了,但Java 需要使用 javac 编译成 .class 文件,还需要使…

【LSTM回归预测】基于matlab主成分分析结合BiLSTM数据回归预测【含Matlab源码 2276期】

一、LSTM和BiLSTM神经网络结构及原理介绍 长短期记忆网络(Long short-term memory, LSTM)实质上可以理解为一种特殊的RNN,主要是为了解决RNN网络在长序列训练过程中发生梯度消失和梯度爆炸的问题。相比于RNN,LSTM主要是引入了细胞形态(cell state)用于保存长期状态&#xff0c…

世界杯决赛倒计时,你最看好谁

一、期待终极决赛 C站肯定有许多看球的朋友吧。明天即将迎来2022年世界杯终极对决,阿根廷队对战法国。来赶个晚集,也来聊聊世界杯,下一个四年就是2026,会不会还有这种精神呢。先来回顾一下本轮世界杯比赛中的对阵吧。 本轮世界杯中…

Win11+RTX3060+Anconda+CUDA11.3+cuDNN8.2+Pytorch1.10一条龙服务2

Win11RTX3060AncondaCUDA11.3cuDNN8.2Pytorch1.10一条龙服务 (1)查看安装了哪些包 conda list(2)查看当前存在哪些虚拟环境 conda env list (3)创建虚拟环境,你可以创建好几个虚拟环境,虚拟环…

Flex布局小练--博文列表item布局实现

文章目录前言元素组成实现html部分布局总结前言 今天划一个水先,没办法,作孽没写完,什么这不是作孽的一部分嘛?!听不见,听不见。 来先看一下我们要做的一个效果: 首先是这个页面下面的&#xf…

如何基于Jetbrains IDEA DataBase从数据库表中生成对应的Java Bean

在日常的项目开发过程中,大部分人可能都会遇到过想从表自动生成带有注释的Java Bean,在Jetbrains IDEA中通过DataBase工具也是可以生成的。Jetbrains IDEA的Database借助一个名称为Generate POJOs.groovy的groovy模板文件,可以帮我们做代码生…

Python工程师Java之路(t)SpringBoot部署步骤 java -jar

文章目录步骤1、开发环境2、新建工程3、新建controller4、开发环境试运行和测试5、打包运行命令补充步骤 1、开发环境 WIN10IDEA2021Maven3.6.3JDK1.8 2、新建工程 选择Spring和Java版本 添加依赖 3、新建controller package com.example.demo.controller;import org.spr…

macOS Ventura 13.1 (22C65) Boot ISO 原版可引导镜像

本站下载的 macOS Ventura 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。 2022 年 12 月 13 日,macOS Ventura 13.1 推出了“无边记”&#x…

基于python的PatchMatchStereo立体匹配算法实现

文章目录前言一、PatchMatchStereo是什么?1.随机初始化2.迭代传播2.1空间传播2.2视图传播2.3帧间传播2.4平面细化二、PatchMatchStereo立体匹配算法实现前言 PatchMatchStereo是Michael Bleyer等在2011年发表于British Machine Vision Conference(BMVC&a…

机器学习 鸢尾花数据集划分 训练集和测试集

目录 一:加载数据 二:数据集整理 三:数据集划分 一:加载数据 加载数据,并创建一个DataFrame,便于数据分析 from sklearn.datasets import load_iris import pandas as pd import numpy as np from skle…

大数据:计算学生成绩

文章目录一、提出任务二、任务进行(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录(二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启动成绩驱动器类…

【JavaSE】类和对象(三)——内部类

目录 1. 何为内部类 2. 内部类的分类 2.1 静态内部类 2.1.1 如何实例化静态内部类的对象? 2.1.2 外部类与静态内部类如何相互访问? 2.2 非静态内部类/实例内部类 2.2.1 非静态内部类不能定义静态的成员变量以及方法 2.2.2 非静态内部类的实例化 2.2.…

三层-生成树-ospf-速端口思科练习实验

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,…

Spark-SaprkStreaming(概述、架构、原理、DStream转换、案例)

文章目录SparkStreaming概述特点架构原理DStream和RDD的区别DAG如何读取数据(※)WordCount 案例实操代码解析RDD 队列用法及说明案例实操自定义数据源Kafka 数据源DStream 转换无状态转化操作Transformjoin有状态转化操作UpdateStateByKeyWindowOperationsDStream 输出优雅关闭…

pip命令安装torchnet包,超简单!

pip命令安装torchnet包,超简单! torchnet是torch的框架,它提供了一组抽象,旨在鼓励代码重用以及鼓励模块化编程。 目前,torchnet提供了四组重要的类: Dataset:以各种方式处理和预处理数据。 …

Typora入门教程

文章目录Typora入门教程1 简要介绍2 下载安装包3 常用操作3.1 标题3.2 加粗3.3 斜体3.4 高亮3.5 分割线3.6 图片3.7 链接3.8 引用3.9 列表3.10 目录3.11 表格3.12 代码块3.13 行内代码3.14 按键效果4 自定义快捷键5 Typora PicGo 阿里云OSS搭建个人笔记5.1 注意事项5.2 准备工…

Hibernate学习总结

文章目录一、图解运行过程二、核心代码三、session方法2、session缓存3、save()与persist()4、get()5、update()6、delete()7、evict()8、doWork(),可获得connection对象四、hibernate.cfg.xml(使用数据库连接池)五、*…

java项目-第176期ssm个人交友网站系统-java毕业设计

java项目-第176期ssm个人交友网站系统-java毕业设计 【源码请到下载专栏下载】 《个人交友网站》 该项目分为2个角色,管理员、用户角色。 用户可以浏览前台,包含功能有: 首页、交友信息、线下活动、系统公告、论坛信息 管理员进行后台登录,包…

【KNN分类】基于matlab模拟退火优化KNN、蝗虫算法优化KNN数据分类【含Matlab源码 2275期】

⛄一、1KNN算法思想 K近邻算法(KNN,K nearest neighbor algorithm)是机器学习中一种基本的分类与回归方法,其主要原理是通过对不同测试样本之间的距离进行量测,而后寻找最为相近的K个样本来进行分类,具有简单、直观、…

【LeetCode题目详解】(三)21.合并两个有序链表、141.环形链表、142.环形链表Ⅱ

目录 一、力扣第21题:合并两个有序链表 解法思路 代码一 代码二 代码三 二、力扣第141题:环形链表 1.快慢指针法 2.证明快慢指针是可行的 三、力扣第142题:环形链表Ⅱ 1.解题思路 2.代码 总结 一、力扣第21题:合并两个…