VALE, a Virtual Local Ethernet

Luigi Rizzo, Giuseppe Lettieri, Università di Pisa

Documentation: The VALE paper CoNEXT'12,Dec.10-13, Nice, France
Slides: CoNEXT 2012 talk
Bootable image: PicoBSD image amd64 (20120618)
Source code: Netmap/VALE source (20120813), FreeBSD and Linux


Project summary (posted 20130214)

VALE is a software Virtual Local Ethernet whose ports are accessible using the netmap API. Designed to be used as the interconnect between virtual machines (or as a fast local bus), it works as a learning bridge and supports speeds of up to 20 Mpps with short frames, and an aggregate 70 Gbit/s with 1514-byte packets.


  • A CoNEXT'12 paper presents the VALE architecture and details and performance measurements.
  • A Feb.2013 paper shows some recent results with QEMU-KVM using VALE as a backend (reaching 8-900 Kpps between two guests using UDP sockets, and over 5 Mpps with netmap clients; this is over an emulated e1000).


VALE is implemented as a small extension of the netmap module, and is available for FreeBSD and Linux. The source code includes a backend for qemu and KVM, so you can use VALE to interconnect virtual machines launching them with
  • qemu -net nic -net netmap,ifname=vale0 -m 512 ...
  • qemu -net nic -net netmap,ifname=vale1 -m 512 ...
  • ...

(the "-m 512" is because you need a large amount of memory if you want to run multiple instances of the sender and receiver)

datafiles/vale-bridge.gif Processes can talk to a VALE switch too, so you can use the pkt-gen or bridge tools that are part of the netmap distribution, or even the pcap.c module that maps libpcap calls into netmap equivalents. This lets you use VALE for all sort of pcap-based applications.


For testing, you can run the picobsd image linked on the top of the page on your machine, and then in two different shells run
  • pkt-gen -i vale-foo # this is traffic receiver
  • pkt-gen -i vale-bar -f tx # this is a traffic generator

to see how quickly you can send and receive traffic. Interface names (vale-foo, vale-bar, ...) must start with "vale" and be less than 16 characters, otherwise they are completely arbitrary. You can use pkt-gen options to change source and destination addresses, and run multiple instances to see how traffic goes through.

Qemu support

The freebsd sources, in the examples/ directory, contain a qemu patch (patch-zz-netmap-1) and a qemu backend (qemu-netmap.c, to be put in work/qemu-1.0.1/net/) that you can use to build a VALE-enabled version of qemu.


  • 20120525: first preview release
  • 20120608: The VALE paper and source release
  • 20120813: Revised source, support for multiple bridges
  • 20121026: VALE paper final copy (CoNEXT'12, Nice, France)