我试图理解 Windows 性能监视器中物理磁盘的拆分 IO/秒计数器的含义,但不太明白为什么单个 IO 操作可能被拆分成多个。根据 Microsoft 文档:
显示磁盘 I/O 请求被拆分为多个请求的速率。拆分 I/O 可能是因为请求的数据太大而无法放入单个 I/O 中,或者单磁盘系统上的磁盘碎片太多。
操作系统如何知道请求的数据太大,需要拆分请求?是否有固定的阈值,还是正在计算?碎片是文件系统的概念。据我所知,拆分 io 计数器是从磁盘驱动程序的内部收集的,该内部低于文件系统层,因此不知道请求的块(或一组连续块)是否属于碎片文件。我错了吗?
答案1
每个块设备可以指定(至少)两种不同的 IO 大小:
- 最小区块大小:设备可接受的最小块大小(通常为 512B 或 4 KB)
- 最大块大小:设备在一次传输中可以管理的最大块大小(Windows IDE 和 AHCI 驱动程序通常为 64 KB)。
从上面可以清楚地看出,如果设备指定最大块大小为 64 KB,但应用程序每次写入 128 KB,则每次写入将拆分为二不同的IO请求。
从这里(请注意,这是一份旧文件):
使用 64 KB 请求可在占用极少处理器时间的情况下实现更快的吞吐量。最大吞吐量通常发生在 64 KB 时,尽管某些设备可能具有更高的最大吞吐量大小。当传输大于 64 KB 的数据块时,I/O 子系统会将传输拆分为 64 KB 块。超过 64 KB 时,传输速率急剧下降,吞吐量趋于平稳。处理器使用和中断似乎也在 64 KB 时趋于平稳。