FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 中文期刊
  • 编辑日志
  • 2025-123 下游项目
    • FreeBSD 发布工程:新主管上任
    • GhostBSD:从易用到挣扎与重生
    • BSD Now 与将来
    • 字符设备驱动教程(第三部分)
    • 学会走路——连接 GPIO 系统
    • FreeBSD 中对 SYN 段的处理
    • FreeBSD 2024 年秋季峰会
  • 2024-1112 虚拟化
    • 字符设备驱动程序教程(第二部分)
    • 面向 Linux 和 Windows 用户的 bhyve
    • Xen 与 FreeBSD
    • Wifibox:一种嵌入式虚拟化无线路由器
    • 嵌入式 FreeBSD:Fabric——起步阶段
    • DGP:一种新的数据包控制方法
    • 会议报告:我在都柏林的 EuroBSDCon 体验
  • 2024-0910 内核开发
    • 字符设备驱动程序教程
    • VPP 移植到了 FreeBSD:基础用法
    • 利用 Kyua 的 Jail 功能提升 FreeBSD 测试套件的并行效率
    • FreeBSD 上的 Valgrind
    • 嵌入式 FreeBSD:探索 bhyve
    • TCP/IP 历险记:FreeBSD TCP 协议栈中的 Pacing
    • 实用软件:实现无纸化(Paperless)
  • 2024-0708 存储与文件系统
    • FreeBSD 中的 NVMe-oF
    • FreeBSD iSCSI 入门
    • 使用 ZFS 原生加密保护数据
    • 嵌入式 FreeBSD:打造自己的镜像
    • TCP LRO 简介
    • 基于 Samba 的时间机器备份
  • 2024-0506 配置管理对决
    • 基本系统中的 mfsBSD
    • rdist
    • Hashicorp Vault
    • 在 GitHub 上向 FreeBSD 提交 PR
    • 悼念 Mike Karels
    • 2024 年 5-6 月来信
    • 嵌入式 FreeBSD 面包板
    • TCP/IP 历险记:TCP BBLog
    • 实用软件:开发定制 Ansible 模块
  • 2024-0304 开发工作流与集成
    • FreeBSD 内核开发工作流程
    • FreeBSD 与 KDE 持续集成(CI)
    • 更现代的内核调试工具
    • 从零开始的 ZFS 镜像及 makefs -t zfs
    • 提升 Git 使用体验
  • 2024-0102 网络(十周年)
    • FreeBSD 中的 RACK 栈和替代 TCP 栈
    • FreeBSD 14 中有关 TCP 的更新
    • if_ovpn 还是 OpenVPN
    • SR-IOV 已成为 FreeBSD 的重要功能
    • FreeBSD 接口 API(IfAPI)
    • BATMAN:更优的可移动热点网络方式
    • 配置自己的 VPN——基于 FreeBSD、Wireguard、IPv6 和广告拦截
    • 实用软件:使用 Zabbix 监控主机
  • 2023-1112 FreeBSD 14.0
    • LinuxBoot:从 Linux 启动 FreeBSD
    • FreeBSD 容器镜像
    • 现在用 Webhook 触发我
    • 新的 Ports 提交者:oel Bodenmann (jbo@freebsd.org)
  • 2023-0910 Port 与软件包
    • 回忆录:与 Warner Losh(@imp)的访谈
    • 在你自己的仓库中定制 Poudriere 源
    • Wazuh 和 MITRE Caldera 在 FreeBSD Jail 中的使用
    • PEP 517
    • CCCamp 2023 旅行报告
  • 2023-0708 容器与云
    • 在 Firecracker 上的 FreeBSD
    • 使用 pot 和 nomad 管理 Jail
    • 会议报告:C 与 BSD 正如拉丁语与我们——一位神学家的旅程
    • 抒怀之旅:与 Doug Rabson 的访谈
    • 基于 Jail 的广告拦截教程
    • 我们收到的来信
  • 2023-0506 FreeBSD 三十周年纪念特刊
    • CheriBSD 近十多年的历程
    • AArch64:成为 FreeBSD 新的一级架构
    • 岁月如梭:我个人的时间线
    • 安装 FreeBSD 1.0:回顾 30 年前
    • ZFS 是如何进入 FreeBSD 的呢?
    • 我不是来自约克郡的,我保证!
    • 回忆录:采访 David Greenman Lawrence
    • FreeBSD 和早期的 Unix 社区
    • 早期的 FreeBSD 移植
    • FreeBSD 30 周年:成功的秘诀
    • FreeBSD 在日本:回忆之旅与今日之实
  • 2023-0304 嵌入式
    • CheriBSD port 和软件包
    • 让我们来试试 ChatGPT
    • GPU 直通
  • 2023-0102 构建 FreEBSD Web 服务器
    • ZFS 的原子 I/O 与 PostgreSQL
    • 虚拟实验室——BSD 编程研讨会
    • ZFS 简介
    • 会议报告:落基山庆祝女性计算机科学家
    • 进行中的工作/征求反馈:数据包批处理
    • 基金会与 FreeBSD 桌面
  • 2022-1112 可观测性和衡量标准
    • 在 FreeBSD 的 DDB 内核调试器中编写自定义命令
    • DTrace:老式跟踪系统的新扩展
    • 基于证书的 Icinga 监控
    • 活动监控脚本(activitymonitor.sh)
    • 实用 IPv6(第四部分)
    • EuroBSDCon 会议报道
    • 实用 Port:Prometheus 的安装与配置
    • 书评:《用火解决问题:管理老化的计算机系统(并为现代系统保驾护航)》Kill It with Fire: Manage Aging Computer Systems (and Future Proof Modern Ones)
  • 2022-0910 安全性
    • CARP 简介
    • 重构内核加密服务框架
    • PAM 小窍门
    • SSH 小窍门
    • 实用 IPv6(第三部分)
    • 书评:Understanding Software Dynamics(深入理解软件性能——一种动态视角)—— Richard L. Sites 著
    • 访谈:保障 FreeBSD 安全性
    • MCH 2022 会议报告
  • 2022-0708 科研、系统与 FreeBSD
    • 在 FreeBSD 上构建 Loom 框架
    • 教授本科生 Unix 课程
    • FreeBSD 入门研讨会
    • 实用 IPv6(第二部分)
    • 在 2022 年及以后推广 FreeBSD
    • 进行中的工作/征求反馈:Socket 缓冲区
    • FreeBSD 开发者峰会报告
    • 支持 Electromagnetic Field 2022
  • 2022-0506 灾难恢复
    • 使用 FreeBSD 构建高弹性的私有云
    • LLDB 14 —— FreeBSD 新调试器
    • 实用 IPv6(第一部分)
    • 利用 netdump(4) 进行事后内核调试
    • 进行中的工作/征求反馈:FreeBSD 启动性能
    • 实用 Port:在 OpenZFS 上设置 NFSv4 文件服务器
  • 2022-0304 ARM64 是一级架构
    • FreeBSD/ARM64 上的数据科学
    • Pinebook Pro 上的 FreeBSD
    • 嵌入式控制器的 ACPI 支持
    • 进行中的工作/征求反馈:Lumina 桌面征集开发人员
    • 实用 Port:如何设置 Apple 时间机器
  • 2022-0102 软件与系统管理
    • 为 FreeBSD Ports 做贡献
    • 使用 Git 贡献到 FreeBSD Ports
    • CBSD:第一部分——生产环境
    • 将 OpenBSD 的 pf syncookie 代码移植到 FreeBSD 的 pf
    • 进行中的工作/征求反馈:mkjail
    • 《编程智慧:编程鬼才的经验和思考》(The Kollected Kode Vicious)书评
    • 会议报告:EuroBSDCon 2021 我的第一次 EuroBSDCon:一位新组织者的视角
  • 2021-1112 存储
    • 开放通道 SSD
    • 构建 FreeBSD 社区
    • 与完美操作系统同行 27 年
    • 进行中的工作/征求反馈:OccamBSD
    • 通过 iSCSI 导入 ZFS ZIL——不要在工作中这样做——就像我做的那样
  • 2021-0910 FreeBSD 开发
    • FreeBSD 代码审查与 git-arc
    • 如何为 FreeBSD 实现简单的 USB 驱动程序
    • 内核开发技巧
    • 程序员编程杂谈
  • 2021-0708 桌面/无线网
    • 通往 FreeBSD 桌面的直线路径
    • FreeBSD 13 中的人机接口设备 (HID) 支持
    • Panfrost 驱动程序
    • 用 Git 更新 FreeBSD
    • FreeBSD 的新面孔
    • 想给你的桌面加点佐料?
  • 2021-0506 安全
    • 七种提升新安装 FreeBSD 安全性的方法
    • copyinout 框架
    • 使用 TLS 改善 NFS 安全性
    • Capsicum 案例研究:Got
    • 对 Jail 进行安全扫描
  • 2021-0304 FreeBSD 13.0
    • 展望未来
    • FreeBSD 13.0 工具链
    • FreeBSD 13.0 中有新加载器吗?
    • TCP Cubic 准备起飞
    • OpenZFS 中的 Zstandard 压缩
    • 会议报告:FreeBSD 供应商峰会
    • Git 不够吗?
  • 2021-0102 案例研究
    • Tarsnap 的 FreeBSD 集群
    • BALLY WULFF
    • Netflix Open Connect
    • FreeBSD 的新面孔
    • 写作学者的 FreeBSD
    • 在世界之巅
  • 2020-1112 工作流/持续集成(CI)
    • FreeBSD Git 快速入门
    • 使用 syzkaller 进行内核 Fuzzing
    • Mastering Vim Quickly 书评
    • 线上会议实用技巧
    • 在控制台上进行网络监控
  • 2020-0910 贡献与入门
    • 采访:Warner Losh,第 2 部分
    • 代码审查
    • 撰写良好的提交消息
    • 如何在不是程序员的情况下做出贡献——成为 FreeBSD 译者
    • 如何成为文档提交者
    • 谷歌编程之夏
    • 为 FreeBSD 期刊撰写文章
    • 你为什么使用 FreeBSD
    • FreeBSD 的新面孔
  • 2020-0708 基准测试/调优
    • FreeBSD Friday
    • 采访:Warner Losh,第 1 部分
    • 构建和运行开源社区
    • 在 FreeBSD 上轻松搭建我的世界(Minecraft)服务器
    • FreeBSD 的新面孔
  • 2020-0506 网络性能
    • 内核中的 TLS 卸载
    • 访谈:Michael W Lucas
    • FreeBSD 桌面发行版
    • 使用 Poudriere 进行 Port 批量管理
    • FreeBSD 的新面孔
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
在GitHub上编辑
导出为 PDF
  1. 2022-0910 安全性

书评:Understanding Software Dynamics(深入理解软件性能——一种动态视角)—— Richard L. Sites 著

上一页实用 IPv6(第三部分)下一页访谈:保障 FreeBSD 安全性

最后更新于1个月前

  • 原文链接:

  • 审阅:TOM JONES

性能分析是一门复杂的学科 —— 在这个领域,任何结论都必须经过严谨的论证、详细的实验数据支撑,并且你必须对自己的结果有极大的信心。在计算机科学领域,我们几乎被劝阻去关注性能问题。经常被引用的 Knuth 名言——“过早优化是万恶之源”——被用来提醒初级开发者不要过分关注琐碎的细节。这种建议大多数时候是出于善意。在学习阶段,完成项目并不断进步比纠结于微小的优化更重要。

但这一点却产生了一个反向影响,使得改进真实系统性能的信息变得难以获取。而完整的 Knuth 名言是:“我们应该在 97% 的时间里忘掉那些微小的效率问题,因为过早优化是万恶之源。然而,我们不应放弃在关键的 3% 时间里进行优化的机会。优秀的程序员不会因此而自满,而是会在识别出关键代码后仔细分析。” 这告诉我们,在某些情况下,我们确实需要关注性能,而深入的调查研究会带来回报。

近年来,有几本我高度评价并多次推荐的性能优化书籍。其中,Brendan Gregg 的 《性能之巅:洞悉系统、企业与云计算》(Systems Performance)(替代了长期以来备受推崇的 DTrace 性能调优书籍)和 《BPF 性能工具》(BPF Performance Tools) 是世界知名的性能分析专家著作,专注于研究和设计工具,以更好地理解真实世界中的系统性能。

另一本相对冷门但同样出色(且开源)的书是 Denis Bakhvalov 的 《现代 CPU 的性能分析与调优》(Performance Analysis and Tuning on Modern CPUs),它深入探讨了 CPU 运行缓慢的原因,以及如何最大化计算机的性能利用率。

Gregg 的书是未来性能专家的优秀入门教材,它们提供了一种高层次的系统分析视角,并指导如何使用工具进行分析。《BPF 性能工具》和《性能之巅:洞悉系统、企业与云计算》不仅提供了性能分析的方法论,还包含了高质量的参考资料,是你排查问题的第一选择。阅读这两本书以及相关工具的源代码,你可以学会如何构建自己的性能分析工具。但需要注意的是,这些书籍并未深入探讨如何设计优秀的性能分析工具。

Bakhvalov 的 《现代 CPU 的性能分析与调优》(Performance Analysis and Tuning on Modern CPUs) 介绍了如何在 Linux 上使用 perf 工具集来分析程序性能。书中涵盖了开发者需要掌握的核心基础知识,以便理解 perf 的输出,并分析影响软件性能的各种因素。这本书同样是一个很好的入门读物,但缺乏扎实的示例(这些示例可以从作者提供的免费课程资料中获取),同时也没有为需要构建自定义调试工具的开发者提供进一步的指导。

相比之下,Richard L. Sites 的《深入理解软件性能——一种动态视角》(Understanding Software Dynamics, USD) 在近年来的相关书籍中尤为突出。它不仅介绍了计算机的基本工作原理及影响其性能的关键因素,还进一步阐述了性能工具在实际系统中需要满足的各种约束条件,以确保其有效性。

作者是一位计算机行业的资深专家,他在 DEC 工作时开发了最早的 CPU 性能指令,并在 Google 和 Tesla 等公司长期从事性能分析工作,研究范围从 CPU 级别的瓶颈到整个数据中心的应用栈。USD 是探索大型系统性能随动态变化的一个实践指南。在大型系统中,同时存在大量事务,单个事务的性能通常不太重要,而 USD 关注的是事务分布情况。性能问题往往出现在离群值 (outliers) 上 —— 系统的整体性能由最快和最慢的事务共同决定,USD 指导读者如何找出系统的最佳和最差性能预期,并分析当 90% 分位点(90th percentile)超出这些预期范围时的原因。

USD 以数据中心的 RPC 系统作为核心示例,并构建工具来发现可能出现的性能问题。前七章探讨了性能测量方法以及不同系统组件对最终性能的影响。在此部分,USD 进行了非常深入的细节分析,帮助读者理解为何 CPU 指令、内存、磁盘或网络访问 可能成为系统性能瓶颈。

在整个探讨过程中,书中传达的一个核心理念是:将单个子系统视为独立组件来分析性能并不是一个好的方法。Sites 展示了如何确定计算机子系统的最佳和最差性能,并演示了如何在真实环境中验证这些估算。

USD 的第二部分则关注如何在保持可接受的开销的前提下观察和测量真实系统的性能。在这一部分,读者将学习当前使用的性能分析工具的不同实现方式,以及这些工具所提供的观察机会。同时,本书在这里引入了性能观察工具的设计标准,为读者提供更深层次的理解。

本书的第三部分建立在前两部分介绍的基础上,并通过 KUTrace 框架(一个 内核 - 用户态 跟踪框架)的引入,展示了实际的跟踪实现。KUTrace 是一个高带宽日志记录框架,必须以低开销方式实现。它为调试运行时间过长的事务提供了额外的信息来源。

KUTrace 是一个 Linux 的补丁集,它为 内核 和 用户态 代码中的特定点提供了小型(约 64 字节)的日志条目框架。默认情况下,跟踪点是 __predict_false 分支,只有在加载 KUTrace 内核模块后,它们才会激活,并开始将日志存入 内核缓冲区。USD 详细讲解了 KUTrace 采用的日志条目设计、系统接口以及内核模块的工作方式。

书的最后部分由 九章 组成,每章都围绕前文讨论过的某个性能领域的问题展开实际案例分析。例如:

  • CPU 计算过多,

  • CPU 运行速度慢或处于等待状态,

  • 内存、磁盘、网络、锁争用、时间管理 和 队列 等场景。

这些章节基于前文的理论知识,通过实际问题帮助读者理解 性能瓶颈的成因 以及 如何排查。

《深入理解软件性能——一种动态视角》(USD) 是一本出色的书籍,适合任何对 实际系统性能分析 感兴趣的人。它很好地介绍了必要的背景知识,同时不会过于深入到难以跟进的细节。多个章节配有示例,以巩固和扩展前文所讲述的知识,并专注于提升理解能力。

Sites 在全书中保持了清晰的表达方式,书中引用了大量 来自 Google 真实系统 和 示例系统 的高质量示例图表。此外,书中还融入了作者自己在 性能优化 领域的经验,使内容更具实用价值。USD 结构严谨、语言流畅,适合没有 性能分析 经验的读者,也能让有经验的读者从 不同计算机组件的性能细节 以及作者介绍的新工具中获得新知识。


TOM JONES,FreeBSD 开发者、《BSDNow Podcast》联合主持人,希望基于 FreeBSD 的项目能够获得应有的关注。他居住在 苏格兰东北部,并提供 FreeBSD 咨询服务。

Understanding Software Dynamics by Richard L. Sites