计算机系统性能分析【小白初写,持续学习持续更新】

什么是性能

  1. Latency (延迟) - 关于时间 (Time)
  2. Bandwidth (带宽) - 关于速率 (Rate)

 

为什么性能重要?

  1. 针对有时间期限的任务 (Time deadline)
  2. 当计算资源和效率有限时 (Cost of computing resources)
  3. 针对能源有限的设备 (Energy cost)

计算机系统性能的表现:

  - 复杂的组件间的相互作用。

  - 对大规模数据的处理和预测。

性能评价

  通过更低的消耗获得更高的性能。

怎么去评价性能

  1. 实际系统的测量
  2. 建模:(a) 通过软件模型模拟 (simulation)             (b) 利用技术(techniques)进行分析建模

分析建模:

  - 通过数学来表示系统。

  - 模型的假设在实践中可能难以完全实现,因此精度可能较低。

  - 模型参数易于更改。

  - 提供关键见解,有助于验证模拟或实际测量的结果。

模拟:

  - 是为模拟系统的关键特性而编写的程序。

  - 可以轻松修改以研究参数变化的影响。

  - 主要成本在于编写和运行模拟程序。

  - 有时难以模拟系统的每一个细节,因此精度可能较低。

测量:

  - 无需简化或假设。

  - 为最可信的评价方法。

  - 只在具体的系统或应用程序存在时有效。

  - 结果只反映特定系统的信息。

  - 实际系统参数难以更改。

  - 测量活动可能会影响系统的正常运行。

  - 这是一个既困难又耗时的过程,并需要特定的软件工具。

评价应用

  - 系统升级和设计:应用程序和设备的设计

  - 分析现有系统:

          1. 评估现有系统的性能状况和潜在瓶颈。

          2. 容量规划:预测系统何时可能因未来的负载而饱和,并寻找经济有效的方法来推迟这一点。

例子

  系统在负载增加时的性能:

    - 在膝点之前,系统的可扩展性呈线性。

   - 当组件利用率达到100%时,达到饱和点 (saturation point)。

    - 排队现象变得更加频繁。

系统性能:

  • 研究整个系统堆栈的性能。

  • 完全堆栈(full stack) -> 从应用程序到硬件的整个软件堆栈,包括系统库、内核、编译器。

  • 应遵循软件项目的生命周期,从概念设计到开发再到生产部署。

  • 在产品开发的第一步设定目标并创建性能模型。在出现问题后,不要将性能工程工作推迟。

  • 容量规划:研究开发软件的资源占用,以查看设计如何满足目标需求。

  • 云应用性能、金丝雀测试、蓝绿部署。

视角:

  • 资源分析视角 -> 系统管理员。
  • 工作量分析视角 -> 应用程序开发人员。

挑战:

  • 主观性:磁盘输入输出的平均响应时间为1ms,这是好的还是坏的?
  • 复杂性:缺乏明显的分析起点、级联故障、瓶颈。
  • 多重原因:问题并没有单一的根本原因。
  • 量化问题的严重程度。

指标(Metrics):

  • 量化系统性能需要指标。
  • 延迟:等待时间的度量。
    1. 它指任何操作完成所需的时间。
    2. 例:网站加载时间,从点击链接到屏幕绘制所需的时间。
    3. 可估算最大速度。
    4. 模糊术语:如网络中的连接延迟、请求延迟。

延迟例子:

数据库查询需要100ms,其中80ms用于磁盘读取。通过消除磁盘读取,延迟降至20ms。

可观察性:

  • 使用具有观察性的工具了解系统,如:计数器(Counters)、剖析(profiling)、路径(Tracing)。
  • 生产环境中的工具可能因为资源争用扰乱工作负载。

计数器(Counters)、统计(Statistics)、指标(Metrics)与警报(Alerts):

  • 应用和内核提供状态和活动数据:如操作计数、延迟测量、资源利用率。
  • 性能工具读取计数器以计算统计:如比率、平均值、百分位数。
  • 监控软件支持创建基于这些指标的自定义警报。

剖析(Profiling):

  • 使用抽样工具:如定时采集CPU上的代码路径样本。
  • 可视化性能数据非常重要,如CPU flame graphs。

路径(Tracing):

  • 基于事件记录:如捕获并保存数据或实时消费。
  • 专用追踪工具:如Linux的strace或tcpdump。
  • 通用追踪工具:如Linux的Ftrace, BCC, bpftrace。
  • 插桩:静态插桩是硬编码的,而动态插桩则在软件运行时创建。

性能评估研究的步骤:

  1. 界定研究目标和系统边界。
  2. 列出系统服务和可能的结果。
  3. 选择性能指标。
  4. 列出系统和工作负载参数。
  5. 选择因素及其值。
  6. 选择评估技术。
  7. 选择工作量。
  8. 设计实验。
  9. 分析和解释数据。
  10. 展示结果并根据反馈进行调整。

Reference

[Jain] “The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling” by Raj Jain, 1991.
[Gregg] “Systems Performance: Enterprise and the Cloud” by Brendan Gregg 2nd Edition, 2020.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
计算机基础是计算机科学的核心知识,对于计算机基础小白来说,以下是一些建议和学习方法: 1. 了解计算机的基本组成部分:学习计算机的硬件和软件组成,包括中央处理器(CPU)、内存、硬盘、操作系统等。 2. 学习计算机的工作原理:了解计算机是如何执行指令、存储数据和进行运算的。学习汇编语言可以更好地理解计算机的底层运行机制。 3. 学习编程语言:选择一门编程语言作为入门,例如Python、Java或C++。通过编程实践来加深对计算机基础知识的理解。 4. 学习数据结构和算法:数据结构和算法是计算机科学的基础,掌握它们可以提高编程能力和解决问题的能力。 5. 阅读相关书籍和教程:有很多经典的计算机基础教材和在线教程可供学习,例如《计算机组成与设计》、《算法导论》等。 6. 参加在线课程或培训班:有很多在线平台提供计算机基础的课程,例如Coursera、edX等。参加这些课程可以系统地学习计算机基础知识。 7. 实践项目:通过实践项目来应用所学的知识,例如编写一个简单的程序或解决一个实际问题。实践可以帮助巩固所学的知识并提高技能。 8. 参与计算机科学社区:加入计算机科学的社区,与其他人交流和分享经验。参与讨论和解答问题可以加深对计算机基础知识的理解。 9. 持续学习和实践:计算机基础知识是庞大而不断发展的领域,要保持学习的动力和实践的机会,跟上技术的发展和变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值