230 likes | 382 Views
Genesis Kernel on IXP1200. Stephen Chou Michael Kounavis Andrew Campbell John Vicente Columbia University. programming a network processor-based router. architectural constraints. resource constraints. performance constraints. binding policy/methods. time scale. complexity.
E N D
Genesis Kernel on IXP1200 Stephen Chou Michael Kounavis Andrew Campbell John Vicente Columbia University
programming a network processor-based router architectural constraints resource constraints performance constraints binding policy/methods time scale complexity
StrongARM Core PCI PCI SRAM SRAM SDRAM SDRAM IX Bus Interface Microengines NPs and general-purpose processors
IXP1200 microengine • 4 contexts • 128 General Purpose Registers (GPRs) divided into Banks A and B • 128 Address Registers • read and write transfer registers • SDRAM and SRAM • addressing modes • absolute • context relative
programming the data path Code Granularity Fine grain Coarse grain Code Synthesis Dynamic binding Monolithic Loader Scripting Complexity? High ?? Low Flexibility? High High Low Reusability? High Low
dynamic binding issues • headroom limitations • register space and state management • choice of the binding method • data path admission control • processor handoffs • instruction store limitation
binding methods • dispatch loop • MicroACE Extensions of the ACE framework in Intel IXP SDK 2.0 • nested if-then-else on global binding state for determining the next code module • vector table • table (stored in fast memory) of pointers to code modules • code morphing • used by NetBind
entry point entry point input argument input argument input argument input argument input argument input argument immed_w0[arg1,0x0420] immed_w1[arg1, 0x0500] exit_point#: br[entry_point2#] exit point exit point exit point exit_point#: br[entry_point1#] .tmd module .tmd module .tmd module .tmd module entry point entry point entry_point1#: input arguments global variables entry points exit points input arguments global variables entry points exit points input arguments global variables entry points exit points input arguments global variables entry points exit points immed_w0[arg2,0x3300] immed_w1[arg2,0x0000] exit point exit point exit_point#: br[entry_point2#] entry point entry point entry_point2#: immed_w0[arg2,0x0200] immed_w1[arg2,0x0400] exit point exit point After Binding NetBind code space + immed_w0[arg1,0x0000] immed_w1[arg1, 0x0000] exit_point0#: br[0] exit_point1#: br[0] entry_point1#: immed_w0[arg2,0x0000] immed_w1[arg2,0x0000] exit_point1#: br[0] entry_point2#: immed_w0[arg2,0x0000] immed_w1[arg2,0x0000] Before Binding
NetBind state space pipeline #2 argument registers (addresses:9-12) shared absolute registers (addresses: 13-15) register space algorithm #1 algorithm #2 algorithm #3 component #1 component #2 component #3 pipeline #1 pipeline registers (addresses:0-8) pipeline registers SRAM SDRAM Scratchpad memory space packet buffers routing table MIB, performance stats forwarding table
virtual networks on demand virtual network physical network
programming environment state control plane data path routelet: virtual router binding interface base metabus routelet state control unit spawning controller datapath controller allocation controller composition controller forwarding engine output port input port
Genesis Kernel (GK) 1.0 architecture algorithms binding interface base component storage profiling scripts metabus script parser control plane routelet state naming service spawning controller datapath controller composition controller allocation controller loader cp binder admission controller forwarding engine output port input port data path netbind
routlet profiling script routelet state virtual links mappings routing table entries module listing component bindings forwarding engine forwarding engine output port output port input port input port spawning a routelet control plane spawning controller composition controller allocation controller datapath controller spawning cp binder routing mgr admission controller NetBind IXP datapath VN Demultiplexer capacity arbitrator packets data path
data path specifications forwarding engines virtual: router specification input ports output ports pipelines network processor specification components symbols exit point global variable input argument physical: IXP1200 realization entry point transport modules
dynamic binding in GK network processor related specification datapath constructor transport modules (.tmd files) StrongARM Core IXP1200 related specification datapath admission control binder microengines
Genesis Kernel status • NetBind Code release • www.comet.columbia.edu/genesis/netbind • Genesis Kernel (GK) v1.0 developed • datapaths implemented on IXP1200 • Genesis Developer Workbench front-end • Genesis testbed consisting of 15 IXP1200 evaluation platforms • Release March 2002
Genesis publications • "The Genesis Kernel: A Programming System for Spawning Network Architectures", JSAC, March 2001. • “Sphere: A Binding Model and Middleware for Routing Protocols “, OPENARCH' 01, April 2001. • "Netbind: A Binding Tool for Constructing Data Paths in Network Processor-Based Routers", OPENARCH’02, June 2001.