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

linux内核发包工具,Linux内核发包工具pktgen测试方案说明「建议收藏」

简介 pktgen是Linux内核里包含的一个高性能发包工具,主要用来测试网络性能。一般情况下,使用pktgen就可以满足千兆网卡的测试需要。...pktgen运行在“内核态”,并不占用太多的系统资源,就可以达到非常高的发包速率。 pktgen只支持UDP发包(端口9)。...本测试在内核原有pktgen模块的基础上打了pktgen_rx补丁,增加了收包的统计功能。...安装 Linux内核自带pktgen模块,不带rx统计功能,需要rx功能的话需要下载补丁pktgen_rx.tgz,下载地 实验环境: 机器型号:DELL R720 CPU: : Intel(R) Xeon...(R) CPU E5-2680 v2 @ 2.80GHz (20核40线程) 内核版本2.6.37 从以上网址下载pktgen_rx.tgz并解压,进入pktgen目录 拷贝内核源码至/usr/src

8.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。...Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知道怎么回事将网络协议栈的实现塞进了内核态,从此它就一直在内核态了。...flowToken=1040236 比方说发包流程。数据包的发送可以出现在两个上下文中: 进程上下文:系统调用触发的发包。 中断上下文:ACK/SACK触发的发包。...Linux内核并没有在横向上将锁的粒度做划分,而是在纵向上,采用两个层次的锁机制: 我们看到的Linux内核在处理收包逻辑时的backlog,其实抽象出来就是上面的二级锁,它是不是很像Windows的...这两点其实也就是 “为什么内核协议栈性能干不过用户态协议栈” 的要点。当然,Linux内核协议栈无法摆脱这两点问题,也就回答了本文的题目中的第一个问题, “Linux内核UDP收包为什么效率低?”

    1.7K20

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

    现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。...Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知道怎么回事将网络协议栈的实现塞进了内核态,从此它就一直在内核态了。...比方说发包流程。数据包的发送可以出现在两个上下文中: 进程上下文:系统调用触发的发包。 中断上下文:ACK/SACK触发的发包。...这两点其实也就是 “为什么内核协议栈性能干不过用户态协议栈” 的要点。当然,Linux内核协议栈无法摆脱这两点问题,也就回答了本文的题目中的第一个问题, “Linux内核UDP收包为什么效率低?”...其实Linux内核社区早就意识到了这两点,早在3.11版本内核中引入的busy poll机制就是为了解决锁和切换问题的。

    3.2K61

    linux发包工具igmp_jar打包命令

    1.pktgen简介: pktgen是Linux内核里包含的一个高性能发包工具,主要用来测试网络性能。...一般情况下,使用pktgen就可以满足千兆网卡的测试需要,不必花钱购买昂贵的硬件发包设备。 pktgen运行在“内核态”,并不占用太多的系统资源,就可以达到非常高的发包速率。...sudo modprobe pktgen //加载内核模块后,我们可以通过命令modinfo pktgen看到pktgen已经在/proc文件系统里和内核线程中出现了。...www.cnblogs.com/kekukele/p/3709781.html https://wenku.baidu.com/view/0a90276d011ca300a6c390a2.html linux...1000>enp61s0f0 //表示复制多少数据包,clone_skb=1000,说明发送完第一个数据包后,接着还发送1000个这种克隆的包;clone_skb=0表示只发送master包,即重复发送这种相同的数据包

    1.9K30

    26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)

    3.网卡驱动初始化 而我们的网卡驱动程序,只需要编写网络设备接口层,填充net_device数据结构的内容并将net_device注册入内核,设置硬件相关操作,使能中断处理等 3.1其中net_device...在内核中,当上层要发送一个数据包时, 就会调用网络设备层里net_device数据结构的成员hard_start_xmit()将数据包发送出去。...hard_start_xmit()发包函数需要我们自己构建,该函数原型如下所示: int (*hard_start_xmit) (struct sk_buff *skb, struct net_device...函数后,其中sk_buff缓冲区变化: 6.写虚拟网卡驱动 本节便开始来写一个简单的虚拟网卡驱动,也就是说不需要硬件相关操作,所以就没有中断函数,我们通过linux的ping命令来实现发包,然后在发包函数中伪造一个收的... #include #include #include #include <linux

    10.6K101

    eBPF 技术实践:加速容器网络转发,耗时降低60%+

    lxc0 口是 veth 口,内核的实现是 veth 口发包,对端(peer)的 veth 口就会收包。在本例中,Pod-A/B 中的 ve0 口会收到报文。 至此,完成收包方向的主要流程。...至此,完成发包方向的主要流程。 上面的流程比较抽象,我们用 perf ftrace 可以非常直观地看到报文都经过了哪些内核协议栈路径。...发包路径 # perf ftrace -C0 -G '__netif_receive_skb_core' -g 'smp_*' 如图,发包路径主要经历 veth 收包、桥上送、路由查找、物理网卡转发等阶段...发包路径 如图,在发包路径的 TC 子系统中,由 bpf_redirect 函数设置转发信息( eth1 接口 index ),由 skb_do_redirect 函数直接调用了 eth1 接口的...作者简介 王栋栋,字节跳动系统技术与工程团队内核工程师,10 年系统工程师工作经验,关注 Linux networking、eBPF 等领域。

    1.2K20

    virtio+ovs转发原理和性能分析

    virtio和ovs介绍 传统数据中心中硬件服务器上运行linuxlinux用硬件网卡收发包,硬件网卡有broadcom的有mellanox的有intel的等各式各样的,硬件网卡连接到硬件交换机上,硬件交换机有...应用程序调用发包时,内核协议栈模块分配一块内存,把用户态要发的内容拷贝到内核。...guest发包流程 guest在内核中分配skb,把地址写到vring中,kick kvm,kvm再通知vhost。...vhost是内核线程,vhost地址换算拿到了skb,复制skb,通知guest发送完成,guest回收sbk,vhost继续给skb找netdev,加入到一个cpu的backlog,触发softirq...,假如硬件网卡一个队列对应一个虚拟机,那guest不提供skb,硬件网卡就丢包了,rx skb只能由硬件网卡驱动分配,分配时能不能从guest内存中分配,好像也不行,没法和guest同步,只能从内核或者

    3.4K21

    网络数据包的接收过程

    Linux 网络架构 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...Linux 网络初始化 网络设备子系统初始化 linux内核通过调用subsys_initcall来初始化各个子系统,其中网络子系统的初始化会执行到net_dev_init函数: //net/core/...可以看到 ethtool 这个命令之所以能查看网卡收发包统计、能修改网卡自适应模式、能调整RX 队列的数量和大小,是因为 ethtool 命令最终调用到了网卡驱动的相应方法。...() 进入内核协议栈。...); } 应用层处理 通过开头的应用程序,我们知道应用层的数据接收函数是 recvfrom,recvfrom 是一个glibc的库函数,该函数在执行后会将用户进行陷入到内核态,进入到Linux实现的系统调用

    33211

    网络数据包的接收过程

    Linux 网络架构 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...Linux 网络初始化 网络设备子系统初始化 linux内核通过调用subsys_initcall来初始化各个子系统,其中网络子系统的初始化会执行到net_dev_init函数: //net/core/...可以看到 ethtool 这个命令之所以能查看网卡收发包统计、能修改网卡自适应模式、能调整RX 队列的数量和大小,是因为 ethtool 命令最终调用到了网卡驱动的相应方法。...() 进入内核协议栈。...); } 应用层处理 通过开头的应用程序,我们知道应用层的数据接收函数是 recvfrom,recvfrom 是一个glibc的库函数,该函数在执行后会将用户进行陷入到内核态,进入到Linux实现的系统调用

    36311

    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.4K32

    Kubernetes 中的 eBPF

    转载自Linux内核之旅 BPF BPF (Berkeley Packet Filter) 最早是用在 tcpdump 里面的,比如 tcpdump tcp and dst port 80 这样的过滤规则会单独复制...使用 kprobe 需要通过编译 kernel module 注册到内核当中,非常麻烦,等于是直接动内核的代码很容易引起内核 panic,而且每个内核版本都不一样,函数符号和位移是有区别的,对每个版本的内核都要编译一个对应的版本的...eBPF 的 kprobe 一种方式时候 mapping,映射 kprobe 的数据到用户态程序,比如发包数,然后用户态程序定期检查这个映射进行统计。...在这里可以看到程序的主体,这里 hook 了内核函数 skb_copy_datagram_iter,这个函数有一个 tracepoint trace_skb_copy_datagram_iovec。...在内核代码里面对应的是下面这段。 /** * skb_copy_datagram_iter - Copy a datagram to an iovec iterator.

    1.3K20

    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.3K30

    Linux 网络子系统

    Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...在这个初始化过程中,把自己的DMA准备好,把NAPI的poll函数地址告诉内核 4.启动网卡,分配RX,TX队列,注册中断对应的处理函数 创建ksoftirqd内核线程 Linux的软中断都是在专门的内核线程...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...和我们平时写代码的方式不一样的是,内核是通过注册的方式来实现的。Linux内核中的fs_initcall和subsys_initcall类似,也是初始化模块的入口。...回忆前面网卡驱动初始化时,我们提到了驱动向内核注册了 structure net_device_ops 变量,它包含着网卡启用、发包、设置mac 地址等回调函数(函数指针)。

    3.5K21

    图解Linux网络包接收过程

    Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。...好了,大概了解了网卡驱动、硬中断、软中断和ksoftirqd线程之后,我们在这几个概念的基础上给出一个内核收包的路径示意: 图2 Linux内核网络收包总览 当网卡上收到数据以后,Linux中第一个工作的模块是网络驱动...二 Linux启动 Linux驱动,内核协议栈等等模块在具备接收网卡数据包之前,要做很多的准备工作才行。...回忆前面网卡驱动初始化时,我们提到了驱动向内核注册了 structure net_device_ops 变量,它包含着网卡启用、发包、设置mac 地址等回调函数(函数指针)。...这块相对比较简单,剩下大部分的戏份都是由Linux内核其它模块来表演了。 首先在开始收包之前,Linux要做许多的准备工作: 1.

    4.6K73

    不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux篇)

    对于Linux来说,它实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。...Linux 2.4以后的内核版本采用的下半部实现方式是软中断,由ksoftirqd内核线程全权处理。...Linux内核网络收包总览: 如上图所示:当网卡上收到数据以后,Linux中第一个工作的模块是网络驱动。网络驱动会以DMA的方式把网卡上收到的帧写到内存里。...回忆前面网卡驱动初始化时,我们提到了驱动向内核注册了 structure net_device_ops 变量,它包含着网卡启用、发包、设置mac 地址等回调函数(函数指针)。...这块相对比较简单,剩下大部分的戏份都是由Linux内核其它模块来表演了。

    2.1K31

    OVS BUG撸码回忆录 •上篇

    3.10 回忆录之收包流程 网卡种类较多,当时取了e1000这种比较通用的网卡为例。下述以精简代码的形式展示核心流程。...linux内核为了高性能,很喜欢用rwlock的改进版rcu,这种思想是值得借鉴的。         ...switch (rx_handler(&skb)) // 交给rx_handler处理,例如ovs, linux bridge等 此类接口处理报文在协议栈之前,因此netfilter对此类接口不起作用,...所以在云环境(openstack)中,需要在虚拟机tap口与虚拟交换机之间增加Linux bridge设备来使报文经过协议栈(netfilter起作用)来实现security group。...下篇预告: 回忆OVS内部内核态与用户态的流程及发包处理流程。 猜你还想看这些内容 ● 分分钟get腾讯云TStack技术汇总!

    1.3K70
    领券