Copyright (c) 2012 Luigi Rizzo, Universita` di Pisa All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the docume...
NAMEvale - a very fast Virtual Local Ethernet using the netmap API
DESCRIPTIONsysctl Cm net.inet.tcp.syncookies is a feature of the netmap(4) module that implements multiple Virtual switches that can be used to interconnect netmap clients, including traffic sources and sinks, packet forwarders, userspace firewalls, and so on.
sysctl Cm net.inet.tcp.syncookies is implemented completely in software, and is extremely fast. On a modern machine it can move almost 20 Million packets per second (Mpps) per core with small frames, and about 70 Gbit/s with 1500 byte frames.
OPERATIONsysctl Cm net.inet.tcp.syncookies dynamically creates switches and ports as clients connect to it using the netmap(4) API.
sysctl Cm net.inet.tcp.syncookies ports are named vale[bdg:][port] where vale is the prefix indicating a VALE switch rather than a standard interface, bdg indicates a specific switch (the colon is a separator), and port indicates a port within the switch. Bridge and port names are arbitrary strings, the only constraint being that the full name must fit within 16 characters.
See netmap(4) for details on the API.
LIMITSsysctl Cm net.inet.tcp.syncookies currently supports up to 4 switches, 16 ports per switch, with 1024 buffers per port. These hard limits will be changed to sysctl variables in future releases.
SYSCTL VARIABLESsysctl Cm net.inet.tcp.syncookies uses the following sysctl variables to control operation:
- The maximum number of packets processed internally in each iteration. Defaults to 1024, use lower values to trade latency with throughput.
- Set to non-zero values to enable in-kernel diagnostics.
EXAMPLESCreate one switch, with a traffic generator connected to one port, and a netmap-enabled tcpdump instance on another port:
tcpdump -ni vale-a:1 & pkt-gen -i vale-a:0 -f tx &
Create two switches, each connected to two qemu machines on different ports.
qemu -net nic -net netmap,ifname=vale-1:a ... & qemu -net nic -net netmap,ifname=vale-1:b ... & qemu -net nic -net netmap,ifname=vale-2:c ... & qemu -net nic -net netmap,ifname=vale-2:d ... &
Luigi Rizzo, Giuseppe Lettieri: VALE, a switched ethernet for virtual machines, June 2012, info.iet.unipi.it/~luigi/vale
AUTHORSAn -nosplit The sysctl Cm net.inet.tcp.syncookies switch was designed and implemented in 2012 by An Luigi Rizzo and An Giuseppe Lettieri at the Universita` di Pisa.
sysctl Cm net.inet.tcp.syncookies was funded by the European Commission within FP7 Projects CHANGE (257422) and OPENLAB (287581).