Piglet
Piglet uses one or more processors in a multiprocessor system to run
an active kernel. By making the kernel active, rather than
it being passive as is common in conventional operating systems,
Piglet is able to use much lower overhead mechanisms for communication
with both applications and devices. Such an architecture appears
particularly beneficial in workloads with a high proportion of I/O,
hence I am currently investigating the use of Piglet as a network
appliance OS.
The current incarnation of the Piglet architecture, as described
above, is the basis of my Ph.D. thesis research. This architecture
represents a generalisation of the original Piglet model, focusing on
the active kernel structure and asynchronous service
invocation rather than functional division.
The thesis proposal below provides the most in-depth description of
this architecture and future directions for Piglet, as well as a
detailed dicussion of the concept of operating system
intrusion. The technical report is a condensed version of the
proposal, the primary difference being more in-depth coverage of
related and future work in the proposal.
Piglet was originally conceived of to provide a similar capability to
intelligent I/O devices, namely the capability to logically associate
processing capacity with I/O functions. Rather than relying on
specialised hardware, the goal was to utilise commodity SMP systems to
provide I/O processors.
This architecture, originally known as AsyMOS, and a prototype
implementation were described in a paper published at OPENARCH '98.
The second paper, published at the 1998 SIGOPS European
Workshop gives an expanded description of functional
division and describes one example application, provision of QoS
guarantees on a network device. A second example application, an
MPEG-1 decoder implemented as a Piglet service is described in the
very short (4 pages) NOSSDAV
'98 paper (listed first).
A few years after completing the Ph.D. thesis Jonathan Smith and I
revisiteed our initial idea of using one or more cores of a multi-core
and/or multi-processor system exclusively for I/O. We combined some
of the technical concepts from the Ph.D. thesis with the original idea
of functional division and coined the term Lightweight Network
Kernel (LiNK) for this model of a dedicated network I/O
processing kernel. A paper describing LiNK was presented at the first
ACM/IEEE Symposium on Architectures for Networking and
Communication Systems (ANCS) in 2005.
Jetstream
This is a paper that I co-authored with Aled Edwards whilst working as a
student at Hewlett-Packard Labs, Bristol. It was published in the
Proceedings of SIGCOMM
'95.
The title pretty much says it all about the paper - the design and
implementation of a single-copy TCP stack, running in user-space on the HP-UX
9.01 variant of Unix. Most of the paper is a description of the structure of
the implementation but there are also results for throughput and processor
usage, and conclusions drawn from the project.
Post-Penn Efforts
I graduated from the University of Pennsylvania with a Ph.D. in May
2001. From January 2001 to end October 2003 I worked at Vanu, Inc., a
leading edge company in software define radio (SDR). I had a couple
of different roles, culminating in a year and a half as V.P. of
Engineering. From November 2003 until June 2006 I was at Princeton
University as a member of research staff in the Computer Science
Dept., working on the PlanetLab project. In July 2006 I returned to
Vanu, Inc., where I stayed a little over 3 years, the last two as
Chief Technology Officer.
Since November 2009 I have beeen employed at Juniper Networks as a
Technology Architect in the Strategic Alliances group. I work closely
with Juniper's strategic partners in the service provider space,
primarily Nokia Siemens Networks and Ericsson.
Vanu, Inc. (Phase 1)
At Vanu I worked on a number of software radio projects, where I
applied my systems and networking experience to the overall system
architecture. A lot of our work in the early days was
U.S. Government funded, both DARPA and NSF. One of the most
interesting projects, sponsored as part of the JTRS program, was the
design and implementation of RDL, Radio Description Language,
a language and runtime system for constructing software defined
radios. The initial version was built using a combination of a Java
runtime system for high-level application logic, system control and
modular radio composition, and C++ implementations of high-performance
signal processing modules, all glued together using CORBA. A second,
more streamlined design was rearchitected to target embedded systems
and thus written in C for a smaller footprint.
Princeton University and PlanetLab
Operating System Support
for Planetary-Scale Network Services
USENIX Symposium on Networked Systems Design and Implementation,
2004. March 2004, San Francisco, CA.
The Seven Deadly Sins of
Distributed Systems (also
html)
First Workshop on Real, Large Distributed Systems. December 2004,
San Francisco, CA.
Privileged Operations in a
Virtualised System Environment (longer Operating Systems
Review
version)
USENIX Annual Technical Conference, 2005. April 2005, Anaheim, CA.
- Experiences Implementing
PlanetLab
USENIX Symposium on Operating Systems Design and Implementation,
2006. November 2006, Seattle, WA.
Vanu, Inc. (Phase 2)
I rejoined Vanu, Inc. in July 2006 — wanted to get back to a
start-up company environment and Vanu was doing well at the time. My
initial role on returing was Director of Advanced Development, leading
various special projects outside the main thrust of product
development. This included working with a couple of partners on a
very interesting trial of a GSM distributed antenna system in the
Boston area, and a project for U.S. Army Special Operations Command
(SOCOM) to integrate Type 1 secure voice devices into a portable GSM
basestation.
In October 2007 I took on the role of Chief Technology Officer and led
the company's R&D efforts: early analysis of 3G (UMTS/HSPA) and 4G
(LTE) design and implementation in the Vanu SDR architecture. I also
wrote a number of invited articles on SD, e.g., this one: