Skip to content

A high performance container-based NFV platform from GW and UCR.

License

Notifications You must be signed in to change notification settings

kevindweb/openNetVM

 
 

Repository files navigation

openNetVM - with Shared CPUs

WARNING

This is an EXPERIMENTAL version of OpenNetVM. It allows multiple NFs to run on a shared core. In "normal" OpenNetVM, each NF will poll its RX queue for packets, monopolizing the CPU even if it has a low load. This branch adds a semaphore-based communication system so that NFs will block when there are no packets available. The NF Manger will then signal the semaphore once one or more packets arrive.

This code allows you to evaluate resource management techniques for NFs that share cores, however it has not been fully tested and should be considered unstable and unsupported.

For a description of how the code works, see the paper Flurries: Countless Fine-Grained NFs for Flexible Per-Flow Customization by Wei Zhang, Jinho Hwang, Shriram Rajagopalan, K. K. Ramakrishnan, and Timothy Wood, published at Co-NEXT 16. Note that this code does not contain the full Flurries system, only the basic support for shared-CPU NFs.

Usage / Known Limitations:

  • All code for sharing CPUs is within #ifdef INTERRUPT_SEM blocks. This macro is defined in onvm/onvm_nflib/onvm_common.h
  • When enabled, you can run multiple NFs on the same CPU core with much less interference than if they are polling for packets
  • Note that the manager threads all still use polling
  • This code does not provide any particular intelligence for how NFs are scheduled or when they wakeup/sleep
  • Currently ONVM only supports a max of 16 NFs. This can be adjusted by changing macros in onvm/onvm_nflib/onvm_common.h
  • Current code has a bug where if multiple NFs start at the exact same time the manager will not correctly assign IDs. You may need to stagger NF startup to avoid this.
  • Killing the manager will not correctly kill all NFs (since they are blocked on semaphore and don't get the shutdown message). You must kill NFs manually with ctrl-c.

WARNING

About

openNetVM is a high performance NFV platform based on Intel DPDK and Docker containers. openNetVM is SDN-enabled, allowing the network controller to provide rules that dictate what network functions need to process each packet flow.

openNetVM is an open source version of the NetVM platform described in our NSDI 2014 paper, released under the BSD license.

Installing

To install openNetVM, please see the openNetVM Installation guide for a thorough walkthrough.

Using openNetVM

openNetVM can be used in a variety of ways. To get started with some examples, please see the Example Uses guide

Creating NFs

The NF Development guide will provide what you need to start create your own NFs.

Dockerize NFs

NFs can be run inside docker containers, with the NF being automatically or hand started. For more informations, see our Docker guide.

About

A high performance container-based NFV platform from GW and UCR.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 56.1%
  • Python 33.7%
  • Shell 4.3%
  • JavaScript 2.8%
  • Makefile 1.5%
  • HTML 0.5%
  • Other 1.1%