Network
systems—designed to support packet processing applications efficiently—must
meet two, often conflicting, requirements: (1) support
a large number of high-bandwidth links, and hence large system throughputs; and
(2) offer a wide range of flexible, upgradeable services in addition to
conventional bridging and forwarding functions. Traditionally, telecom and
datacom equipment vendors have used general-purpose processors or
fixed-function, application-specific integrated circuits (ASICs) to implement
network systems. Because of their inherent programmability, general-purpose
computing platforms meet the flexibility requirements of modern network systems.
However, they fail to meet the performance requirements of modern network
systems; in fact, the inter-arrival times of packets in modern networks (e.g.,
operating at OC-192 interface speeds) are approaching the inherent I/O and
memory access latencies observed in general-purpose computing systems. Network
systems designed using ASICs, on the other hand, use special-purpose hardware
to meet the performance requirements of modern networks; however, they often
fail to meet the flexibility requirements. To meet simultaneously the demands
of high performance, flexibility, and economy, an alternative to
general-purpose processors and ASICs, referred to as network
processors (NPUs), has emerged. Network processors, much like general-purpose
processors, are programmable. However, their designs include several innovative
architectural features to enable the processing of packets at high rates.
Network processors, when combined with general-purpose processors,
co-processors, and programmable logic elements, create
a powerful platform for designing network systems.
In this course, we
will motivate the need for network processors by analyzing the requirements and
characteristics of a variety of networking applications and systems being
deployed in different parts of the network infrastructure. We will survey
network processors from prominent vendors, and describe the architectural
approaches and design tradeoffs in designing network processors. Then, we will
discuss the challenges in programming networks systems; we will highlight the
programming issues that arise because of the heterogeneous, multi-processor
nature of network systems. We will discuss challenges in designing programming languages, compilers, and
operating systems that will make next-generation of network systems as easy to
design and program as today's workstations and servers.
Most
courses offered in undergraduate and graduate program today can be thought of
as tools-oriented courses; in these courses, students learn about tools that
they can use to solve problems. The design and implementation of most complex
systems, in practice, require tools and techniques from many related areas to
be brought together in non-trivial ways. Further, in many cases, the complexity
of these problems requires the tools and techniques to be enhanced
significantly. Unfortunately, conventional tools-oriented courses fail to
expose students to these issues. This course is an example of a complementary,
but an inherently different, class of problem-oriented courses. In this
course, we will focus on a specific problem (namely, network system design and
implementation), and illustrate how a variety of tools and techniques from
language design, compilers, operating systems, and architecture can be brought
together to design high-throughput network systems.