【问题标题】:Can file copying be CPU-bound?文件复制可以受 CPU 限制吗?
【发布时间】:2016-02-12 10:09:28
【问题描述】:

据我所知,CPU 通常比 I/O 设备(如 HDD、网络、RAM 等)更快,因此在复制文件时,瓶颈通常是 I/O 受限的(对?)。

如果在某些情况下 I/O 设备比 CPU 快(例如在虚拟机中),是否可以让 CPU 忙于移动数据(例如从缓冲区到内核空间,从内核空间到用户空间)?然后它会成为 CPU 密集型的吗?

【问题讨论】:

  • IO 设备永远不会比 CPU 快,除非它们有自己的 CPU,否则它们仍然必须从 CPU 发出命令。此外,当复制文件时,CPU 只是向 IO 设备发出命令,它不进行复制。此外,VM 将存储在 IO 设备上并加载到 RAM 中,而 RAM 永远不会比 CPU 快。
  • 通常 I/O 不是 CPU 密集型的,因为数据传输是由 I/O 处理器(例如 DMA 控制器)执行的。如果您希望文件副本受 CPU 限制,则使用 PIO、编程输入/输出执行传输。

标签: linux io linux-kernel operating-system kernel


【解决方案1】:

这取决于程序和程序运行的条件。 程序复制数据的速度极不可能受到 CPU 速度的限制。但是,如果计算机运行的其他程序占用大量 CPU 且优先级高于执行复制的程序,则可能会出现这种情况。

最常见的瓶颈是持久存储介质速度(例如硬盘驱动器)。 然后,可用的 RAM 量。 然后,CPU 不可用。

当且仅当,I/O 设备的速度如此之快以至于超过 CPU 速度。那么,情况可能就是这样。然而,这是一个假设情况,因为 CPU 通常不自己执行复制,而是命令其他硬件这样做。 而且,在实际系统中,I/O 设备的可用带宽远低于 CPU 和 RAM 带宽。

如果有效地完成复制,则将 RAM 数据复制到 HDD 不会对 CPU 造成压力。 来自 RAM 和北桥的数据可以通过南桥复制到 HDD。 另见here

如果复制效率低下,程序当然可以用 CPU 读取每个字节并复制它。

此外,可以推断,答案还取决于系统的硬件和架构。

【讨论】:

  • 那么当从内存写入一些数据到磁盘时,(例如:1GB 数据),那些 1GB 数据会被 CPU 处理吗?
  • 上述问题与您提到的“CPU通常不会......硬件这样做。”,谢谢。
  • 还是只用一个 CPU 命令让其他硬件完成 1GB 的复制工作?
  • 我更新了我的答案,通常这可以由北桥/南桥芯片组和操作系统处理。然而,没有什么能阻止程序主动逐字节复制所有内容。
【解决方案2】:

恐怕回答错了。至少并不总是正确的。

如果我在 Windows 资源管理器中复制包含大约 50.000 个文件(不同大小)的文件夹,则 TaskManager 会报告该副本主要受 CPU 限制。 (即 TM 报告磁盘使用率低而 CPU 使用率非常高)

【讨论】:

  • 我已经尝试过你上面的方法。是的,对于 50,000 个文件的情况,我在任务管理器上看到了高 CPU 速率。但是在我刚刚复制了一个大文件(说 10GB)之后,TM 确实报告了高磁盘使用率而不是高 CPU 率。
  • 也是我的经验。例如,如果我对大型数据库进行数据库备份,则任务管理器会报告该进程受磁盘约束,而不是 CPU。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2010-11-20
  • 1970-01-01
  • 2011-03-05
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多