This work is based on the original v2 RFC by Eugenio Perez, and continues its version numbering. Link: https://archives.passt.top/passt-dev/20250709174748.3514693-1-eperezma@redha... vhost-net is a kernel device that allows reading and writing packets to a tap device using virtqueues instead of read(2) and write(2) and their vectored counterparts. Frames are handed over through a shared descriptor ring, so several of them can be passed to the kernel at once rather than issuing a syscall per frame. This RFC introduces an option to pasta, --vhost, which if specified will leverage this mode of acceleration. I haven't benchmarked this against the existing path yet, so the performance argument above is so far unquantified. TODO: test what happens when the namespace wants to send data but we don't have available rx descriptors, and vice versa for tx. TODO: tap_send_frames() currently carries an implicit contract that it is synchronous: once it returns, the caller is free to reuse its frame buffers. That holds for writev() and for vhost-user, but not for vhost-kernel, where returning only means the descriptors have been queued. pasta can overwrite a buffer while the kernel vhost worker thread is still reading the descriptor pointing at it. I haven't settled on how to restore that contract, and would appreciate direction before building further on top of it. Ammar Yasser (8): tap: Move the tap_hdr file to a separate file udp,tcp: Make protocol specific buffers public conf: Add context fields, epoll types and the --vhost flag to pasta virtio: Define the pasta vhost interface virtio: Implement the pasta vhost functions virtio: Implement pasta vhost acceleration guest->pasta path pasta: Implement pasta vhost TX (pasta->guest) prerequisites tap: Implement pasta vhost TX conf.c | 6 + epoll_type.h | 4 + passt.c | 9 ++ passt.h | 17 ++- tap.c | 317 +++++++++++++++++++++++++++++++++++++++++-------- tap.h | 10 +- tap_hdr.h | 19 +++ tcp_buf.c | 51 +++++--- tcp_buf.h | 14 +++ udp.c | 68 ++++++----- udp.h | 53 +++++++++ udp_internal.h | 13 -- virtio.c | 283 ++++++++++++++++++++++++++++++++++++++++++- virtio.h | 76 ++++++++++++ 14 files changed, 827 insertions(+), 113 deletions(-) create mode 100644 tap_hdr.h -- 2.34.1