Index

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)

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.

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.