In Wikipedia's introduction to splice, I found:
When using splice() with sockets, the network controller (NIC) must support DMA.
When the NIC does not support DMA then splice() will not deliver any performance improvement. The reason for this is that each page of the pipe will just fill up to frame size (1460 bytes of the available 4096 bytes per page).
From what I understand, the splice improves performance because:
- there's less context switching
- it minimizes the number of copies (minimum two DMA copies)
If the NIC does not support DMA copy, we use CPU copy. This is still better than normal copies which have to go to the user space.
So, I don't understand why Wikipedia says there's no performance improvements without DMA support in NIC.