Melange: creating a "functional" internet

  • Authors:
  • Anil Madhavapeddy;Alex Ho;Tim Deegan;David Scott;Ripduman Sohan

  • Affiliations:
  • University of Cambridge and XenSource Inc.;University of Cambridge and Arastra Inc.;University of Cambridge and XenSource Inc.;XenSource Inc.;University of Cambridge

  • Venue:
  • Proceedings of the 2nd ACM SIGOPS/EuroSys European Conference on Computer Systems 2007
  • Year:
  • 2007

Quantified Score

Hi-index 0.02

Visualization

Abstract

Most implementations of critical Internet protocols are written in type-unsafe languages such as C or C++ and are regularly vulnerable to serious security and reliability problems. Type-safe languages eliminate many errors but are not used to due to the perceived performance overheads. We combine two techniques to eliminate this performance penalty in a practical fashion: strong static typing and generative meta-programming. Static typing eliminates run-time type information by checking safety at compile-time and minimises dynamic checks. Meta-programming uses a single specification to abstract the low-level code required to transmit and receive packets. Our domain-specific language, MPL, describes Internet packet protocols and compiles into fast, zero-copy code for both parsing and creating these packets. MPL is designed for implementing quirky Internet protocols ranging from the low-level: Ethernet, IPv4, ICMP and TCP; to the complex application-level: SSH, DNS and BGP; and even file-system protocols such as 9P. We report on fully-featured SSH and DNS servers constructed using MPL and our OCaml framework Melange, and measure greater throughput, lower latency, better flexibility and more succinct source code than their C equivalents OpenSSH and BIND. Our quantitative analysis shows that the benefits of MPL-generated code overcomes the additional overheads of automatic garbage collection and dynamic bounds checking. Qualitatively, the flexibility of our approach shows that dramatic optimisations are easily possible.