Processes that forward large amounts of data face three problems: Syscall cost: making multiple syscalls for every forwarded packet is costly. Wakeup latency: the user-space process must be woken up often to forward the data. Depending on the scheduler, this may result in poor tail latency. Copying cost: copying data from kernel to userspace and then immediately back to the kernel is not free and