zoukankan      html  css  js  c++  java
  • perf-网络协议栈性能分析

    概要

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

    关于 On/Off-CPU

    概念定义

    On/Off-CPU 选择

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

    分析方法

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

    火焰图原理

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

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

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

    On-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 火焰图

  • 相关阅读:
    IO模式和IO多路复用详解
    消息队列RabbitMQ、缓存数据库Redis
    rest framework认证组件和django自带csrf组件区别详解
    django进阶之缓存
    关于CSRF攻击详解
    Linux学习常用命令大全
    .NET 开源工作流: Slickflow流程引擎基础介绍(四) -- 多数据库支持实现
    .NET 开源工作流: Slickflow流程引擎基础介绍(三) -- 基于HTML5/Bootstrap的Web流程设计器
    .NET 开源工作流: Slickflow流程引擎基础介绍(二) -- 引擎组件和业务系统的集成
    .NET开源敏捷开发框架: SlickOne介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架
  • 原文地址:https://www.cnblogs.com/dream397/p/14790589.html
Copyright © 2011-2022 走看看