先定义问题再采指标
约 55 分钟
先定义问题再采指标
先看见系统现象
这一节我们不从定义表开始,而从你能亲手观察的现象进入“性能观测与系统化诊断”。请先把场景放到桌面上:针对接口P99从80ms升到900ms,先固定请求类型、发布版本和峰值窗口。终端里出现的返回值、延迟或状态变化并不是答案,它只是证据入口。你要继续追问:哪一层拥有这个状态?谁有权修改?一次正常动作会经过哪些队列、表项、保护边界和硬件事件?如果中途失败,系统还必须守住什么?
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
本节真正要教会你的机制是:性能问题要写工作负载、时间窗、基线、受影响用户和成功阈值,再选择指标。先用自己的话向同学解释,再把名词落到一个具体对象和一条时间线。若只能说“内核会处理”“系统自动调度”,说明责任边界仍然模糊;下一步应把自动二字拆成状态、事件、条件和可观察结果。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
建立对象、状态与不变量
请在纸上画四栏:对象身份、可见状态、允许事件、不变量。围绕“先定义问题再采指标”,对象身份回答我们正在追踪的是进程、线程、页、文件、设备请求还是保护域;可见状态列出实验可以读到的队列、计数器、返回码和时间戳;允许事件说明谁能触发迁移;不变量写出任何合法执行都不能破坏的条件。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
把核心机制落实为状态迁移时,用 旧状态 --事件/条件--> 新状态 书写。每条边都补触发者、原子范围和失败返回。性能问题要写工作负载、时间窗、基线、受影响用户和成功阈值,再选择指标。这句话不是要背,而是约束你的图:图中若存在没有触发事件的跳转、两个对象同时占有唯一资源、无权限主体修改受保护状态,图就已经暴露了错误。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
跟我沿时间线推一遍
现在按“观察—假设—执行—记录—反查”完成贯穿实验:针对接口P99从80ms升到900ms,先固定请求类型、发布版本和峰值窗口。第一步固定输入和初始状态;第二步只改变一个因素;第三步记录每个离散事件后的状态,而不是只看最后一行;第四步用不变量检查首个偏差;第五步更换一个边界输入重跑。这样得到的不是演示截图,而是一条可重复证据链。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
假设当前有 5 个请求,每个请求有效服务时间为 7 ms,边界切换或固定管理开销为 2 ms。最小串行预算是 5×(7+2)=45 ms。这个算式只在没有排队重叠、缓存变化和并行执行时成立;现实测量若不同,不要先判程序错,而要逐项检查模型遗漏。公式的价值是暴露假设,不是替系统替你做判断。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
可运行实验怎样设计
本课程把实验当成可执行论证。输入必须自描述,输出必须稳定,正常、边界、失败和回归至少四组测试。实验程序从标准输入读取、写到标准输出,不依赖本机残留文件、时钟运气或人工点击。与“先定义问题再采指标”相关的每个变量都标单位;同刻事件的先后、队列稳定性、舍入和错误码也要在题面声明。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
先写参考模型再写优化实现。参考模型宁可慢,也要让每一步状态可打印;优化版本必须在同一组测试上与参考模型逐项一致。遇到并发或弱内存难以真实复现时,可以先做确定性的离散事件模拟,但必须明确它抽象掉了什么,不能把伪代码标成可运行代码题。
边界、竞态与失败注入
本节最危险的误解是:平均延迟正常不能反驳尾延迟故障;不同时间窗和分母不可直接比较。请把这句话改写成至少一个反例输入,并说明错误实现会输出什么、正确实现应拒绝或怎样恢复。再主动注入空输入、零容量、同刻事件、权限不足、重复请求、资源耗尽和中途崩溃中的两个,让系统暴露首个不变量失败。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
竞态题不靠“可能有问题”得分。你要列出两个执行者各自的步骤,保持各自程序序,再构造一个具体交错;标出第一次读取旧值、重复占有、丢失唤醒或越权使用发生在哪里。若加一把大锁可以修复,还要继续问锁的范围、等待、失败路径和是否造成死锁。
从机制连接到前后章节
“先定义问题再采指标”不是孤立知识点。向前,它依赖程序、硬件中断、地址与数据结构等基础;向后,它会影响调度延迟、内存驻留、文件持久化、设备吞吐、安全隔离或虚拟化开销。请画一条因果链:上游事件改变本节状态,本节决策改变下游可观察结果。链条上每条箭头都写量纲或状态条件。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
当你发现同一现象有多种解释时,列假设表,不要抢着下结论。比如延迟升高可能来自运行队列、锁等待、缺页、块设备排队或虚拟机steal;下一项观测应能让至少两个假设产生不同预测。系统课真正训练的是这种跨层、可证伪的推理。
在线练习与纸笔推演
本节下方至少有单选、多选和计算题;部分课时另有真实代码实验。单选先圈主体与条件,再寻找唯一能完整解释机制的选项。多选逐项给反例,漏选和多选都视为边界没掌握。计算题先写单位和中间状态,再代入;代码题必须通过全部内联测试,并自己补一组题库未覆盖的失败测试。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
做完不要立刻看解析。把答案遮住,用“对象—状态—事件—不变量—证据”五句话复述。如果你能从“针对接口P99从80ms升到900ms,先固定请求类型、发布版本和峰值窗口”重建机制,也能解释“平均延迟正常不能反驳尾延迟故障;不同时间窗和分母不可直接比较”为什么成立或不成立,才算完成了从现象到原理的闭环。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
下课前严格自检
闭卷回答六问:一,“先定义问题再采指标”管理的具体对象是什么?二,写出至少三条合法状态迁移;三,复述核心机制“性能问题要写工作负载、时间窗、基线、受影响用户和成功阈值,再选择指标”;四,给“针对接口P99从80ms升到900ms,先固定请求类型、发布版本和峰值窗口”写四组可运行测试;五,构造一个对应边界“平均延迟正常不能反驳尾延迟故障;不同时间窗和分母不可直接比较”的反例;六,把本节机制连接到前一章和后一章各一个概念。
(本段反查对象:先定义问题再采指标;章内位置:11-1。)
合格不是能认出术语,而是能画状态图、算出中间量、运行实验、定位首个错误并说明模型边界。若任一问只能用“系统自动完成”回答,就回到时间线补出真正执行动作,再进入下一节。
Practice
本课练习
先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。
请用先定义问题再采指标中的简化串行预算检查下列负载:有8个请求,每个有效服务7ms,每次固定管理开销2ms,忽略并行与重叠。总墙钟预算是多少ms?填写数值,并在草稿写公式和适用条件。
请完成先定义问题再采指标的系统设计题:题设现象为针对接口P99从80ms升到900ms,先固定请求类型、发布版本和峰值窗口。提交对象与初态、状态图或公式、实验步骤、一个竞态/故障反例及恢复说明。
【学生可见评分量表(10分)】对象与不变量2分;机制推演3分;实验与证据3分;失败边界和恢复2分。只列术语不得分。