linux - 文件复制是否受 CPU 限制?

标签 linux io linux-kernel operating-system kernel

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

如果在某些情况下 I/O 设备比 CPU 快(比如在虚拟机中),是否有可能让 CPU 忙于移动数据(比如从缓冲区到内核空间,从内核空间到用户空间)?然后它会变得受 CPU 限制吗?

最佳答案

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

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

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

如果复制高效完成,将 RAM 数据复制到 HDD 应该不会给 CPU 带来压力。 RAM 和北桥的数据可以通过南桥复制到 HDD。 另见 here .

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

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

关于linux - 文件复制是否受 CPU 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33648502/

相关文章:

linux - 无法在 Linux 上的 goroutine 中运行 go web serve (Mint)

linux - 删除正在进行 I/O 的文件 : Is it a filesystem and/or an OS feature?

c - 如何使用 C 捕获 FILE IO 中的错误?

c - 如何在 linux 中对齐 kmalloc() 地址

c++ - 关于处理超过 1024 个套接字描述符

java - 如何写入已运行的 java 程序的输入流?

c - 当我只调用一次 fork 时,为什么会得到多个 SIGCHLD?

linux - 如何为平台驱动程序正确初始化属性组?

c - 在 C 中写入关闭的文件

linux - 在 linux 内核中映射 DMA 中断