DMA
DMA解放了CPU
有 DMA 时(现代网络发送)
- DMA(Direct Memory Access) = 让外设(网卡)直接访问内存,不需要 CPU 一直搬数据。
- 流程是:
- 用户调用
send()→ 数据先拷贝到 内核 socket buffer。 - 内核告诉网卡:”这段内存的数据你自己去拿”。
- 网卡用 DMA 控制器,直接从内核缓冲区读取数据到网卡缓冲区。
- CPU 空出来干别的活。
- 用户调用
👉 CPU 只做控制,不做“苦力”搬运工。
没有 DMA 时(早期方式)
如果没有 DMA,CPU 就得亲自当“苦力”:
- 用户调用
send(),数据进入内核缓冲区。 - CPU 一点点把内核缓冲区的数据拷贝到网卡的寄存器/缓冲区。
- 网卡再把数据发出去。
问题:
- CPU 必须忙着不断“搬运字节”,效率很低。
- 数据传输过程中 CPU 不能干别的事,性能瓶颈严重。
- 吞吐量大时,CPU 可能光搬数据就耗光了算力。