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