分析 Linux 网络协议栈性能有多种方式和工具。本文主要通过 Perf 生成 On-CPU 火焰图的方式,分析 Linux 内核网络协议栈在特定场景下的性能瓶颈,从而知晓当前协议栈的网络状况。

文章相关视频详解:

深入浅出Linux内核网络协议栈

Linux内核内存管理专题训练营-学习视频

关于 On/Off-CPU

概念定义

1

2

3

On-CPU: where threads are spending time running on-CPU.

Off-CPU: where time is spent waiting while blocked on I/O, locks, timers, paging/swapping, etc.

On/Off-CPU 选择

在工程实践中,如果是 CPU 消耗型使用 On-CPU 火焰图,如果是 IO 消耗型则使用 Off-CPU 火焰图。如果无法确定, 可以通过压测工具来确认: 通过压测工具看能否让 CPU 使用率趋于饱和,从而判断是否为 CPU 消耗型。

分析方法

Perf 火焰图整个图形看起来就像一团跳动的火焰,这也正是其名字的由来。燃烧在火苗尖部的就是 CPU 正在执行的操作,不过需要说明的是颜色是随机的,本身并没有特殊的含义,纵向表示调用栈的深度,横向表示消耗的时间。因为调用栈在横向会按照字母排序,并且同样的调用栈会做合并,所以一个格子的宽度越大越说明其可能是瓶颈。综上所述,主要就是看那些比较宽大的火苗,特别留意那些类似平顶山的火苗。

火焰图原理

火焰图是基于 stack 信息生成图片, 用来展示 CPU 调用栈。

  • y 轴表示调用栈, 每一层都是一个函数。调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数。
  • x 轴表示抽样数, 如果一个函数在x轴占据越宽, 则表示它被抽到的次数多, 即执行的时间长。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有“平顶”(plateaus),就表示该函数可能存在性能问题。

On-CPU 采集原理

1

2

While this can be very effective for studying on-CPU issues, including hot code-paths and adaptive mutex spins, it doesn't gather data when the application has blocked and is waiting off-CPU.

Linux 内核网络协议栈分析

server

yum install iperf
yum install perf
git clone https://github.com/brendangregg/FlameGraph.git

运行 iperf server

[root@bogon ~]# iperf -s -u -D
Running Iperf Server as a daemon
[root@bogon ~]#

查看 CPU 以及 softirqd 进程号

[root@bogon ~]# lscpu
Architecture:          aarch64
Byte Order:            Little Endian
CPU(s):                64
On-line CPU(s) list:   0-63
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             16
NUMA node(s):          4
Model:                 2
BogoMIPS:              100.00
NUMA node0 CPU(s):     0-15
NUMA node1 CPU(s):     16-31
NUMA node2 CPU(s):     32-47
NUMA node3 CPU(s):     48-63
Flags:                 fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid

查看网卡中断亲和性

VM001: 通过如下方式采集信息(采集原理见上)

perf record -F 1000 -a -g -p 162 -- sleep 60

发送 UDP 数据报文

iperf  -c 10.254.2.161 -i 1 -P 10 -t 10 -u -b 1000M

生成 On-CPU 火焰图

1

perf script -i /root/perf.data | ./stackcollapse-perf.pl | ./flamegraph.pl > output.svg

Linux内核相关学习视频,清晰版导图可以点击:学习资料 获取

这份是整理的学习路线思维导图,下面有Linux内核相关视频学习资料:

perf-网络协议栈性能分析相关推荐

  1. Linux命令进阶-cpu监控内存监控文件IO网络IO性能分析

    Linux命令进阶-cpu监控内存监控文件IO网络IO性能分析 前言 1 linux基础命令 1.1 grep 1.2 ls 1.3 find 1.4 ulimit 1.5 curl 1.6 scp ...

  2. perf+火焰图 = 性能分析利器

    perf 1. perf安装 sudo apt install linux-tools-common 检查是否安装好 perf 如果出现 You may need to install the fol ...

  3. linux内核网络协议栈--架构分析(十八)

    1.初始化流程 2.分层数据结构 3.socket创建流程 4.收发流程 5.内核收包流程细化(中断收包) 6.应用层收包流程 7.UDP发包流程 原文链接:https://blog.csdn.net ...

  4. 2022最火的Linux性能分析工具--perf

    ►►► 介绍 perf是Linux性能分析中,比较常用的一款工具.它基于时间采集原理,以性能事件为基础,支持针对CPU处理器相关性能指标与操作系统相关性能指标的性能分析.常被用来查找.定位源码级性能问 ...

  5. 不错的网络协议栈測试工具 — Packetdrill

    Packetdrill - A network stack testing tool developed by Google. 项目:https://code.google.com/p/packetd ...

  6. mysql火焰图_【性能】如何使用perf和火焰图分析系统性能?

    一.实验环境 二.实验案例分析 安装完成后,我们先在第一个终端,执行下面的命令运行案例,也就是一个最基本的 Nginx 应用: 运行 Nginx 服务并对外开放 80 端口 # docker run ...

  7. 【转】一文掌握 Linux 性能分析之网络篇(续)

    [转]一文掌握 Linux 性能分析之网络篇(续) 在上篇网络篇中,我们已经介绍了几个 Linux 网络方向的性能分析工具,本文再补充几个.总结下来,余下的工具包括但不限于以下几个: sar:统计信息 ...

  8. 性能之巅:Linux网络性能分析工具-netstat,ifconfig,nicstat,traceroute,tcpdump

    原文地址:http://www.infoq.com/cn/articles/linux-networking-performance-analytics 本文介绍基于Linux操作系统的网络性能分析工 ...

  9. Linux网络协议栈:网卡收包分析

    Table of Contents 网卡收包 一,框架 二,初始化 三,驱动收包 四,内核处理 参考文章 推荐阅读 网卡收包 内核网络模块如何初始化? 内核如何通过网卡驱动收发数据包? 驱动收到的数据 ...

最新文章

  1. 线性回归之正则化线性模型
  2. DWR之父作序推荐,国内第一部DWR著作
  3. 可由一个尾指针唯一确定的链表有_极客算法训练笔记(三),链表详细图解,别再逃避了朋友...
  4. 利用jquery.form.js实现Ajax无刷新图片上传及预览功能
  5. ipad怎么连接电脑_蓝牙的使用,蓝牙耳机怎么连接手机,怎么连接电脑
  6. ubuntu nginx安装
  7. asp.net MVC 权限设计(续)
  8. Spring 自动装配 ‘byType’
  9. 清除SVOHOST.EXE的方法
  10. leetcode951. Flip Equivalent Binary Trees
  11. [Python]小甲鱼Python视频第020课(函数:内嵌函数和闭包)课后题及参考解答
  12. session timer(一)
  13. 话题热议:有没有能替代Excel的数据处理软件?
  14. 戴尔dell电脑恢复出厂设置教程(BIOS恢复出厂设置,新版台式机)
  15. 一篇读懂深度学习中「训练」和「推断」的区别
  16. 一学期c语言的学习总结
  17. OpenStack历史知识
  18. android4.2 拦截power键,Android 屏蔽Power键 Home键
  19. 群聊头像 - 取前五个用户头像生成一个新的头像
  20. Vue绑定<audio>/<video>标记的muted属性无效问题随记

热门文章

  1. 算法设计与分析--汽车牌照的快速查…
  2. Jenkins联合gitlab拉取代码
  3. 如何使用Niagara与web前端进行通信
  4. h5底部输入框被键盘遮挡_移动端虚拟键盘引发的问题分析
  5. STM32使用DHT11传感器读取温湿度,显示在LCD屏上
  6. 多线程python 客户端fuwuq实现方式_纯python实现的视频监控客户端软件(终稿)
  7. java map 内存分配_Android O Bitmap 内存分配
  8. 更大权限,以管理员身份运行msi安装包
  9. python一切皆对象对吗_Python 一切皆对象的本质
  10. Eclipse代码自动补全功能