追踪一条业务请求,需要同时追踪控制、字节、状态和等待;它们经常经过不同路径,并在不同时间完成。
分析对象必须是具体请求
“服务器 I/O 慢”不是一个足够明确的对象。一个打开文件并读取的请求,一个同步提交事务的请求,一个发送已有缓存的请求,依赖的接口、缓存和硬件都不同。问题首先属于某个请求语义,其次才属于某组部件。
模型中的载荷是业务字节,命令是要求某层执行什么,完成通知是该层报告已达到什么状态。命令较小、载荷较大、通知很短是常见形态,但不适用于所有接口。
同一份内容可能有多个副本
用户缓冲区、页缓存、设备可访问缓冲区、控制器缓存和介质可能分别保存相关内容。副本之间的关系由协议和生命周期维护,不能仅凭“数据在内存里”判断谁可以修改或释放它。
业务逻辑对象
-> 应用缓冲区
-> 内核对象/缓存/请求
-> 驱动描述与地址映射
-> 设备工作与载荷传输
-> 状态确认
-> 应用继续/返回业务结果
这是通用分析骨架。Linux 的 VFS 与 DMA 接口 分别提供软件文件对象和设备访问的依据,不意味着每条业务都经过图中的全部层。
缓存分支改变真正使用的硬件
读请求命中页缓存时,设备可能完全没有执行本次读取;数据库命中自身缓存时,连文件读取调用也可能不发生。测得请求很快,不一定证明磁盘很快。
反过来,缓冲写先返回后,设备工作可能在其他时间发生。应用请求时间与后台写回时间不严格重合。路径分析需要记录缓存状态和接口语义,详见 读取 与 持久写。
队列连接阶段,也隐藏等待
线程池、套接字、块层、控制器和设备内部都可能排队。负载超过某阶段的稳定处理能力时,等待可能在上游积累,最后表现为业务超时。
原创推演:应用增加并发后,吞吐只小幅增长而尾延迟大幅增加。这个现象支持“某阶段接近饱和”的假设,但不能说明一定是存储设备;网络、锁、配额或外部依赖均可能产生类似效果。
完成不能越层推断
TCP 确认是传输层的证据;设备完成是设备协议的证据;事务成功是应用语义的证据。每层的恢复和重试还可能让上层无法看见部分异常。只有明确接口承诺,结论才可复用。
Linux 对 fsync 的定义提供同步语义,但它不替代数据库自身提交协议,也不替代对整个存储栈的配置核对。
以路径为单位组织排障
好的排障描述包含请求入口、软件层次、数据位置、设备对象、完成条件和故障窗口。性能数据必须能指向这些对象,而不是罗列无关百分比。本库随后分别展开读取、写入、网络、存储拓扑、队列、虚拟化和组合业务场景。
服务器知识库 · 系统架构 · 数据路径 · 测试验收 · 工程参考
公开资料核对:2026-10-07。文档类型:Explanation。逻辑图、场景推演与报告模板为原创,不代表实测结果、厂商内部设计或公司制度;操作仅限获授权的目标和环境。