socsvn commit: r308091 - soc2016/vincenzo
vincenzo at FreeBSD.org
vincenzo at FreeBSD.org
Sat Aug 20 15:32:02 UTC 2016
Author: vincenzo
Date: Sat Aug 20 15:32:00 2016
New Revision: 308091
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=308091
Log:
update README with report
Modified:
soc2016/vincenzo/README
Modified: soc2016/vincenzo/README
==============================================================================
--- soc2016/vincenzo/README Sat Aug 20 14:04:51 2016 (r308090)
+++ soc2016/vincenzo/README Sat Aug 20 15:32:00 2016 (r308091)
@@ -4,7 +4,7 @@
Mentor: Luigi Rizzo (luigi AT freebsd DOT org)
-=========================== Project proposal ==========================
+======================== Original project proposal =======================
Netmap passhthrough (ptnetmap) has been recently introduced on Linux/FreeBSD
platforms, where QEMU-KVM/bhyve hypervisors allow VMs to exchange over 20 Mpps
@@ -96,7 +96,7 @@
interrupt-based operation under lower loads.
-===================== The ptnet paravirtualized device ================
+================== The ptnet paravirtualized device ===================
The original ptnetmap implementation required ptnetmap-enabled virtio-net/e1000
drivers. Only the notification functionalities of those devices were reused,
@@ -163,15 +163,15 @@
Timetable:
- * Week 1-2: Write ptnet FreeBSD driver supporting netmap native applications [D1] --> COMPLETED
- * Week 3: Tests, bug-fixing, and performance evaluation [D1] --> COMPLETED
- * Week 4-5: Write FreeBSD network interface support for the ptnet driver. [D2] --> COMPLETED
- * Week 6: Tests, bug-fixing [D2]. Prepare documents for mid-term evaluation. --> COMPLETED
- * Week 7-8: Add virtio-net header support to the ptnet driver [D3]. --> COMPLETED
- * Week 9: Test, bug-fixes and performance evaluation [D3]. --> COMPLETED
- * Week 10: Write ptnet device model emulation for bhyve [D4] --> COMPLETED
- * Week 11: Test and performance evaluation over bhyve [D4].
- * Week 12: Clean code and prepare documentation for final evaluation.
+ * Week 1-2: Write ptnet FreeBSD driver supporting netmap native applications [D1]
+ * Week 3: Tests, bug-fixing, and performance evaluation [D1]
+ * Week 4-5: Write FreeBSD network interface support for the ptnet driver [D2]
+ * Week 6: Tests, bug-fixing [D2]. Prepare documents for mid-term evaluation
+ * Week 7-8: Add virtio-net header support to the ptnet driver [D3]
+ * Week 9: Test, bug-fixes and performance evaluation [D3]
+ * Week 10: Write ptnet device model emulation for bhyve [D4]
+ * Week 11: Test and performance evaluation over bhyve [D4]
+ * Week 12: Clean code and prepare documentation for final evaluation
========================== Final submission =================================
@@ -183,7 +183,7 @@
The complete list of my SVN commits can be obtained with the following command
on the SVN repository
$ svn log -r 302612:HEAD
-Instructions to extract patches of the subsystem I modified are reported
+Instructions to extract patches of the subsystems I modified are reported
below.
Moreover, all the modifications I did to netmap (see below) have also been
@@ -224,9 +224,10 @@
I implemented the routines required to attach/detach the ptnet PCI
device (ptnet_probe, ptnet_attach, ptnet_detach, ...).
- I developed the routines necessary to open and use the ptnet NIC in
+ I developed the routines necessary to open and use a ptnet NIC in
netmap mode (ptnet_nm_register, ptnet_nm_txsync, ptnet_nm_rxsync,
- ptnet_nm_config, ...). I managed to share some routines
+ ptnet_nm_config, ...), and to react to MSI-X interrupts.
+ I managed to share some routines
(ptnet_nm_krings_create, ptnet_nm_krings_delete, ptnet_nm_dtor) between
the Linux and FreeBSD drivers, to improve code reuse.
@@ -236,12 +237,39 @@
I also implemented a ptnet_poll() routine to support FreeBSD polling
(DEVICE_POLLING).
+ Using as a reference the FreeBSD virtio-net driver (if_vtnet.c), I added
+ support for hw offloadings (TSO and TCP/UDP checksum offloading), by
+ means of the virtio-net header, which is prepended to each Ethernet
+ frame. The virtio-net header can be enabled or disabled by configuring
+ a register of the ptnet device. A boolean sysctl belonging to the
+ netmap module (named ptnet_vnet_hdr) can be tuned for this purpose.
+
* As a second step, I extended bhyve to emulate the ptnet device,
using as a reference the emulation that I had already developed for QEMU:
(https://github.com/vmaffione/qemu/blob/ptnet/hw/net/ptnetmap-netif.c).
- I reused previous work from by myself, my mentor Luigi Rizzo
- and Stefano Garzarella, that we did in the past to add netmap and
- ptnetmap support for bhyve, and to extend libvmm and the vmm module to
+
+ As a preliminary step, I adapted previous work from by myself, my mentor
+ Luigi Rizzo and Stefano Garzarella, that we did in the past to (i) add
+ netmap and ptnetmap support for bhyve, and (ii) extend libvmm and the vmm
+ module to allow netmap (kernel-space code) to inject interrupts in the
+ guest and intercept guest I/O register accesses.
+
+ The emulation for ptnet is available here
+ https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/usr.sbin/bhyve/pci_ptnetmap_netif.c?view=markup
+ which implements (i) the callbacks to manage accesses to the register of
+ the ptnet device (PTCTL, CSBBAH, CSBBAL, VNET_HDR_LEN, ...); (ii) the
+ setup necessary to let netmap inject MSI-X interrupts and intercept
+ writes to the ptnet kick registers.
+
+ Finally, I reorganized and fixed the userspace netmap backend for
+ bhyve, completing the work we did in the past. This new backend is
+ intended to replace the old one that is currently in FreeBSD head.
+ The code in pci_virtio_net.c has been reorganized to support different
+ backends (TAP, netmap, ptnetmap), while previously it was only able
+ to support the TAP backend. The backends are now implemented in
+ a separate file:
+ https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/head/usr.sbin/bhyve/net_backends.c?view=markup
+
Example on how to use various NICs (including ptnet) with bhyve VMs:
@@ -256,6 +284,7 @@
vm1
where the bhyve VM named "vm1" has three virtual NICs:
+
* A virtio-net NIC which uses a traditional TAP device as a backend.
The TAP backend is implemented in userspace, as a part of bhyve.
* A virtio-net NIC which uses an host netmap VALE port as backend. The
@@ -265,13 +294,12 @@
implemented as part of the netmap subsystem.
-
-
======================= Useful links ==============================
- * [0] http://info.iet.unipi.it/~luigi/netmap/
- * [1] https://wiki.freebsd.org/SummerOfCode2016/PtnetDriverAndDeviceModel#preview
- * [2] https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/
- * [3] https://github.com/luigirizzo/netmap
- * [4] https://github.com/vmaffione/qemu/tree/ptnet
+ * [0] http://info.iet.unipi.it/~luigi/papers/20160613-ptnet.pdf
+ * [1] http://info.iet.unipi.it/~luigi/netmap/
+ * [2] https://wiki.freebsd.org/SummerOfCode2016/PtnetDriverAndDeviceModel#preview
+ * [3] https://svnweb.freebsd.org/socsvn/soc2016/vincenzo/
+ * [4] https://github.com/luigirizzo/netmap
+ * [5] https://github.com/vmaffione/qemu/tree/ptnet
More information about the svn-soc-all
mailing list