pktgen使用说明

内核路径 net/core/pktgen.c
作者对于pktgen的介绍: 原作者编写的pdf介绍

pktgen.c 原理介绍

pktgen运用了proc 文件系统特征来实现用户和内核的交互,用户通过向proc中传输数据,内核接收到数据后进行解析按照预定义的操作执行,添加端口,填充报文,通过内核发包接口dev_queue_xmit/netdev_start_xmit 发送给网卡,省去了从用户态发包的大部分流程( 发包流程介绍,引用 )。

代码分析:加载pktgen.ko内核模块,module_init(pg_init); 会发现多了跟cpu core数相等的kpktgend_%d 内核线程,

static struct pernet_operations pg_net_ops = {.init = pg_net_init,.exit = pg_net_exit,.id   = &pg_net_id,.size = sizeof(struct pktgen_net),
};

然后配置时候主要涉及三个文件节点的操作 ,对相应节点文件做读写操作的时候触发对应的proc ops

kpktgend_%d

安装了内核模块以后,在/proc/net/pktgen/目录下面会创建对应的文件,对应的操作定义为

static const struct proc_ops pktgen_thread_proc_ops = {.proc_open   = pktgen_thread_open,.proc_read    = seq_read,.proc_lseek = seq_lseek,.proc_write    = pktgen_thread_write,.proc_release    = single_release,
};

pktgen_thread_write 在多add device的操作的时候会在/proc/net/pktgen/ 下添加对应的网卡名称命名的文件例如:/proc/net/pktgen/eth0

网口节点

static const struct proc_ops pktgen_if_proc_ops = {.proc_open   = pktgen_if_open,.proc_read    = seq_read,.proc_lseek = seq_lseek,.proc_write    = pktgen_if_write,.proc_release    = single_release,
};
通过pktgen_if_write 来实现对报文内容和发包逻辑的配置

pgctrl

static const struct proc_ops pktgen_proc_ops = {.proc_open  = pgctrl_open,.proc_read   = seq_read,.proc_lseek = seq_lseek,.proc_write    = pgctrl_write,.proc_release   = single_release,
};

通过对pgctrl的控制来实现线程发包的开始,停止,重启。

使用场景

  1. 没有测试仪器的情况下对网卡,路由器,交换机等网络设备的带宽进行测试,根据包长不同会有不同表现,1500 包长达到10G测试下来没问题
  2. 特殊场景,绕过协议栈等上层的处理进行发包的需求

linux内核发包工具pktgen相关推荐

  1. linux内核发包工具,Linux内核发包工具pktgen测试方案说明

    简介 pktgen是Linux内核里包含的一个高性能发包工具,主要用来测试网络性能.一般情况下,使用pktgen就可以满足千兆网卡的测试需要. pktgen运行在"内核态",并不占 ...

  2. Linux内核发包软件,请教一Linux內核自帶的網絡发包工具: pktgen 的問題

    主題: 使用Linux內核自帶的網絡发包工具:pktgen 时,發現以下問題: SuSE9:/bin # ./ipg FATAL: Module pg3 not found. ./ipg: line  ...

  3. Linux内核TC工具链路带宽设计--无类队列规定

    Linux 内核的 TC(traffic control)工具可以用来对网络带宽做一定的设计和管理,这里将对这一工具的使用做一定的介绍,在正式开始介绍TC 之前,先对一些基本的单位做一个说明.为了避免 ...

  4. linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等

    << System语言详解 >> 关于 SystemTap 的书. 我们在分析各种系统异常和故障的时候,通常会用到 pstack(jstack) /pldd/ lsof/ tc ...

  5. Linux内核性能测试工具全景图

    1.Linux性能监控工具及对应的内核层 2.Linux性能基础测试工具及对应内核层 3.Linux性能监控工具Sar及对应内核层 4.Linux性能调优工具及对应的内核层

  6. Linux 内核阅读工具vim+ctags+cscope+taglist

    今天,来介绍一下vim+ctags+cscope+taglist的内核阅读配置.当使用过之后,我相信大部分人都会舍弃之前的Eclipse(我就是活生生的一个例子).我们先来看看实现的界面是怎么样的: ...

  7. Linux内核TC工具链路带宽设计--CBQ队列规定

    1.1 著名的 CBQ 队列规定 除了可以分类之外,CBQ 也是一个整形器.如果想把一个 10Mbps 的连接整形成 1Mbps 的速率,就应该让链路 90%的时间处于闲置状态,必要的话就强制,以保证 ...

  8. Linux内核TC工具链路带宽设计--HTB队列规定及简单的过滤器介绍

    1 HTB(Hierarchical Token Bucket, 分层的令牌桶) HTB 使用令牌和存储桶的概念,以及基于类的系统和过滤器,以允许对流量进行复杂和精细的控制.借助复杂的借用模型,HTB ...

  9. iso linux 内核版本号_Linux内核全面介绍

    Linux内核(kernel)和linux操作系统区别 Linux内核指的是一个提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件.一个内核不是一套完整的操作系统.通常我们所说的linux操作 ...

最新文章

  1. c++ ofstream使用方法
  2. mysql二进制包下的support-files文件夹
  3. 三方会谈进行时,Uber旧金山无人车已被叫停
  4. 民生银行IT运维架构管理可视化实践
  5. [转载]Unix 高手的另外 10 个习惯
  6. 使用Asp.net Core3Blazor 的全栈式网站开发体验
  7. jsp中使用cookie时报错……
  8. 【渝粤题库】广东开放大学 外贸会计 形成性考核
  9. Android优美代码赏析:Snake游戏分析
  10. 配流06—frank_wolfe配流算法
  11. macOS Safari使用EasyConnect插件的坑
  12. 【UCOSii源码解析】事件控制块
  13. HD1096 between “ 之间” 的含义
  14. vue-cli中配置gzip压缩
  15. 【转载】uTorrent缓存设置,防止出现磁盘负荷100%
  16. API Gateway/API 网关(三) - Kong的使用 - 限流rate limiting(redis)
  17. mysql 查询近三个月数据
  18. 微信公众号云服务器年服务费_微信公众号开发者接口费用高吗
  19. 网易云短信接口调入(java)
  20. 互斥锁的应用与pthread_mutex_destory的出错

热门文章

  1. 矢量图和位图的理解,它们分别有什么运用场景?
  2. 重复读取inputStream
  3. sscanf的具体用法
  4. 黑盒测试(一)-----边界值测试
  5. mbp安装mysql
  6. Linux下性能监控的三把军刀
  7. 如何确定 Winsock2 是否损坏并从损坏中恢复
  8. html页面怎么删除cookie,javascript怎么清除cookie?
  9. 一分钟了解nohup和的功效
  10. ESET NOD32官方活动送一年激活码(9月4号更新)