This is the frame I use when a system is ambiguous, noisy, or too complex for siloed troubleshooting. It keeps the work grounded in behavior instead of assumptions.
How the request begins: I/O patterns, concurrency, caching, retry logic, and how the client is actually using the filesystem or service.
Where the request lands: protocol behavior, metadata activity, throughput, latency, server-side logs, and storage stack behavior.
The transport between client and storage: InfiniBand, RoCE, Ethernet, congestion, MTU mismatches, packet loss, link flaps, queue depths.
The surrounding environment: containers, kernel tuning, virtualization, resource contention, scheduling behavior, and hybrid boundaries.