Abstract
When running a file server, a lot of bytes transferred back and forth aren’t necessarily needed by the server itself. User data read from files and sent over the network doesn’t need to be copied to the user space, just so the server process can send it, which is the idea behind the “zero-copy transfer”. The IO vector is a concept extending it by comprising both user and kernel space data in various possible arrangements.
A typical buffer pointer replaced with such a vector enables both great flexibility in formatting the network packets and performance gains by skipping the transfers to/from the kernel. If equipped with the kernel-level cryptography, it also allows meeting today’s security requirements - signing and encryption. Going further, with the right device drivers, it could help meeting tomorrow’s throughput demands - out-of-band transfers and remote (and direct) memory access.
Learning Objectives:
1. Flexibility of an abstract buffer-like data structure
2. Efficiency of zero-copy transfer
3. Keeping performance with signing and encryption at the kernel level
4. Representing the kernel buffers in user space