ETD system

Electronic theses and dissertations repository


Tesi etd-09092015-105701

Thesis type
Tesi di laurea specialistica
Porting of the Netmap framework to Windows operating system
Corso di studi
relatore Prof. Rizzo, Luigi
relatore Prof. Lettieri, Giuseppe
Parole chiave
  • network performance
  • kernel
  • driver
  • windows
  • netmap
Data inizio appello
Riassunto analitico
Netmap is a framework for high speed packet I/O that can be used by user-space
programs needing a boost of throughput performances compared to the ones achievable
using the standard network stack provided by a general purpose operating system.
A standard network stack presents high performance limitations when the packet rate
starts to increase, for example while trying to use a 10Gbit/s interface at its full speed; the performances are capped by the overhead introduced by the various layers present in the
stack, per-packet processing operations and system calls. Using Netmap an application
doesn't encounters these issues, because the framework it's designed to bypass the OS
network stack as much as possible, and to limit the number of system calls from user
space. Other than these two design specifications, various boosting techniques are used to
decrease per-packet processing cost.
This approach dramatically increases the overall performances of the packet I/O speed,
making possible to achieve line rate even with small packets.
The objective of this thesis has been to port the Netmap framework from FreeBSD and
Linux to Windows operating system.
Given that the core of the code is written to be platform independent, one of the main
focuses of this work has been to develop the port in a non-intrusive way: for the code to
be compliant with the Windows kernel specifics, some headers and platform-specific
sources has been created to remap the original FreeBSD functions and types already
Under Windows OS, the design choice led to divide the Netmap framework in two
distinct modules: a ‘core’ module, and an NDIS 6 Lightweight Filter module. The core
module is the one containing all the logic that stands in the very basis of the framework.
Moreover, is the point of access for user-space applications that want to use the Netmap framework. The NDIS module covers the features needed to use any real world
network interface card present in a system with Netmap: this is made possible because this
sub-family of kernel modules is designed to be attached between the miniport level and
the protocol level of the Windows NDIS network stack. By operating at this level of the
network stack, this type of kernel module has the ability to intercept network frames
arriving from the OS and from installed NICs, and to inject user-generated frames into
installed NICs or into the OS data path.
In addition to the Netmap kernel modules, the packet-gen user-space application has
also been ported to Windows: pkt-gen is an software provided with the Netmap suite used
to test the speed of a network link by injecting packets as fast as possible.
The port of the kernel modules has been made using Microsoft Visual Studio in
conjunction with the Driver Development Kit (DDK), freely available and distributed by
The port of the user-space application has been done with the support of Cygwin, a
DLL that provides a set of API to emulate a POSIX compliant environment inside a
Windows machine: moreover Cygwin provides a set of headers used to build POSIX
compliant applications and a shell-like terminal window where POSIX programs like the
GCC compiler and MAKE can be run.
Even though POSIX compliant kernels and the Windows kernel have little to none in
common, the port has been successfully completed: furthermore the performances shown
during the tests on Windows, confirm that Netmap helps in enhancing the speed of packet
I/O respect of using the standard network stack.