FreeBSD manual
download PDF document: ptnet.4.pdf
PTNET(4) FreeBSD Kernel Interfaces Manual PTNET(4)
NAME
ptnet - Ethernet driver for passed-through netmap ports
SYNOPSIS
This network driver is included in netmap(4), and it can be compiled into
the kernel by adding the following line in your kernel configuration
file:
device netmap
DESCRIPTION
The ptnet device driver provides direct access to host netmap ports, from
within a Virtual Machine (VM). Applications running inside the VM can
access the TX/RX rings and buffers of a netmap port that the hypervisor
has passed-through to the VM. Hypervisor support for ptnet is currently
available for QEMU/KVM. Any netmap(4) port can be passed-through,
including physical NICs, vale(4) ports, netmap pipes, etc.
The main use-case for netmap passthrough is Network Function
Virtualization (NFV), where middlebox applications running within VMs may
want to process very high packet rates (e.g., 1-10 millions packets per
second or more). Note, however, that those applications must use the
device in netmap mode in order to achieve such rates. In addition to the
general advantages of netmap, the improved performance of ptnet when
compared to hypervisor device emulation or paravirtualization (e.g.,
vtnet(4), vmx(4)) comes from the hypervisor being completely bypassed in
the data-path. For example, when using vtnet(4) the VM has to convert
each mbuf(9) to a VirtIO-specific packet representation and publish that
to a VirtIO queue; on the hypervisor side, the packet is extracted from
the VirtIO queue and converted to a hypervisor-specific packet
representation. The overhead of format conversions (and packet copies,
in same cases) is not incured by ptnet in netmap mode, because mbufs are
not used at all, and the packet format is the one defined by netmap
(e.g., struct netmap_slot) along the whole data-path. No format
conversions or copies happen.
It is also possible to use a ptnet device like a regular network
interface, which interacts with the FreeBSD network stack (i.e., not in
netmap mode). However, in that case it is necessary to pay the cost of
data copies between mbufs and netmap buffers, which generally results in
lower TCP/UDP performance than vtnet(4) or other paravirtualized network
devices. If the passed-through netmap port supports the VirtIO network
header, ptnet is able to use it, and support TCP/UDP checksum offload
(for both transmit and receive), TCP segmentation offload (TSO) and TCP
large receive offload (LRO). Currently, vale(4) ports support the
header. Note that the VirtIO network header is generally not used in NFV
use-cases, because middleboxes are not endpoints of TCP/UDP connections.
TUNABLES
Tunables can be set at the loader(8) prompt before booting the kernel or
stored in loader.conf(5).
dev.netmap.ptnet_vnet_hdr
This tunable enables (1) or disables (0) the VirtIO network
header. If enabled, ptnet uses the same header used by vtnet(4)
to exchange offload metadata with the hypervisor. If disabled,
no header is prepended to transmitted and received packets. The
The ptnet driver was written by Vincenzo Maffione
<vmaffione@FreeBSD.org>. It first appeared in FreeBSD 12.0.
FreeBSD 14.0-RELEASE-p11 December 11, 2018 FreeBSD 14.0-RELEASE-p11