Windows XP 机器在维护网络或磁盘 IO 时性能会变慢。CPU 和内存使用率都很低,根据 Process Explorer,系统+中断使用率 < 5%。内存使用率 < 20%(4GB)。维护磁盘或网络 IO 为 ~150KB/s 或以上会导致严重减速。最明显的是应用程序(全部应用程序)启动极其缓慢(用 MinGW 编译的一个小型 Hello World C 应用程序花了 12 秒才显示 printf() 消息并退出。)
这是正常的吗?如果不是,那到底是怎么回事?这也不是可能的最大 I/O...我可以轻松达到 HDD 100MB/s 和网络 5MB/s 的速度,但任何超过 ~150KB/s 的速度都会导致这种行为。
戴尔 Inspiron 1545,英特尔 P8600 Core2 Duo @2.4GHz,4GB RAM,500GB HDD
答案1
我怀疑您看到的是 Windows PC 的正常磁盘 I/O 行为。为了可能的确认,我能够比较两台运行 Windows 7 且具有非常相似的 Windows 体验指数(指标?)的 PC。第一台 PC 是一台与您的类似的 Thinkpad 笔记本电脑,配有 P8600 @ 2.4 GHz 和 2.5 英寸 SATA II 5400rpm 驱动器。另一台 PC 是台式机,配有 Athlon 64 X2 双核 3800+ 和 3.5 英寸 SATA 7200rpm 驱动器。我将启动一个大型(几 GB)文件的本地磁盘到磁盘副本;在该文件复制过程中,我将尝试启动一个应用程序。两台 PC 的典型延迟时间约为 10 到 20 秒(延迟时间可能与应用程序大小有关)。
由于台式电脑有两个硬盘,我还能够在一个磁盘驱动器上执行文件复制,然后从另一个硬盘加载应用程序;通过两个独立的磁盘驱动器,应用程序可以在大约 2 到 5 秒内启动。
您提到这个问题也发生在“网络 I/O”中。除非您执行单端数据传输(例如,将网络数据传输到位桶,例如/dev/null在 *nix 中),那么您可能使用磁盘文件作为源或目标来生成“网络 I/O”。因此,磁盘 I/O 表现为“磁盘 I/O”、“网络 I/O”和应用程序启动缓慢的常见活动。
这可能是 Windows 中的调度怪癖:I/O 密集型任务(例如文件复制)可能会在每个单独的读取或写入操作完成时获得调度优先级(以补偿进程被迫等待的空闲时间,并保持 I/O 吞吐量)。当此 I/O 密集型任务处于活动状态时启动的另一个任务/进程可能会处于 I/O 调度劣势。我在另一个操作系统上看到过类似的怪癖:我正在多用户系统(不是 Unix)上开发数据库复制实用程序。该实用程序在执行时会降低所有其他用户的系统速度,因此我被指责操纵调度程序或作业优先级以谋取私利,但我没有。
答案2
带宽只是问题的一半。如果是随机 I/O,那么它可能会减慢一切速度,直到 I/O 开始排队。
你应该开火性能监视器并检查平均磁盘队列长度和每次传输的平均秒数櫃檯。