首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核网络udp数据包发送(二)——UDP协议层分析

前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调优。...UDP corking 是一项优化技术,允许内核将多次数据累积成单个数据报发送。...Linux 内核会使用一个数组将 TOS 转换为优先级,后者会影响数据包如何以及何时从 qdisc 中发送出去。...这个函数很复杂,它执行很多计算以确定如何构造传递给下面的网络层的 skb。 该函数的重点包括: 如果硬件支持,则处理 UDP Fragmentation Offload(UFO)。...接下来看看如何在 Linux 内核中监视和调优 UDP 协议层。 4.

5.4K51

Linux内核网络udp数据包发送(一)

本系列文章1-4,来源于陈莉君老师公众号“Linux内核之旅” 1....协议层注册 协议层分析我们将关注 IP 和 UDP 层,其他协议层可参考这个过程。我们首先来看协议族是如何注册到内核,并被 socket 子系统使用的。...sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) 简单来说,内核会去查找由 UDP 协议栈导出的一组函数(其中包括用于发送和接收网络数据的函数),并赋给.../* ... */ }; EXPORT_SYMBOL(udp_prot); 现在,让我们转向发送 UDP 数据的用户程序,看看 udp_sendmsg 是如何在内核中被调用的。...sendmsg()函数作为分界点,处理逻辑从 AF_INET 协议族通用处理转移到具体的 UDP 协议的处理。 5. 总结 了解Linux内核网络数据包发送的详细过程,有助于我们进行网络监控和调优。

3.9K51
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核网络UDP数据包发送(四)——Linux netdevice 子系统

Linux 支持流量控制(traffic control)的功能,此功能允许系统管理员控制数据包如何从机器发送出去。流量控制系统包含几组不同的 queue system,每种有不同的排队特征。...Linux 上每个 device 都有一个与之关联的默认 qdisc。对于仅支持单发送队列的网卡,使用默认的 qdisc pfifo_fast。支持多个发送队列的网卡使用 mq 的默认 qdisc。...2.2 __netdev_pick_tx 我们来看内核如何选择 TX 队列。...当发生这种情况时,内核可以为此数据包选择不同的 TX 队列。UDP 协议层不设置此标志 ,因此 UDP 数据包永远不会将 ooo_okay 设置为非零值。...include/linux/netdevice.h: /* * Returns a Tx hash for the given packet when dev->real_num_tx_queues

3.1K11

Linux内核UDP收包为什么效率低?能做什么优化?

现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。...Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知道怎么回事将网络协议栈的实现塞进了内核态,从此它就一直在内核态了。...Linux内核UDP处理逻辑在4.10版本也确实去掉了两级的lock。恢复到了2.6.25内核版本之前的逻辑。 上面的优化带来了可观的性能收益,但是却并不值得炫耀。...这两点其实也就是 “为什么内核协议栈性能干不过用户态协议栈” 的要点。当然,Linux内核协议栈无法摆脱这两点问题,也就回答了本文的题目中的第一个问题, “Linux内核UDP收包为什么效率低?”...其实Linux内核社区早就意识到了这两点,早在3.11版本内核中引入的busy poll机制就是为了解决锁和切换问题的。

3.2K61

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.2K32

Linux内核分析》之构造一个简单的Linux系统MenuOS 实验总结

环境搭建与配置过程 个人Linux系统环境搭建MenuOS的过程 Linux系统环境搭建MenuOS的过程 1、Linux系统环境搭建MenuOS的过程 # 下载内核源代码编译内核 cd ~/LinuxKernel...-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/...rest_init();中包含内核启动过程 所在位置:xref: /linux-3.18.6/init/main.c rest_init()函数 从系统内核一启动,rest_init()会一直存在,是...总结 Linux内核的启动,通过start_kernel()进行各种初始化工作,最终执行到rest_init()来初始化0号进程,同时0号进程创建1号用户态的进程以及其他服务的一些内核线程。...windCoder原创作品转载请注明出处 参考资料 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

2.1K10

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

linux内核编程_linux内核是什么

内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...Linux内核的有哪些组成部分? 进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC) Linux内核的的组成部分之间有什么关系?...Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则。 配置文件(Kconfig):给用户提供配置选择的功能。...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写的源代码复制到Linux 内核源代码的相应目录。...次引导加载程序加载Linux内核和可选的初始RAM 磁盘,将控制权交给Linux内核源代码。 运行被加载的内核,并启动用户空间应用程序。

18.8K30

LINUX内核

一、Linux内核2.6特点: 1.新的调度器 2.内核抢占 3.改进线程模型 4.虚拟内存 5.文件系统 6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。...二、LINUX内核的组成 1.LINUX内核源代码目录结构 1)arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如i386,arm,powerpc,mips等。...4)Documentation:内核各部分通用解释和注释。...模块 16)sound:ALSA,OSS音频中设备的核心代码和常用设备驱动 17)usr:实现了用于打包和压缩的CPIO等 2.LINUX内核组成部分 2.1 LINUX主要用进程调度,虚拟文件系统,...3.Linux内核空间与用户空间 Linux只能通过系统调用和硬件中断来完成用户空间到内核空间的控制转移

13.9K30

Linux内核UDP收包为什么效率低?性能怎么优化(超详细讲解)

现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。...Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知道怎么回事将网络协议栈的实现塞进了内核态,从此它就一直在内核态了。...Linux内核并没有在横向上将锁的粒度做划分,而是在纵向上,采用两个层次的锁机制: 我们看到的Linux内核在处理收包逻辑时的backlog,其实抽象出来就是上面的二级锁,它是不是很像Windows的...Linux内核UDP处理逻辑在4.10版本也确实去掉了两级的lock。恢复到了2.6.25内核版本之前的逻辑。 上面的优化带来了可观的性能收益,但是却并不值得炫耀。...这两点其实也就是 “为什么内核协议栈性能干不过用户态协议栈” 的要点。当然,Linux内核协议栈无法摆脱这两点问题,也就回答了本文的题目中的第一个问题, “Linux内核UDP收包为什么效率低?”

1.5K20

Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后的...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统的 Linux 内核版本号 , 执行过程如下 : root@ubuntu...x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前的内核版本号是 4.13.0 ; 三...、进入并查看 linux 内核源码目录 ---- 进入之前解压的 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14 linux-5.6.14

86.7K60

Linux 内核 vs Windows 内核

对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,Linux 最大的魅力在于,全世界有非常多的技术大佬为它贡献代码。...操作系统核心的东西就是内核,这次我们就来看看,Linux 内核和 Windows 内核有什么区别? ---- 内核 什么是内核呢?...完成第一版 Linux 后,Linux Torvalds 就在网络上发布了 Linux 内核的源代码,每个人都可以免费下载和使用。...Monolithic Kernel Monolithic Kernel 的意思是宏内核Linux 内核架构就是宏内核,意味着 Linux内核是一个完整的可执行程序,且拥有最高的权限。...,内核中抽象出了微内核的概念,也就是内核中会有一个小型的内核,其他模块就在这个基础上搭建,整个内核是个完整的程序; Linux内核设计是采用了宏内核,Windows 的内核设计则是采用了混合内核

16.3K30

Linux内核开发_1_编译LInux内核

准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2....内核版本: linux-4.10.15 1.2 下载Linux内核源码 首先我们需要下载Linux-4.10.15内核,我们可以直接使用wget下载: wget https://cdn.kernel.org...Linux系统的内核函数。...,而gnu的软件体系在不断的升级进化,每次的升级,都会被用在正在开发中最新的Linux内核,而除了原始版的Linux内核不是在Linux上编译出来的以外,其余的Linux内核版本都是在Linux内核上开发而来的...不确定的因素很多,所以这里我给大家的建议是,如果你想编译Linux内核,最好选择一个与它使用的Linux内核版本相仿的Linux发行版来编译它 如我选择学习Linux内核,并且选择的Linux

19.3K20

linux 切换内核版本,切换 Linux 内核版本

Linux 内核是开源类 Unix 系统宏内核。仅仅一个内核并不是一套完整的操作系统。有一套基于 Linux 内核的完整操作系统叫作 Linux 操作系统。...Kernel 是 Linux 系统的核心,主要负责硬件的支持。 Linux 内核提供了安全补丁, bugfix 和新特性。 Linux 内核在 GNU 通用公共许可证第 2 版之下发布。...Linux 内核版本变更可能导致网络访问异常,声音异常,甚至是桌面环境无法启动。...Linux 内核版本号的意义 Linux 内核版本号由 3 组数字组成:第一个组数字。第二组数字。第三组数字 第一个组数字:目前发布的内核主版本。...查看内核版本 在 Linux 机器上执行如下命令查看当前正在使用的内核版本 uname -r 使用如下命令查看当前系统安装的内核版本 dpkg -l | grep linux-image 如果使用的是

23.4K20

Linux内核编程_linux内核开发工具

【转载】Linux内核编程与应用编程对比 转载链接1:http://www.arrowapex.cn/archives/66.html 在此之前也不清楚linux内核编程跟用户应用程序编程之间有什么不同...1.linux内核编程和用户应用程序编程最大的不同是,前者是在内核态下运行的,而后者主要在用户态下运行,有时通过一些系统调用切换到内核态下运行,但这时间不会太长。...2.内核编程引进的头文件都在内核源码的include文件夹下,比如我的debian linux 2.6环境下是:/usr/src/linux/include下,而用户应用程序编程引进的头文件都是从开发环境头文件的...3.要查询一个函数能否在内核编程中用,可以通过http://lxr-itec.uni-klu.ac.at/linux-2.6.4/ident查 (这是针对linux2.6内核,也有针对2.4内核的),如果能查到...对于在linux内核实现网关的某些功能时,我发现,虽然linux已经提供了很多现成的东西,可以保证快速开发。但是内核本身架构是一个通用计算机,不是专门针对网络处理的。

12.9K20
领券