Difference between revisions of "The SPP Tutorial"

From ARL Wiki
Jump to navigationJump to search
Line 14: Line 14:
 
But these two pages (like the other two) are designed so that you can get hands-on experience by following the prescribed steps.
 
But these two pages (like the other two) are designed so that you can get hands-on experience by following the prescribed steps.
  
('''Note:''' Scan the [[Internet Scale Overlay Hosting]] page if you have not already done so paying particular attention to the parts describing the role of the GPE and the NPE.)
+
('''Note:''' Scan the [[Internet Scale Overlay Hosting]] page if you have not already done so paying particular attention to the parts describing the role of the GPE (''General-purpose Processing Engine'') and the NPE (''Network Processor Engine'').
 +
Keep in mind that in a high-speed implementation, the SPP would be configured so that the NPE handled most data packets (the ''fastpath'') leaving the GPE to handle control and exception packets (the ''slowpath'').)
  
 
This page will walk you through the preliminary steps required to get setup to use an SPP; e.g., getting an SPP account and adding SPP nodes to your slice.
 
This page will walk you through the preliminary steps required to get setup to use an SPP; e.g., getting an SPP account and adding SPP nodes to your slice.
Line 35: Line 36:
 
Seeing how it is done for the IPv4 code option will give you a better understanding of how to design filters for your metarouter.
 
Seeing how it is done for the IPv4 code option will give you a better understanding of how to design filters for your metarouter.
  
[[Developing a New Metanet]] walks you through an example of developing a simple code option.
+
[[Developing a New Metanet]] walks you through an example of how to develop a simple code option.
It shows you how to build a GPE-only metarouter and how it would be transformed to use both an NPE and a GPE.
+
It shows you how to build a GPE-only metarouter for a simple protocol and discusses how that code might be transformed to use both an NPE and a GPE.
  
XXX HERE XXX
+
== Requirements ==
  
[[ Image:SPP-components.png | thumb | right | 400px | SPP Components (LC, CP, GPE, NPE) ]]
+
This tutorial assumes that you will be using a Linux operating system and have access to standard Unix tools.
 +
In particular, you will need:
  
Recall from [[Internet Scale Overlay Hosting]] that an advanced SPP developer writes code for a ''General-purpose Processing Engine'' (GPE) and a ''Network Processor Engine'' (NPE).
+
# An environment where you can compile code for a Linux operating system
Typically, a developer configures the SPP so that the NPE handles most data packets (the ''fastpath'') while the GPE handles control and exception packets (the ''slowpath'').
+
# An OpenSSH executable
The configuration process loads code into the GPE and NPE and installs filters in the ''Line Card'' (LC) to direct packets to the GPE or NPE.
+
# The latest version of Java to run some monitoring software and traffic generators
 
 
In practice, we anticipate that most developers will write a prototype version of their router software using only the GPE and work with a SPP developer to transform the performance-critical parts of their GPE code to run on the NPE because programming an NPE is quite different than programming a general-purpose processor.
 
That is, most developers will write a ''GPE-only prototype'' which captures the logic of their router software and pass this design to an advanced SPP developer to create a high-speed NPE-GPE version.
 
 
 
There are four main wiki pages in [[The SPP Tutorial]]:
 
  
* [[The SPP Tutorial]]: is this page which gives an overview of the other tutorial pages and covers administrative issues such as creating an account and getting a slice.
+
=== Compiling ===
* [[The Hello GPE World Tutorial]]: describes how to use the GPE to create a GPE-only prototype.
 
* [[The IPv4 Code Option Tutorial]]: describes how to use the IPv4 code option which uses an NPE to forward IPv4 packets and a GPE process packets terminating at the router (e.g., local delivery and exceptions).
 
* [[Writing A Simple Code Option Tutorial]]: discusses how to develop a new code option.
 
  
[[The Hello GPE World Tutorial]] describes how to get information about ''interfaces''; how to create ''slowpath endpoints'' for communicating with a process running on a GPE; and how to make a resource reservation.
+
You can use almost any Intel host running a recent version of Linux to compile code for the GPE.
This tutorial will help you understand how to write a simple packet-processing program that will run on a GPE; i.e., a GPE-only prototype.
+
But if you think this is an issue, you can always try to match the version of Linux and glibc on a GPE.
[[The IPv4 Code Option Tutorial]] describes a simple example of using the IPv4 code option.
+
You can get this information after you ''ssh'' to a GPE (described later in [[The Hello GPE World Tutorial]]) by entering:
This tutorial explains how to create ''fastpath endpoints'', ''meta-interfaces'', ''packet queues'' and ''IPv4 filters''.
 
Your code option can directly use all of these concepts except for IPv4 filters.
 
However, your code option will need to use filters to direct incoming packets to packet queues.
 
Seeing how it is done for the IPv4 code option will give you an understanding of how to design your filters.
 
[[Writing A Simple Code Option Tutorial]] goes through an example of a simple code option in which we first build a GPE-only prototype and how it would be transformed to use both an NPE and a GPE.
 
  
== Requirements ==
+
<pre>
 +
    uname -sr          # get version of Linux
 +
    ldd --version      # get version of glibc
 +
</pre>
  
This tutorial assumes that you are using a Linux operating system and have access to standard Unix tools.
+
=== OpenSSH Executable ===
In particular, you will need:
 
  
# An environment where you can compile code for a Linux operating system
+
''OpenSSH'' is a suite of open source utilities using the ''ssh'' protocol.
# An OpenSSH executable
+
Although you don't have to specifically use the OpenSSH suite, the tutorial examples assume that the ''ssh'' tools are from OpenSSH.
# The latest version of Java to run some monitoring software and traffic generators
 
  
 
=== The Java Run-time Environment (JRE) ===
 
=== The Java Run-time Environment (JRE) ===
Line 88: Line 78:
 
==== MAC Users ====
 
==== MAC Users ====
  
Follow this link [[Java Run-time Environment for the MAC OS]] for instructions.
+
Follow the instructions at [[Java Run-time Environment for the MAC OS]].
  
 
== Getting Started ==
 
== Getting Started ==
Line 110: Line 100:
  
 
=== Getting an SPP Account ===
 
=== Getting an SPP Account ===
 +
 +
XXX HERE XXX
  
 
* Create RSA key-pair
 
* Create RSA key-pair
Line 121: Line 113:
 
** upload RSA key (sidebar "Users => My Account")
 
** upload RSA key (sidebar "Users => My Account")
  
What if you are a PI???
+
>>> What should PIs and Technical Leads do??? <<<
  
 
== Adding SPP Nodes to Your SPP Slice ==
 
== Adding SPP Nodes to Your SPP Slice ==

Revision as of 22:03, 26 February 2010

Template:Under Construction

Introduction

This tutorial page and The Hello GPE World Tutorial page are designed to give you simple, step-by-step usage examples that will allow you to get started quickly. They also contain links to a number of auxilliary pages that will allow you to try more complex examples. Two other wiki pages complete the tutorial: Using the IPv4 Metanet and Developing a New Metanet.

Do you have to read all four pages before using the SPPs? No. But you can't do much unless you read this page and The Hello GPE World Tutorial page. But these two pages (like the other two) are designed so that you can get hands-on experience by following the prescribed steps.

(Note: Scan the Internet Scale Overlay Hosting page if you have not already done so paying particular attention to the parts describing the role of the GPE (General-purpose Processing Engine) and the NPE (Network Processor Engine). Keep in mind that in a high-speed implementation, the SPP would be configured so that the NPE handled most data packets (the fastpath) leaving the GPE to handle control and exception packets (the slowpath).)

This page will walk you through the preliminary steps required to get setup to use an SPP; e.g., getting an SPP account and adding SPP nodes to your slice.

The Hello GPE World Tutorial will show you how to use the GPE to create a GPE-only prototype. It will show you how to get information about interfaces; how to create slowpath endpoints for communicating with a process running on a GPE; and how to make a resource reservation. It will show you how to write a simple packet-processing program that will run on a GPE. This program can be extended to create a GPE-only prototype of a simple metanet router.

By this point, you should be able to do simple SPP experiments that will help you develop your own GPE-only metanet router software. Although this GPE-only software can not take full advantage of the SPP because it doesn't use an NPE, most users will not be writing code for NPEs because programming an NPE requires knowledge about IXP network processor programming and the SPP substrate layer. In practice, we anticipate that most developers will write a GPE-only version of their metarouter and work with an advanced SPP developer to transform the performance-critical parts of their GPE-only code to run on the NPE. That is, most developers will write a GPE-only program which captures the logic of their metarouter and pass this design to an advanced SPP developer who will create a high-speed NPE-GPE version.

The IPv4 Metanet Tutorial describes how to use the IPv4 metanet code option which uses an NPE to forward IPv4 packets and a GPE to process packets terminating at the router (e.g., local delivery and exceptions). This page will walk you through an example of how to use the IPv4 metanet code option. It explains how to create fastpath endpoints, meta-interfaces, packet queues and IPv4 filters. You can directly use all of these concepts in developing your own metanet except for IPv4 filters. However, your code option will need to use filters to direct incoming packets to packet queues. Seeing how it is done for the IPv4 code option will give you a better understanding of how to design filters for your metarouter.

Developing a New Metanet walks you through an example of how to develop a simple code option. It shows you how to build a GPE-only metarouter for a simple protocol and discusses how that code might be transformed to use both an NPE and a GPE.

Requirements

This tutorial assumes that you will be using a Linux operating system and have access to standard Unix tools. In particular, you will need:

  1. An environment where you can compile code for a Linux operating system
  2. An OpenSSH executable
  3. The latest version of Java to run some monitoring software and traffic generators

Compiling

You can use almost any Intel host running a recent version of Linux to compile code for the GPE. But if you think this is an issue, you can always try to match the version of Linux and glibc on a GPE. You can get this information after you ssh to a GPE (described later in The Hello GPE World Tutorial) by entering:

     uname -sr          # get version of Linux
     ldd --version      # get version of glibc

OpenSSH Executable

OpenSSH is a suite of open source utilities using the ssh protocol. Although you don't have to specifically use the OpenSSH suite, the tutorial examples assume that the ssh tools are from OpenSSH.

The Java Run-time Environment (JRE)

Most of the tutorial can be done without the JRE. But it will be helpful in the IPv4 Code Option Tutorial.

First, determine if you already have JRE 1.6.0 or higher. Enter the following in a command-line window: java -version. If the response says that you are already running some version that is atleast 1.6.0, you can skip this step.

If you need to install the JRE, go to the Java download page http://java.com/en/download/manual.jsp and download the latest JRE for your platform by following the instructions posted at the Sun site. Note: You only need to download the JRE (less than 20 MB), not the entire JDK (Java Development Kit).

MAC Users

Follow the instructions at Java Run-time Environment for the MAC OS.

Getting Started

You must get an SPP account before you can use the SPPs. The procedure is similar to the one used in PlanetLab except that SPP slices are administered through a special PLC (PlanetLab Central) site at http://drn06.arl.wustl.edu/. But the following PlanetLab procedure still holds:

  • A Principle Investigator (PI) must create a slice for you.
  • The PI must assign you to that slice.
  • Then, you can add SPP nodes to your slice.

In a typical scenario, you (as an ordinary PlanetLab user) will use both normal PlanetLab nodes and SPP nodes. This requires that you get assigned both a normal PlanetLab slice and an SPP slice. Once you have been assigned to an SPP slice, you can log into the GPE of an SPP slice like any other PlanetLab node using ssh and develop a socket program as you would for any other PlanetLab node except for a few small differences:

  • An SPP has multiple network interfaces if you want to use more than one interface.
  • You must configure the SPP before you can use it.

The configuration process is fairly straightforward since a user typically customizes an existing configuration script to do the configuration.

Getting an SPP Account

XXX HERE XXX

  • Create RSA key-pair
    • already have one if you have a PlanetLab account
  • Fill out registration form
    • email address important
    • site
    • roles
  • When registration has been accepted and you are assigned to a slice
    • login
    • upload RSA key (sidebar "Users => My Account")

>>> What should PIs and Technical Leads do??? <<<

Adding SPP Nodes to Your SPP Slice

Getting a PlanetLab Account

Adding PlanetLab Nodes to Your PlanetLab Slice

Deploying Software to the SPPs