到目前为止,这种情况发生在两种情况下:当我使用 sabnzbd 时,它下载完文件后使用 par2.exe 将其拼接在一起,以及刚才,当我从正在运行的 VM 中对硬盘进行碎片整理时。
这样使用硬盘会导致 XP 变得非常不响应。许多 GUI 元素无法点击,或者点击严重延迟。在 Chrome 中,每当我转到几分钟前刚打开的选项卡时,整个页面的重新加载速度都非常慢 - 我可以看到页面图形逐行加载。需要注意的是,在第一种情况下,我的页面文件位于与我运行这些操作的硬盘完全不同的硬盘上,而在第二种情况下,它位于同一硬盘上的单独分区上。但会出现相同的行为。
能解释一下为什么会发生这种情况吗?有什么建议可以避免这种情况发生吗?
我有 4GB 的 RAM 和双核处理器,当这些活动进行时,我的 CPU 甚至不到 25%,所以这似乎不是资源不足的情况。XP 处理这种情况的效率是否不够高?
答案1
注意:我假设您使用的是旋转磁盘驱动器。固态存储在这些方面的性能指标差异很大。
虽然现代驱动器在执行批量读取和写入时可以维持每秒数十兆字节的速度,但您描述的两种操作都涉及磁盘上的至少两个位置,因此涉及大量磁头移动。磁头移动的延迟对吞吐量有很大影响,因为每次驱动器需要移动磁头时,实际上都会有延迟将它们踢到正确的位置,等待它们稳定下来的延迟,然后等待磁盘的正确部分旋转过去也会有延迟。这些延迟本身很小(对于大多数现代驱动器,平均每次移动总共不到 10 纳秒),但如果驱动器可以全速推动 100 兆字节/秒,那么每次移动 10 毫秒就会浪费 1 兆字节的数据传输时间。在发生很多事情的情况下,驱动器很容易花费更多的时间来移动磁头,而不是实际读取和写入数据(读取几十毫秒,移动磁头,从那里读取一点,移动磁头,写入几毫秒,移动磁头……)。
当您对驱动器进行碎片整理时,该实用程序会花费大部分时间从磁盘上的一个位置读取数据并写入另一个位置,每次只写入少量数据块。从受保护的文件集中提取内容的情况更糟,因为至少有两个文件正在被读取(一个源文件和一个或多个奇偶校验文件),并且输出文件正在被写入。即使只是对大型文件进行简单的复制操作也会产生影响。所有这些都不包括在移动数据块和/或扩展文件时保持目录结构和可用空间映射最新所需的磁头移动。运行虚拟机可能同样困难,具体取决于虚拟机当时正在执行的操作(并且虚拟机将减少主机上可用的 RAM 以用作缓存/缓冲区,这可能会使情况恶化,并且虚拟机中的任何写入操作都可能比直接在主机上执行相同操作要困难得多,尤其是当您使用“可增长”虚拟驱动器时)。
在所有这些事情发生的情况下,如果 GUI 应用程序需要请求哪怕是一点点 I/O,它都可能排在所有其他正在发生的事情后面。除非应用程序完全是多线程的,否则这可能会导致它“阻塞”等待 I/O 操作完成,这意味着它无法响应 Windows 事件队列中的任何消息(例如“用户在此处单击了您”),直到轮到它为止。同时发生的事情越多,情况就越糟,而且您不会在“CPU 繁忙”读数中注意到它,因为 CPU不是忙碌 – 在这种情况下,它大部分时间都在等待 IO 操作完成。
如果您有两个或更多驱动器,您可以通过将负载分散到驱动器上来大大减少这对您的影响。如果您的虚拟机位于与主操作系统不同的驱动器上,当虚拟机繁忙而主机正在对系统分区进行碎片整理时,它们将不会争夺 I/O 服务。此外,从一个驱动器提取存档并将输出写入另一个驱动器将明显快于将其提取到同一驱动器,因为读取操作不会直接与写入操作争夺一个驱动器上的磁头定位。
答案2
对机器的硬盘进行碎片整理会导致任何机器运行速度变慢。它会将大量数据移动到各处。
您的电脑是什么型号?您的处理器是单核还是双核?内存是多少?这里可能涉及很多因素。
最有可能的是,这是一个挂起的进程或与此相关的其他问题。您说您正在运行虚拟机。如果您在虚拟机和主机操作系统中执行工作,这些可能会占用大量资源。虚拟机是非常耗费 CPU 的操作。它正在您的主操作系统下运行整个其他操作系统。
答案3
说实话,听起来你同时做了太多事情。你看到的是一个瓶颈 - 硬盘被要求同时做几件事(有些事情比其他事情优先级更高),所以 GUI 点击之类的事情正在“等待”轮到它们被处理。
答案4
问题可能是由相关活动(例如碎片整理)占用了很大一部分 CPU 所致。这导致留给 UI 的资源非常少,因此导致响应速度慢。
您可以尝试降低 par2.exe 或碎片整理的优先级。转到任务管理器 > 进程,右键单击有问题的进程并选择设置优先级 > 低。
您是否在运行单核处理器?如果拥有 2 个或更多处理器(或核心),则 UI 可以在未执行任务的处理器上运行。