DMA

DMA解放了CPU

有 DMA 时(现代网络发送)

  • DMA(Direct Memory Access) = 让外设(网卡)直接访问内存,不需要 CPU 一直搬数据。
  • 流程是:
    1. 用户调用 send() → 数据先拷贝到 内核 socket buffer
    2. 内核告诉网卡:”这段内存的数据你自己去拿”。
    3. 网卡用 DMA 控制器,直接从内核缓冲区读取数据到网卡缓冲区。
    4. CPU 空出来干别的活。

👉 CPU 只做控制,不做“苦力”搬运工

没有 DMA 时(早期方式)

如果没有 DMA,CPU 就得亲自当“苦力”:

  1. 用户调用 send(),数据进入内核缓冲区。
  2. CPU 一点点把内核缓冲区的数据拷贝到网卡的寄存器/缓冲区
  3. 网卡再把数据发出去。

问题:

  • CPU 必须忙着不断“搬运字节”,效率很低。
  • 数据传输过程中 CPU 不能干别的事,性能瓶颈严重。
  • 吞吐量大时,CPU 可能光搬数据就耗光了算力。