• 系统性能分析


    性能

    UNIX系统的程序运行时间

    用户CPU时间:运行代码需要的时间
    系统CPU时间:为运行用户代码而运行其他代码所用的时间
    运行时间:墙钟时间(几点几分几秒)
    运行时间=用户CPU时间+系统CPU时间+其他时间

    最佳选择:在没有其他负载的系统上多次测量实际完成工作负载的墙钟时间。

    (延迟=结束时间-开始时间)
    (吞吐=给定时间内完成的任务量)
    但是:
    (吞吐!=1/延迟)(如果存在并行)

    优化性能时,必须要考虑其他的指标。可以考虑使用复合指标,防止在优化指标的时候忽略另一些指标。

    伪性能指标

    IPC(每周期执行指令数)
    MIPS(每秒百万条指令数)
    GHz(每秒周期数)

    IPC和MIPS是平均指标,可以通过特定的指令组合得到更好的数值;这些指标可以在牺牲彼此和实际性能的情况下得到改进,所以不具有实际意义。

    墙钟时间=时间/周期数周期数/指令数指令数/程序

    相对性能

    减少“X比Y慢50%”这种说法,因为会导致歧义。

    如果(time_x=1.0s),那么(time_y=0.5s(time_y/time_x=0.5)),或者(time_y=0.6666s(time_x/time_y=1.5))

    所以为了避免歧义,我们使用以下的两种描述方式:

    1. “X比Y快n倍”:

      • (n=吞吐X/吞吐Y)
    2. “X比Y快m%”:

      • (1+m/100=吞吐X/吞吐Y)

    加速比

    (speedup=t_{改进前}/t_{改进后})

    Amdahl定律

    并行化程序的铁律。

    假设一段代码中有(f%)的部分可以并行化,那么并行化后的时间为:

    [time_{new} = time_{old}*((1-f)+f/n) ]

    [speedup = time_{old}/time_{new}=1/((1-f)+f/n) ]

    这里(n)表示可用的处理器个数,我们发现,并行程序加速比受限于任务中的串行部分(不可并行化的部分)。

    benchmark

    标准基准程序,例如SPEC等。

    小结

    性能是一个十分综合的量度,所以并没有一刀切的方法。

    这就要求我们在衡量性能的时候,一定要想好想测量什么,明确知道自己测了什么,确保报告的内容准确且有代表性,准备好原始数据可复现。

  • 相关阅读:
    python3 使用 lxml 库解析 HTML
    套接字
    使用 socket_server 创建一个简单的服务器和客户端
    创建一个超级简单的UDP服务器 / 客户端
    创建一个超级简单TCP交互的服务器/客户端
    python3 stock send() 函数报错: TypeError: a bytes-like object is required, not 'str'
    python3 stock recv OSError: [WinError 10038] 在一个非套接字上尝试了一个操作
    python 之闭包
    任导航(认道行rendaohang)上线啦!~
    Pr Pro CC 2019 添加的时间码不同步/不一样/比实际时间短或长问题排查
  • 原文地址:https://www.cnblogs.com/LuoboLiam/p/13425706.html
Copyright © 2020-2023  润新知