20.11.2014 Views

Where are NetFPGAs?

Where are NetFPGAs?

Where are NetFPGAs?

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

NetFPGA Tutorial<br />

Tsinghua University – Day 1<br />

Presented by:<br />

James Hongyi Zeng<br />

(Stanford University)<br />

Joshua Lu<br />

(Xilinx China)<br />

Beijing, China<br />

May 15 - 16, 2010<br />

http://NetFPGA.org<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 1 S T A N F O R D U N I V E R S I T Y


Program<br />

• 08:30 - 10:00 Session I<br />

– Introduction<br />

– Background<br />

– Stanford Reference Router<br />

• 10:00 - 10:30 Coffee Break<br />

• 10:30 - 12:00 Session II<br />

– Research with the NetFPGA<br />

– Enhanced Reference Router<br />

• 12:00 - 13:30 Lunch<br />

• 13:30 - 15:00 Session III<br />

– Life of a Packet, Datapath<br />

– Extending the Router - an example<br />

• 15:00 - 15:30 Coffee Break<br />

• 15:30 - 17:00 Session IV<br />

– Further hardw<strong>are</strong> platforms<br />

– NetFPGA in research and teaching<br />

– Group discussion<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 2 S T A N F O R D U N I V E R S I T Y


Tutorial Outline<br />

• Background<br />

– Introduction<br />

– Basics of an IP Router<br />

– The NetFPGA Platform<br />

• The Stanford Base Reference Router<br />

– Demo1: Reference Router running on the NetFPGA<br />

– Inside the NetFPGA hardw<strong>are</strong><br />

– Breakneck introduction to FPGAs and Verilog<br />

– Exercise 1: Build your own Reference Router<br />

• The Enhanced Reference Router<br />

– Motivation: Understanding buffer size requirements in a router<br />

– Demo 2: Observing and controlling the queue size<br />

– Exercise 2: Enhancing the Reference Router<br />

• The Life of a Packet Through the NetFPGA<br />

– Hardw<strong>are</strong> Datapath<br />

– Interface to softw<strong>are</strong>: Exceptions and Host I/O<br />

– Exercise 3: Drop 1 in N Packets<br />

• Concluding Remarks<br />

– NetFPGA 2010 Design Competition<br />

– Using NetFPGA for research and teaching<br />

– Group Discussion<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 3 S T A N F O R D U N I V E R S I T Y


What is the NetFPGA?<br />

Networking<br />

Softw<strong>are</strong><br />

running on a<br />

standard PC<br />

CPU<br />

Memory<br />

PCI<br />

PC with NetFPGA<br />

A hardw<strong>are</strong><br />

accelerator<br />

built with Field<br />

Programmable<br />

Gate Array<br />

driving Gigabit<br />

network links<br />

FPGA<br />

Memory<br />

1GE<br />

1GE<br />

1GE<br />

1GE<br />

NetFPGA Board<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 4 S T A N F O R D U N I V E R S I T Y


NetFPGA = Networked FPGA<br />

A line-rate, flexible, open networking<br />

platform for teaching and research<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 5 S T A N F O R D U N I V E R S I T Y


NetFPGA’s Defining Characteristics<br />

• Line-Rate<br />

– Processes back-to-back packets<br />

• Without dropping packets<br />

• At full rate of Gigabit Ethernet Links<br />

– Operating on packet headers<br />

• For switching, routing, and firewall rules<br />

– And packet payloads<br />

• For content processing and intrusion prevention<br />

• Open-source Hardw<strong>are</strong><br />

– Similar to open-source softw<strong>are</strong><br />

• Full source code available<br />

• BSD-Style License<br />

– But harder, because<br />

• Hardw<strong>are</strong> modules must meeting timing<br />

• Verilog & VHDL Components have more complex interfaces<br />

• Hardw<strong>are</strong> designers need high confidence in specification of modules<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 6 S T A N F O R D U N I V E R S I T Y


Test-Driven Design<br />

• Regression tests<br />

– Have repeatable results<br />

– Define the supported features<br />

– Provide clear expectation on functionality<br />

• Example: Internet Router<br />

– Drops packets with bad IP checksum<br />

– Performs Longest Prefix Matching on destination address<br />

– Forwards IPv4 packets of length 64-1500 bytes<br />

– Generates ICMP message for packets with TTL


Who uses the NetFPGA?<br />

– Teachers<br />

– Students<br />

– Researchers<br />

Who, How, Why<br />

How do they use the NetFPGA?<br />

– To run the Router Kit<br />

– To build modular reference designs<br />

• IPv4 router<br />

• 4-port NIC<br />

• Ethernet switch, …<br />

Why do they use the NetFPGA?<br />

– To measure performance of Internet systems<br />

– To prototype new networking systems<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 8 S T A N F O R D U N I V E R S I T Y


<strong>Where</strong> <strong>are</strong> <strong>NetFPGAs</strong>?<br />

– Over 1,000 users with ~1,000 cards deployed<br />

at ~150 universities in 17 Countries worldwide<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 9 S T A N F O R D U N I V E R S I T Y


NetFPGA Hardw<strong>are</strong> in North America<br />

USA - Jan 2009<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 10 S T A N F O R D U N I V E R S I T Y


NetFPGA Hardw<strong>are</strong> in Europe<br />

EU - Jan 2009<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 11 S T A N F O R D U N I V E R S I T Y


NetFPGA Hardw<strong>are</strong> in Asia<br />

China, Korea, Japan, Taiwan - Jan 2009<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 12 S T A N F O R D U N I V E R S I T Y


NetFPGA Designs<br />

Project (Title & Summary) Base Status Organization Docs.<br />

IPv4 Reference Router 2.0 Functional Stanford University Guide<br />

Quad-Port Gigabit NIC 2.0 Functional Stanford University Guide<br />

Ethernet Switch 2.0 Functional Stanford University Guide<br />

Hardw<strong>are</strong>-Accelerated Linux Router 2.0 Functional Stanford University Guide<br />

Packet Generator 2.0 Functional Stanford University Wiki<br />

OpenFlow Switch 2.0 Functional Stanford University Wiki<br />

DRAM-Router 2.0 Functional Stanford University Wiki<br />

NetFlow Probe 1.2 Functional Brno University Wiki<br />

AirFPGA 2.0 Functional Stanford University Wiki<br />

Fast Reroute & Multipath Router 2.0 Functional Stanford University Wiki<br />

NetThreads 1.2.5 Functional University of Toronto Wiki<br />

URL Extraction 2.0 Functional Univ. of New South Wales Wiki<br />

zFilter Sprouter (Pub/Sub) 1.2 Functional Ericsson Wiki<br />

Windows Driver 2.0 Functional Microsoft Research Wiki<br />

IP Lookup w/Blooming Tree 1.2.5 In Progress University of Pisa Wiki<br />

DFA 2.0 In Progress UMass Lowell Wiki<br />

G/PaX ?.? In Progress Xilinx Wiki<br />

Precise Traffic Generator 1.2.5 In Progress University of Toronto Wiki<br />

Open Network Lab 2.0 In Progress Washington University Wiki<br />

KOREN Testbed ?.? In Progress Chungnam-Korea Wiki<br />

RED 2.0 In Progress Stanford University Wiki<br />

Virtual Data Plane 1.2 In Progress Georgia Tech Wiki<br />

Precise Time Protocol (PTP) 2.0 In Progress Stanford University Wiki<br />

Deficit Round Robin (DRR) 1.2 Repackage Stanford University Wiki<br />

.. And more on http://netfpga.org/foswiki/NetFPGA/OneGig/ProjectTable<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 13 S T A N F O R D U N I V E R S I T Y


Running the Router Kit<br />

User-space development, 4x1GE line-rate forwarding<br />

OSPF BGP<br />

CPU Memory<br />

My Protocol<br />

user<br />

kernel<br />

Routing<br />

Table<br />

PCI<br />

“Mirror”<br />

Fwding<br />

Table<br />

Packet<br />

Buffer<br />

FPGA<br />

IPv4<br />

Router<br />

Memory<br />

1GE<br />

1GE<br />

1GE<br />

1GE<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 14 S T A N F O R D U N I V E R S I T Y


Enhancing Modular Reference Designs<br />

CPU<br />

Memory<br />

PW-OSPF<br />

Java GUI<br />

Front Panel<br />

(Extensible)<br />

Verilog<br />

EDA Tools<br />

(Xilinx,<br />

Mentor, etc.)<br />

PCI<br />

FPGA<br />

Memory<br />

1GE<br />

1GE<br />

1GE<br />

1GE<br />

L3<br />

Parse<br />

IP<br />

Lookup<br />

NetFPGA Driver<br />

1. Design<br />

2. Simulate<br />

1GE<br />

L2 In<br />

3.<br />

Q<br />

Synthesize<br />

Parse Mgmt<br />

4. Download<br />

1GE<br />

My<br />

Block<br />

Out Q<br />

Mgmt<br />

1GE<br />

1GE<br />

Verilog modules interconnected by FIFO interfaces<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 15 S T A N F O R D U N I V E R S I T Y


Creating new systems<br />

CPU<br />

Memory<br />

Verilog<br />

EDA Tools<br />

(Xilinx,<br />

Mentor, etc.)<br />

PCI<br />

FPGA<br />

1GE<br />

1GE<br />

1. Design<br />

NetFPGA 2. Driver Simulate<br />

3. Synthesize<br />

4. Download<br />

My Design<br />

1GE<br />

1GE<br />

Memory<br />

1GE<br />

1GE<br />

(1GE MAC is soft/replaceable)<br />

1GE<br />

1GE<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 16 S T A N F O R D U N I V E R S I T Y


Basic Operation of an IP Router<br />

R3<br />

A<br />

R1<br />

R4<br />

D<br />

B<br />

E<br />

C<br />

R2<br />

Destination<br />

D<br />

Next Hop<br />

R3<br />

R5<br />

F<br />

E<br />

R3<br />

F<br />

R5<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 17 S T A N F O R D U N I V E R S I T Y


A<br />

B<br />

20 bytes<br />

C<br />

What does a router do?<br />

R3<br />

R1<br />

R4<br />

1 4<br />

16 32<br />

Ver HLen T.Service Total Packet Length<br />

Fragment ID<br />

TTL Protocol Header Checksum<br />

R2<br />

Flags<br />

Source Address<br />

Fragment Offset<br />

Destination Destination Address Next Hop<br />

Options D (if any) R3<br />

E<br />

Data<br />

R3<br />

F<br />

R5<br />

R5<br />

D<br />

F<br />

E<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 18 S T A N F O R D U N I V E R S I T Y


What does a router do?<br />

R3<br />

A<br />

R1<br />

R4<br />

D<br />

B<br />

E<br />

C<br />

R2<br />

R5<br />

F<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 19 S T A N F O R D U N I V E R S I T Y


Basic Components of an IP Router<br />

Management<br />

& CLI<br />

Routing<br />

Protocols<br />

Routing<br />

Table<br />

Softw<strong>are</strong><br />

Control Plane<br />

Forwarding<br />

Table<br />

Switching<br />

Hardw<strong>are</strong><br />

Datapath<br />

per-packet<br />

processing<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 20 S T A N F O R D U N I V E R S I T Y


Per-packet processing in an IP Router<br />

1. Accept packet arriving on an incoming link.<br />

2. Lookup packet destination address in the<br />

forwarding table to identify outgoing port(s).<br />

3. Manipulate IP header: e.g., decrement TTL,<br />

update header checksum.<br />

5. Buffer packet in the output queue.<br />

6. Transmit packet onto outgoing link.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 21 S T A N F O R D U N I V E R S I T Y


Generic Datapath Architecture<br />

Header Processing<br />

Data Hdr Data Hdr<br />

Lookup<br />

IP Address<br />

Update<br />

Header<br />

Queue<br />

Packet<br />

IP Address<br />

Next Hop<br />

Forwarding<br />

Table<br />

Buffer<br />

Memory<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 22 S T A N F O R D U N I V E R S I T Y


CIDR and Longest Prefix Matches<br />

<br />

<br />

<br />

<br />

The IP address space is broken into line segments.<br />

Each line segment is described by a prefix.<br />

A prefix is of the form x/y where x indicates the prefix of all<br />

addresses in the line segment, and y indicates the length of<br />

the segment.<br />

e.g. The prefix 128.9/16 represents the line segment<br />

containing addresses in the range: 128.9.0.0 … 128.9.255.255.<br />

128.9.0.0<br />

142.12/19<br />

65/8<br />

128.9/16<br />

0 2 32 -1<br />

2 16<br />

128.9.16.14<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 23 S T A N F O R D U N I V E R S I T Y


Classless Interdomain Routing (CIDR)<br />

128.9.19/24<br />

128.9.25/24<br />

128.9.16/20 128.9.176/20<br />

128.9/16<br />

0 2 32 -1<br />

128.9.16.14<br />

Most specific route = “longest matching prefix”<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 24 S T A N F O R D U N I V E R S I T Y


Techniques for LPM in hardw<strong>are</strong><br />

• Linear search<br />

– Slow<br />

• Direct lookup<br />

– Currently requires too much memory<br />

– Updating a prefix leads to many changes<br />

• Tries<br />

– Deterministic lookup time<br />

– Easily pipelined but require multiple<br />

memories/references<br />

• TCAM (Ternary CAM)<br />

– Simple and widely used but have<br />

lower density than RAM and need more power<br />

– Gradually being replaced by algorithmic methods<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 25 S T A N F O R D U N I V E R S I T Y


An IP Router on NetFPGA<br />

Management<br />

& CLI<br />

Exception<br />

Processing<br />

Routing<br />

Protocols<br />

Routing<br />

Table<br />

Softw<strong>are</strong><br />

Linux user-level<br />

processes<br />

Forwarding<br />

Table<br />

Switching<br />

Hardw<strong>are</strong><br />

Verilog on<br />

NetFPGA PCI board<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 26 S T A N F O R D U N I V E R S I T Y


NetFPGA Router<br />

Function<br />

– 4 Gigabit Ethernet ports<br />

Fully programmable<br />

– FPGA hardw<strong>are</strong><br />

Low cost<br />

Open-source FPGA hardw<strong>are</strong><br />

– Verilog base design<br />

Open-souce Softw<strong>are</strong><br />

– Drivers in C and C++<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 27 S T A N F O R D U N I V E R S I T Y


NetFPGA Platform<br />

Major Components<br />

– Interfaces<br />

• 4 Gigabit Ethernet Ports<br />

• PCI Host Interface<br />

– Memories<br />

• 36Mbits Static RAM<br />

• 512Mbits DDR2 Dynamic RAM<br />

– FPGA Resources<br />

• Block RAMs<br />

• Configurable Logic Block (CLBs)<br />

• Memory Mapped Registers<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 28 S T A N F O R D U N I V E R S I T Y


NetFPGA System<br />

CAD<br />

Tools<br />

Monitor<br />

Softw<strong>are</strong><br />

Web &<br />

Video<br />

Server<br />

Browser<br />

& Video<br />

Client<br />

User Space<br />

Linux Kernel<br />

Packet Forwarding Table<br />

PCI<br />

PCI-e<br />

VI<br />

VI<br />

VI<br />

VI<br />

NetFPGA Router<br />

Hardw<strong>are</strong><br />

NIC<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

(nf2c0 .. 3)<br />

(eth1 .. 2)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 29 S T A N F O R D U N I V E R S I T Y


NetFPGA’s Hardw<strong>are</strong> Components<br />

• Xilinx Virtex-2 Pro FPGA for User Logic<br />

• Xilinx Spartan for PCI Host Interface<br />

• Cypress: 2 * 2.25 MB ZBT SRAM<br />

• Micron: 64MB DDR2 DRAM<br />

• Broadcom: PHY for 4 Gigabit Ethernet ports<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 30 S T A N F O R D U N I V E R S I T Y


NetFPGA System Components<br />

• Network Ports<br />

– Host PCI-express NIC<br />

• Dual Gigabit Ethernet<br />

ports on PCI-express card<br />

– NetFPGA<br />

• Quad Gigabit Ethernet<br />

ports on NetFPGA PCI card<br />

• Motherboard<br />

– Standard AMD or Intel-based<br />

x86 computer with PCI<br />

and PCI-express slots<br />

• Processor<br />

– Dual or Quad-Core CPU<br />

• Operating System<br />

– Linux CentOS 5.2<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 31 S T A N F O R D U N I V E R S I T Y


NetFPGA Cube Systems<br />

• PCs assembled from parts<br />

– Stanford University<br />

– Cambridge University<br />

• Pre-built systems available<br />

– Accent Technology Inc.<br />

• Details <strong>are</strong> in the Guide<br />

http://netfpga.org/static/guide.html<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 32 S T A N F O R D U N I V E R S I T Y


Rackmount NetFPGA Servers<br />

NetFPGA inserts in<br />

PCI or PCI-X slot<br />

2U Server<br />

(Dell 2950)<br />

1U Server<br />

(Accent Technology Inc.)<br />

Thanks: Brian Cashman for providing machine<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 33 S T A N F O R D U N I V E R S I T Y


Stanford NetFPGA Cluster<br />

Statistics<br />

• Rack of 40<br />

• 1U PCs with<br />

<strong>NetFPGAs</strong><br />

• Manged<br />

• Power<br />

• Console<br />

• LANs<br />

• Provides<br />

4*40=160 Gbps<br />

of full line-rate<br />

processing<br />

bandwidth<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 34 S T A N F O R D U N I V E R S I T Y


UCSD-NetFPGA Cluster<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 35 S T A N F O R D U N I V E R S I T Y


Integrated Circuit Technology<br />

And Field Programmable Gate<br />

Arrays (FPGAs)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 36 S T A N F O R D U N I V E R S I T Y


Integrated Circuit Technology<br />

Full-custom Design<br />

– Complementary Metal Oxide Semiconductor (CMOS)<br />

Semi-custom ASIC Design<br />

– Gate array<br />

– Standard cell<br />

Programmable Logic Device<br />

– Programmable Array Logic<br />

– Field Programmable Gate Arrays<br />

Processors<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 37 S T A N F O R D U N I V E R S I T Y


Look-Up Tables<br />

Combinatorial logic is stored<br />

in Look-Up Tables (LUTs)<br />

– Also called<br />

Function Generators (FGs)<br />

– Capacity is limited only by<br />

number of inputs, not complexity<br />

– Delay through the LUT is constant<br />

A<br />

B<br />

C<br />

D<br />

Combinatorial Logic<br />

Z<br />

A B C D Z<br />

0 0 0 0 0<br />

0 0 0 1 0<br />

0 0 1 0 0<br />

0 0 1 1 1<br />

0 1 0 0 1<br />

0 1 0 1 1<br />

. . .<br />

1 1 0 0 0<br />

1 1 0 1 0<br />

1 1 1 0 0<br />

1 1 1 1 1<br />

Diagram From: Xilinx, Inc<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 38 S T A N F O R D U N I V E R S I T Y


Xilinx CLB Structure<br />

Each slice has four outputs<br />

– Two registered outputs,<br />

two non-registered outputs<br />

– Two BUFTs associated<br />

with each CLB, accessible<br />

by all 16 CLB outputs<br />

Slice 0<br />

PRE<br />

LUT Carry D Q<br />

CE<br />

CLR<br />

Carry logic run vertically<br />

– Signals run upward<br />

– Two independent<br />

carry chains per CLB<br />

LUT<br />

Carry<br />

D PRE<br />

CE Q<br />

CLR<br />

Diagram From: Xilinx, Inc.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 39 S T A N F O R D U N I V E R S I T Y


Field Programmable Gate Arrays<br />

Din<br />

Clk<br />

CLB<br />

– Primitive element of FPGA<br />

G1<br />

G2<br />

G3<br />

G4<br />

H1<br />

F1<br />

F2<br />

F3<br />

F4<br />

CLB<br />

4 LUT<br />

G<br />

4 LUT<br />

F<br />

3 LUT<br />

H<br />

M<br />

M<br />

M<br />

M<br />

S<br />

D Q<br />

R<br />

S<br />

D Q<br />

R<br />

YQ<br />

Y<br />

XQ<br />

X<br />

Routing Module<br />

– Global routing<br />

– Local interconnect<br />

GRM<br />

Local Routing<br />

CLB<br />

PIP<br />

Macro Blocks<br />

– Block Memories<br />

– Microprocessor<br />

3rd Generation LUT-based FPGA<br />

... ...<br />

...<br />

I/O Block<br />

...<br />

...<br />

Macro<br />

Block<br />

(uP,<br />

Mem)<br />

...<br />

...<br />

Pad Routing CLB Matrix I/O<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 40 S T A N F O R D U N I V E R S I T Y


NetFPGA Block Diagram<br />

Four Gigabit Ethernet Interfaces<br />

NetFPGA platform<br />

V2-Pro50 FPGA w/ infrastructure<br />

1GE<br />

PHY<br />

1GE<br />

PHY<br />

1GE<br />

PHY<br />

1GE<br />

PHY<br />

Host<br />

computer<br />

1GE<br />

MAC<br />

1GE<br />

MAC<br />

1GE<br />

MAC<br />

1GE<br />

MAC<br />

FIFO<br />

packet<br />

buffers<br />

Your hardw<strong>are</strong> specified<br />

in Verilog source code<br />

connected - to components<br />

of the Reference Router<br />

circuits and cores.<br />

Control, PCI<br />

Interface<br />

Linux OS - NetFPGA Kernel driver<br />

18Mb<br />

SRAM<br />

64MB<br />

DDR2<br />

SDRAM<br />

18Mb<br />

SRAM<br />

3 Gb<br />

SATA<br />

User-defined softw<strong>are</strong> networking applications<br />

Board-Board Interconnect<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 41 S T A N F O R D U N I V E R S I T Y


Details of the NetFPGA<br />

• Fits into standard PCI slot<br />

– Standard Bus: 32 bits, 33 MHz<br />

• Provides interfaces for processing network packets<br />

– 4 Gigabit Ethernet Ports<br />

• Allows hardw<strong>are</strong>-accelerated processing<br />

– Implemented with Field Programmable Gate Array (FPGA) Logic<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 42 S T A N F O R D U N I V E R S I T Y


Introduction to the Verilog<br />

Hardw<strong>are</strong> Description Language<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 43 S T A N F O R D U N I V E R S I T Y


Hardw<strong>are</strong> Description Languages<br />

• Concurrent<br />

– By default, Verilog statements<br />

evaluated concurrently<br />

• Express fine grain parallelism<br />

– Allows gate-level parallelism<br />

• Provides Precise Description<br />

– Eliminates ambiguity about operation<br />

• Synthesizable<br />

– Generates hardw<strong>are</strong> from description<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 44 S T A N F O R D U N I V E R S I T Y


Verilog Data Types<br />

reg [7:0] A; // 8-bit register, MSB to LSB<br />

// (Preferred bit order for NetFPGA)<br />

reg [0:15] B; // 16-bit register, LSB to MSB<br />

B = {A[7:0],A[0:7]}; // Assignment of bits<br />

reg [31:0] Mem [0:1023]; // 1K Word Memory<br />

integer Count; // simple signed 32-bit integer<br />

integer K[1:64]; // an array of 64 integers<br />

time Start, Stop; // Two 64-bit time variables<br />

From: CSCI 320 Computer Architecture<br />

Handbook on Verilog HDL, by Dr. Daniel C. Hyde :<br />

http://eesun.free.fr/DOC/VERILOG/verilog-manual.html<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 45 S T A N F O R D U N I V E R S I T Y


Signal Multiplexers<br />

Two input multiplexer (using if / else)<br />

reg y;<br />

always @*<br />

if (select)<br />

y = a;<br />

else<br />

y = b;<br />

Two input multiplexer (using ternary operator ?:)<br />

wire t = (select ? a : b);<br />

From: http://eesun.free.fr/DOC/VERILOG/synvlg.html<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 46 S T A N F O R D U N I V E R S I T Y


Larger Multiplexers<br />

Three input multiplexer<br />

reg s;<br />

always @*<br />

begin<br />

case (select2)<br />

2'b00: s = a;<br />

2'b01: s = b;<br />

default: s = c;<br />

endcase<br />

end<br />

From: http://eesun.free.fr/DOC/VERILOG/synvlg.html<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 47 S T A N F O R D U N I V E R S I T Y


Synchronous Storage Elements<br />

• Values change at<br />

times governed by<br />

clock<br />

Din<br />

Clock<br />

D<br />

Q<br />

Dout<br />

– Clock<br />

• Input to circuit<br />

Clock<br />

1<br />

0<br />

t=0 t=1 t=2<br />

Clock Transition<br />

time<br />

– Clock Event<br />

• Example: Rising edge<br />

– Flip/Flop<br />

• Transfers value from<br />

D in to D out on clock event<br />

Din<br />

Dout<br />

t=0<br />

t=0<br />

S0<br />

A B C<br />

A B<br />

Clock Transition<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 48 S T A N F O R D U N I V E R S I T Y


Finite State Machines<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 49 S T A N F O R D U N I V E R S I T Y


Synthesizable Verilog: Delay Flip/Flops<br />

D-type flip flop<br />

reg q;<br />

always @ (posedge clk)<br />

q


FPGA Design Flow<br />

Plan & Budget<br />

Implement<br />

Translate<br />

Create Code/<br />

Schematic<br />

Functional<br />

Simulation<br />

HDL RTL<br />

Simulation<br />

Synthesize<br />

to create netlist<br />

Map<br />

Place & Route<br />

Attain Timing<br />

Closure<br />

Timing<br />

Simulation<br />

Create<br />

BIT File<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 51 S T A N F O R D U N I V E R S I T Y


NetFPGA Lab Setup<br />

Client<br />

Server<br />

CPU x2<br />

NetFPGA<br />

Control SW<br />

CAD Tools<br />

PCI-e PCI<br />

(eth1 Dual .. 2) NIC<br />

Net-FPGA<br />

Internet<br />

Router<br />

Hardw<strong>are</strong><br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

eth1 : Local Client & Server<br />

eth2 : Server for Neighbor<br />

nf2c3 : Ring - Left<br />

nf2c2 : Local Host<br />

nf2c1 : Neighbor<br />

nf2c0 : Ring - Right<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 52 S T A N F O R D U N I V E R S I T Y


NetFPGA Hardw<strong>are</strong> Set for Demo #1<br />

Server<br />

delivers<br />

streaming<br />

HD video<br />

through a<br />

chain of<br />

NetFPGA<br />

Routers<br />

Video<br />

Server<br />

CPU x2<br />

CPU x2<br />

Video<br />

Display<br />

CAD Tools<br />

PCI-e PCI<br />

PCI-e PCI<br />

NIC<br />

Net-FPGA<br />

Internet<br />

Router<br />

Hardw<strong>are</strong><br />

Net-FPGA<br />

Internet<br />

Router<br />

Hardw<strong>are</strong><br />

NIC<br />

Net-FPGA<br />

Internet<br />

Router<br />

Hardw<strong>are</strong><br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

…<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 53 S T A N F O R D U N I V E R S I T Y


Cable Configuration in the Lab<br />

• NetFPGA Gigabit Ethernet Interfaces<br />

– nf2c3 : Left neighbor in network (green)<br />

– nf2c2 : Local host interface (red)<br />

– nf2c1 : Routes for adjacent server (blue)<br />

– nf2c0 : Right neighbor in network (green)<br />

• Host Ethernet Interfaces<br />

– eth1 : Local host interface (red)<br />

– eth2 : Server for neighbor (blue)<br />

nf2c<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

2<br />

1<br />

0<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 54 S T A N F O R D U N I V E R S I T Y


Demo 1<br />

Reference Router running on the<br />

NetFPGA<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 55 S T A N F O R D U N I V E R S I T Y


Setup for the Reference Router<br />

Each NetFPGA card<br />

has four ports<br />

Port 2 connected to<br />

Client / Server<br />

Ports 0 and 3 connected to<br />

adjacent NetFPGA cards<br />

Video Server<br />

NetFPGA<br />

NetFPGA<br />

Video<br />

Client<br />

NetFPGA<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 56 S T A N F O R D U N I V E R S I T Y


Topology of NetFPGA Routers<br />

Video<br />

Server<br />

HD<br />

Display<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 57 S T A N F O R D U N I V E R S I T Y


Subnet Configuration<br />

.1.1<br />

.4.1<br />

.7.1<br />

.10.1<br />

.13.1<br />

.16.1<br />

.2.1<br />

.1.2<br />

.30.2<br />

.3.1<br />

.3.2<br />

.4.2<br />

.7.2<br />

.10.2<br />

.13.2<br />

.6.2<br />

.9.2<br />

.12.2<br />

.15.2<br />

.6.1<br />

.9.1<br />

.12.1<br />

.15.1<br />

.5.1 .8.1 .11.1 .14.1 .18.1<br />

.16.2<br />

.17.1<br />

.29.1<br />

.30.1<br />

.27.2<br />

.28.2<br />

.27.1<br />

.26.1<br />

.25.2<br />

.24.2<br />

.24.1<br />

.23.1<br />

.21.2<br />

.22.2<br />

.21.1<br />

.18.2<br />

.20.1<br />

.19.2<br />

.28.1<br />

.25.1<br />

.22.1<br />

.19.1<br />

Video<br />

Server<br />

Shortest Path<br />

Video<br />

Client<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 58 S T A N F O R D U N I V E R S I T Y


Cable Configuration for Demo 1<br />

• NetFPGA Gigabit Ethernet Interfaces<br />

– nf2c3 : Left neighbor in network (green)<br />

– nf2c2 : Local host interface (red)<br />

– nf2c0 : Right neighbor in network (green)<br />

• Host Ethernet Interfaces<br />

– eth1 : Local host interface (red)<br />

nf2c<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

eth<br />

3<br />

2<br />

1<br />

0<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 59 S T A N F O R D U N I V E R S I T Y


Working IP Router<br />

• Objectives<br />

– Become familiar with<br />

Stanford Reference Router<br />

– Observe PW-OSPF<br />

re-routing traffic around a failure<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 60 S T A N F O R D U N I V E R S I T Y


Streaming Video through the NetFPGA<br />

• Video server<br />

– Source files<br />

/var/www/html/video<br />

– Network URL :<br />

http://192.168.Net.Host/video<br />

• Video client<br />

– Windows Media Player<br />

– Linux mplayer<br />

• Video traffic<br />

– MPEG2 HDTV (35 Mbps)<br />

– MPEG2 TV (9 Mbps)<br />

– DVI (3 Mbps)<br />

– WMF (1.7 Mbps)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 61 S T A N F O R D U N I V E R S I T Y


Demo 1 Physical Configuration<br />

Key:<br />

eth1 of Host PC<br />

192.168.X.Y<br />

NetFPGA<br />

Router #<br />

To stream mplayer video<br />

from server 4.1, type:<br />

./mp 192.168.4.1<br />

Any PC can stream traffic<br />

through multiple NetFPGA<br />

routers in the ring topology<br />

to any other PC<br />

192.168.18.*<br />

6<br />

5<br />

192.168.21.*<br />

7 8 9<br />

19.1 22.1 25.1 28.1 1.1<br />

16.1<br />

1192.168.15.*<br />

13.1<br />

4<br />

192.168.24.* 192.168.27.* 192.168.30.*<br />

192.168.12.*<br />

10.1<br />

3 2<br />

192.168.9.*<br />

0<br />

7.1 4.1<br />

192.168.6.*<br />

1<br />

192.168.3.*<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 62 S T A N F O R D U N I V E R S I T Y


Step 1 – Observe the Routing Tables<br />

The router is already<br />

configured and<br />

running on your<br />

machines<br />

The routing table has<br />

converged to the<br />

routing decisions with<br />

minimum number of<br />

hops<br />

Next, break a link …<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 63 S T A N F O R D U N I V E R S I T Y


Step 2 - Dynamic Re-routing<br />

Break the link<br />

between video<br />

server and video<br />

client<br />

.2.1<br />

.1.2<br />

.1.1<br />

.3.1<br />

.30.2<br />

.3.2<br />

.4.1<br />

.7.1<br />

.10.1<br />

.4.2<br />

.7.2<br />

.10.2<br />

.6.2<br />

.9.2<br />

.12.2<br />

.6.1<br />

.9.1<br />

.12.1<br />

.5.1 .8.1 .11.1 .14.<br />

1<br />

.13.1<br />

.13.2<br />

.15.1<br />

.15.2<br />

.18.1<br />

.16.1<br />

.16.2<br />

.17.1<br />

Routers re-route<br />

traffic around the<br />

broken link and<br />

video continues<br />

playing<br />

.29.1<br />

.30.1<br />

.27.2<br />

.28.2<br />

.28.1<br />

.27.1<br />

.26.1<br />

.24.2<br />

.25.2<br />

.25.1<br />

.24.1<br />

.23.1<br />

.22.2<br />

.22.1<br />

.21.2<br />

.21.1<br />

.18.2<br />

.20.1<br />

.19.2<br />

.19.1<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 64 S T A N F O R D U N I V E R S I T Y


Exercise 1<br />

Build the Reference Router<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 65 S T A N F O R D U N I V E R S I T Y


Reference Router Pipeline<br />

• Five stages<br />

MAC<br />

RxQ<br />

– Input<br />

– Input arbitration<br />

– Routing decision and<br />

packet modification<br />

– Output queuing<br />

– Output<br />

• Packet-based<br />

module interface<br />

• Pluggable design<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

Input Arbiter<br />

Output Port Lookup<br />

Output Queues<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 66 S T A N F O R D U N I V E R S I T Y


Make your own router<br />

Objectives:<br />

– Learn how to build hardw<strong>are</strong><br />

– Run the softw<strong>are</strong><br />

– Explore router architecture<br />

Execution<br />

– Start synthesis<br />

– Rerun the GUI with the new hardw<strong>are</strong><br />

– Test connectivity and statistics with pings<br />

– Explore pipeline in the details page<br />

– Explore detailed statistics in the details page<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 67 S T A N F O R D U N I V E R S I T Y


Step 1 - Build the Hardw<strong>are</strong><br />

Close all windows<br />

Start terminal, cd to<br />

“NF2/projects/tutorial_router/synth”<br />

Run “make clean”<br />

Start synthesis<br />

with “make”<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 68 S T A N F O R D U N I V E R S I T Y


First Break<br />

(while hardw<strong>are</strong> compiles)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 69 S T A N F O R D U N I V E R S I T Y


Step 2 - Run Homemade Router<br />

cd to “NF2/projects/tutorial_router/sw”<br />

To use the just-built router hardw<strong>are</strong>, type:<br />

./tut_router_gui.pl --use_bin ../../../bitfiles/tutorial_router.bit<br />

To stream video, run:<br />

./mp 192.168.X.Y where X.Y = 25.1 or 19.1 or 7.1<br />

(or other server as listed on Demo 1 handout)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 70 S T A N F O R D U N I V E R S I T Y


Step 4 - Connectivity and Statistics<br />

Ping any addresses<br />

192.168.x.y where x is<br />

from 1-20 and y is 1 or 2<br />

Open the statistics tab in<br />

the Quickstart window to<br />

see some statistics<br />

Explore more statistics in<br />

modules under the<br />

details tab<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 71 S T A N F O R D U N I V E R S I T Y


Step 5 - Explore Router Architecture<br />

Click the Details tab of<br />

the Quickstart window<br />

This is the reference<br />

router pipeline –<br />

a canonical,<br />

simple-to-understand,<br />

modular router pipeline<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 72 S T A N F O R D U N I V E R S I T Y


Step 6 - Explore Output Queues<br />

Click on the Output<br />

Queues module in<br />

the Details tab<br />

The page gives<br />

configuration details<br />

…and statistics<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 73 S T A N F O R D U N I V E R S I T Y


Understanding Buffer Size<br />

Requirements in a Router<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 74 S T A N F O R D U N I V E R S I T Y


Buffer Requirements in a Router<br />

Buffer size matters:<br />

– Small queues reduce delay<br />

– Large buffers <strong>are</strong> expensive<br />

Theoretical tools predict requirements<br />

– Queuing theory<br />

– Large deviation theory<br />

– Mean field theory<br />

Yet, there is no direct answer<br />

– Flows have a closed-loop nature<br />

– Question arises on whether focus should be on<br />

equilibrium state or transient state<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 75 S T A N F O R D U N I V E R S I T Y


Rule-of-thumb<br />

Source<br />

Router<br />

C<br />

Destination<br />

• Universally applied rule-of-thumb:<br />

– A router needs a buffer size: B = 2T<br />

× C<br />

– 2T is the two-way propagation delay (or just 250ms)<br />

– C is capacity of bottleneck link<br />

• Context<br />

– Mandated in backbone and edge routers<br />

– Appears in RFPs and IETF architectural guidelines<br />

– Already known by inventors of TCP<br />

• [Van Jacobson, 1988]<br />

– Has major consequences for router design<br />

2T<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 76 S T A N F O R D U N I V E R S I T Y


The Story So Far<br />

# packets<br />

at 10Gb/s<br />

1,000,000<br />

2T<br />

× C<br />

(1)<br />

⎯⎯→<br />

10,000 20<br />

2T<br />

× C<br />

n<br />

⎯<br />

(2)<br />

⎯→<br />

O(logW<br />

)<br />

(1) Assume: Large number of desynchronized flows; 100% utilization<br />

(2) Assume: Large number of desynchronized flows;


Using NetFPGA to explore buffer size<br />

• Need to reduce buffer size and measure<br />

occupancy<br />

• Alas, not possible in commercial routers<br />

• So, we will use the NetFPGA instead<br />

Objective:<br />

– Use the NetFPGA to understand how large a<br />

buffer we need for a single TCP flow.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 78 S T A N F O R D U N I V E R S I T Y


Why 2TxC for a single TCP Flow?<br />

Only W packets<br />

may be outstanding<br />

Rule for adjusting W<br />

– If an ACK is received: W ← W+1/W<br />

– If a packet is lost: W ← W/2<br />

http://guido.appenzeller.net/anims/<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 79 S T A N F O R D U N I V E R S I T Y


Time Evolution of a Single TCP Flow<br />

Time evolution of a single TCP flow through a router. Buffer is 2T*C<br />

Time evolution of a single TCP flow through a router. Buffer is < 2T*C<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 80 S T A N F O R D U N I V E R S I T Y


NetFPGA Hardw<strong>are</strong> Set for Demo #2<br />

…<br />

CPU x2<br />

Video<br />

Client<br />

Video<br />

Server<br />

PCI-e PCI<br />

PCI-e<br />

NIC<br />

Net-FPGA<br />

Internet<br />

Router<br />

Hardw<strong>are</strong><br />

NIC<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

GE<br />

Server<br />

delivers<br />

streaming<br />

HD video<br />

to adjacent<br />

client<br />

CPU x2<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 81 S T A N F O R D U N I V E R S I T Y


Demo 2<br />

Observing and Controlling the<br />

Queue Size<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 82 S T A N F O R D U N I V E R S I T Y


Setup for the Demo 2<br />

eth1<br />

nf2c2<br />

NetFPGA<br />

nf2c1<br />

eth2<br />

Router<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 83 S T A N F O R D U N I V E R S I T Y


Interfaces and Subnets<br />

• eth1 connects your host to your NetFPGA Router<br />

• nf2c2 routes to nf2c1 (your adjacent server)<br />

• eth2 serves web and video traffic to your neighbor<br />

• nf2c0 & nf2c3 (the network ring) <strong>are</strong> unused<br />

.2.1<br />

.4.1<br />

.5.1<br />

.7.1<br />

.8.1<br />

.10.1<br />

.11.1<br />

.13.1<br />

.1.1 .1.2<br />

.2.2<br />

.4.2<br />

.5.2<br />

.7.2<br />

.8.2<br />

.10.2<br />

.11.2<br />

.13.2<br />

.29.1<br />

.14.2<br />

.29.2<br />

.28.1<br />

.28.2<br />

.26.1<br />

.26.2<br />

.25.1<br />

.25.2<br />

.23.1<br />

.23.2<br />

.22.1<br />

.22.2<br />

.20.1<br />

.20.2<br />

.19.1<br />

.19.2<br />

.17.1<br />

.17.2<br />

.16.2<br />

.16.1<br />

.14.1<br />

This configuration allows you to modify and test your router without affecting others<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 84 S T A N F O R D U N I V E R S I T Y


Cable Configuration for Demo 2<br />

• NetFPGA Gigabit Ethernet Interfaces<br />

– nf2c2 : Local host interface (red)<br />

– nf2c1 : Router for adjacent server (blue)<br />

• Host Ethernet Interfaces<br />

– eth1 : Local host interface (red)<br />

– eth2 : Server for neighbor (blue)<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

nf2c<br />

3<br />

1 2<br />

2 1<br />

0<br />

eth<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 85 S T A N F O R D U N I V E R S I T Y


Demo 2 Configuration<br />

Key:<br />

Eth1: 192.168.X.1<br />

Eth2: 192.168.Y.1<br />

NetFPGA<br />

Router #<br />

Stream traffic through your<br />

NetFPGA router’s Eth1<br />

interface using your<br />

neighbor’s eth2 interface<br />

Back of room<br />

Eth2<br />

Eth1<br />

6<br />

19.1<br />

17.1<br />

14.1<br />

16.1<br />

5<br />

7 8 9<br />

22.1<br />

20.1<br />

11.1<br />

13.1<br />

4<br />

25.1<br />

23.1<br />

8.1<br />

10.1<br />

28.1<br />

26.1<br />

5.1<br />

7.1<br />

3 2<br />

0<br />

1.1<br />

29.1<br />

2.1<br />

4.1<br />

1<br />

Eth2<br />

Eth1<br />

Front of room<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 86 S T A N F O R D U N I V E R S I T Y


Enhanced Router<br />

Objectives<br />

– Observe router with new modules<br />

– New modules: rate limiting, event capture<br />

Execution<br />

– Run event capture router<br />

– Look at routing tables<br />

– Explore details pane<br />

– Start tcp transfer, look at queue occupancy<br />

– Change rate, look at queue occupancy<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 87 S T A N F O R D U N I V E R S I T Y


Step 1 - Run Pre-made Enhanced Router<br />

Start terminal and cd to<br />

“NF2/projects/tutorial_ro<br />

uter/sw/”<br />

Type<br />

“./tut_adv_router_gui.pl”<br />

A familiar GUI should start<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 88 S T A N F O R D U N I V E R S I T Y


Step 2 - Explore Enhanced Router<br />

Click on the Details tab<br />

A similar pipeline to<br />

the one seen<br />

previously shown<br />

with some additions<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 89 S T A N F O R D U N I V E R S I T Y


Enhanced Router Pipeline<br />

Two modules added<br />

1. Event Capture<br />

to capture output<br />

queue events<br />

(writes, reads,<br />

drops)<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

Input Arbiter<br />

Output Port Lookup<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

Event Capture<br />

2. Rate Limiter to<br />

create a<br />

bottleneck<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

Rate<br />

Limiter<br />

Output Queues<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 90 S T A N F O R D U N I V E R S I T Y


Step 3 - Decrease the Link Rate<br />

To create bottleneck and<br />

show the TCP “sawtooth,”<br />

link-rate is decreased.<br />

In the Details tab, click the<br />

“Rate Limit” module<br />

Check Enabled<br />

Set link rate to 1.953Mbps<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 91 S T A N F O R D U N I V E R S I T Y


Step 4 – Decrease Queue Size<br />

Go back to the Details<br />

panel and click on<br />

“Output Queues”<br />

Select the “Output Queue<br />

2” tab<br />

Change the output queue<br />

size in packets slider to<br />

16<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 92 S T A N F O R D U N I V E R S I T Y


Step 5 - Start Event Capture<br />

Click on the Event Capture<br />

module under the Details<br />

tab<br />

This should start the<br />

configuration page<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 93 S T A N F O R D U N I V E R S I T Y


Step 6 - Configure Event Capture<br />

Check Send to local<br />

host to receive events<br />

on the local host<br />

Check Monitor Queue 2<br />

to monitor output queue<br />

of MAC port1<br />

Check Enable Capture<br />

to start event capture<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 94 S T A N F O R D U N I V E R S I T Y


Step 7 - Start TCP Transfer<br />

We will use iperf to run a<br />

large TCP transfer and<br />

look at queue evolution<br />

Start a terminal and cd to<br />

“NF2/projects/tutorial_router/sw”<br />

Type<br />

“./iperf.sh”<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 95 S T A N F O R D U N I V E R S I T Y


Step 8 - Look at Event Capture Results<br />

Click on the Event<br />

Capture module under<br />

the Details tab.<br />

The sawtooth pattern<br />

should now be visible.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 96 S T A N F O R D U N I V E R S I T Y


Queue Occupancy Charts<br />

Observe the TCP/IP sawtooth<br />

Leave the control windows open<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 97 S T A N F O R D U N I V E R S I T Y


Exercise 2: Enhancing the<br />

Reference Router<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 98 S T A N F O R D U N I V E R S I T Y


Enhance Your Router<br />

Objectives<br />

– Add new modules to datapath<br />

– Synthesize and test router<br />

Execution<br />

– Open user_datapath.v, uncomment<br />

delay/rate/event capture modules<br />

– Synthesize<br />

– After synthesis, test the new system<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 99 S T A N F O R D U N I V E R S I T Y


An aside: xemacs Tips<br />

We will modify Verilog source code with xemacs<br />

– To undo a command, type<br />

• ctrl+shift+'-'<br />

– To cancel a multi-keystroke command, type<br />

• ctrl+g<br />

– To select lines,<br />

• hold shift and press the arrow keys<br />

– To comment (remove from compilation) selected lines, type<br />

• ctrl+c+c<br />

– To uncomment a commented block,<br />

• move the cursor inside the commented block<br />

• type ctrl+c+u<br />

– To save, type<br />

• ctrl+x+s<br />

– To search for a term, type<br />

• ctrl+s search_pattern<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 100 S T A N F O R D U N I V E R S I T Y


Step 1 - Open the Source<br />

We will modify the Verilog<br />

source code to add event<br />

capture and rate limiter modules<br />

We will simply comment<br />

and uncomment existing code<br />

Open terminal<br />

Type<br />

xemacs NF2/projects/tutorial_router/src/user_data_path.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 101 S T A N F O R D U N I V E R S I T Y


Step 2 - Add Wires<br />

Now we need to add wires<br />

to connect the new<br />

modules<br />

Search for “new wires”<br />

(ctrl+s new wires), then<br />

press Enter<br />

Uncomment the wires<br />

(ctrl+c+u)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 102 S T A N F O R D U N I V E R S I T Y


Step 3a - Connect Event Capture<br />

Search for opl_output (ctrl+s<br />

opl_output), then press Enter<br />

Comment the four lines above<br />

(up, shift + up + up + up +<br />

up, ctrl+c+c)<br />

Uncomment the block below to<br />

connect the outputs (ctrl+s<br />

opl_out, ctrl+c+u)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 103 S T A N F O R D U N I V E R S I T Y


Step 3b - Connect the Output Queue Registers<br />

Search for opl_output<br />

(ctrl+s opl_output, Enter)<br />

Comment the 6 lines<br />

(select the six lines by<br />

using shift+arrow keys,<br />

then type ctrl+c+c)<br />

Uncomment the commented<br />

block by scrolling down into<br />

the block and typing<br />

ctrl+c+u<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 104 S T A N F O R D U N I V E R S I T Y


Step 4 - Add the Event Capture Module<br />

Search for evt_capture_top<br />

(ctrl+s evt_capture_top),<br />

then press Enter<br />

Uncomment the block<br />

(ctrl+c+u)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 105 S T A N F O R D U N I V E R S I T Y


Step 5 - Add the Drop Nth Module<br />

Search for drop_nth_packet<br />

(ctrl+s drop_nth_packet),<br />

then press Enter<br />

Uncomment the block<br />

(ctrl+c+u)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 106 S T A N F O R D U N I V E R S I T Y


Step 6 - Connect the Output Queue to the Rate Limiter<br />

Search for port_outputs<br />

(ctrl+s port_outputs), then<br />

press (Enter)<br />

Comment the 4 lines above<br />

(select the four lines by<br />

using shift+arrow keys),<br />

then type (ctrl+c+c)<br />

Uncomment the commented<br />

block by scrolling down into<br />

the block and typing<br />

ctrl+c+u<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 107 S T A N F O R D U N I V E R S I T Y


Step 7 - Connect the Registers<br />

Search for port_outputs<br />

(ctrl+s port_outputs), then<br />

press (Enter)<br />

Comment the 6 lines<br />

(select the six lines by<br />

using shift+arrow keys),<br />

then type (ctrl+c+c)<br />

six<br />

Uncomment the commented<br />

block by scrolling down into<br />

the block and typing<br />

(ctrl+c+u)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 108 S T A N F O R D U N I V E R S I T Y


Step 8 - Add Rate Limiter<br />

Scroll down until you reach<br />

the next “excluded” block<br />

Uncomment the block<br />

containing the rate limiter<br />

instantiations.<br />

Scroll into the block,<br />

type (ctrl+c+u)<br />

Save (ctrl+x+s)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 109 S T A N F O R D U N I V E R S I T Y


Step 9 - Build the Hardw<strong>are</strong><br />

Start terminal, cd to<br />

“NF2/projects/tutorial_router/synth”<br />

Run “make clean”<br />

Start synthesis<br />

with “make”<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 110 S T A N F O R D U N I V E R S I T Y


Second Break<br />

(while hardw<strong>are</strong> compiles)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 111 S T A N F O R D U N I V E R S I T Y


Hardw<strong>are</strong> Datapath<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 112 S T A N F O R D U N I V E R S I T Y


Full System Components<br />

Softw<strong>are</strong><br />

nf2c0 nf2c1 nf2c2 nf2c3 ioctl<br />

PCI Bus<br />

NetFPGA<br />

CPU<br />

CPU<br />

CPU<br />

CPU<br />

CPU<br />

CPU<br />

RxQ<br />

RxQ CPU<br />

CPU<br />

TxQ<br />

TxQ<br />

RxQ<br />

RxQ<br />

TxQ<br />

TxQ<br />

user data path<br />

nf2_reg_grp<br />

MAC<br />

MAC<br />

MAC<br />

MAC<br />

MAC<br />

MAC<br />

TxQ<br />

TxQMAC<br />

MAC<br />

RxQ<br />

RxQ<br />

TxQ<br />

TxQ<br />

RxQ<br />

RxQ<br />

Ethernet<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 113 S T A N F O R D U N I V E R S I T Y


Life of a Packet through the Hardw<strong>are</strong><br />

192.168.1.x<br />

port0<br />

port2<br />

192.168.2.y<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 114 S T A N F O R D U N I V E R S I T Y


Router Stages Again<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

Input Arbiter<br />

Output Port Lookup<br />

Output Queues<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 115 S T A N F O R D U N I V E R S I T Y


Inter-Module Communication<br />

Using “Module Headers”:<br />

Ctrl Word<br />

(8 bits)<br />

x<br />

…<br />

y<br />

0<br />

0<br />

0<br />

0x10<br />

Data Word<br />

(64 bits)<br />

Module Hdr<br />

…<br />

Last Module Hdr<br />

Eth Hdr<br />

IP Hdr<br />

…<br />

Last word of packet<br />

Contain information<br />

such as packet<br />

length, input port,<br />

output port, …<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 116 S T A N F O R D U N I V E R S I T Y


Inter-Module Communication<br />

data<br />

ctrl<br />

wr<br />

rdy<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 117 S T A N F O R D U N I V E R S I T Y


MAC Rx Queue<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 118 S T A N F O R D U N I V E R S I T Y


Rx Queue<br />

0xff<br />

0<br />

0<br />

0<br />

Pkt length,<br />

input port = 0<br />

Eth Hdr:<br />

Dst MAC = port 0,<br />

Ethertype = IP<br />

IP Hdr:<br />

IP Dst: 192.168.2.3,<br />

TTL: 64, Csum:0x3ab4<br />

Data<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 119 S T A N F O R D U N I V E R S I T Y


Input Arbiter<br />

Pkt<br />

Pkt<br />

Pkt<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 120 S T A N F O R D U N I V E R S I T Y


Output Port Lookup<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 121 S T A N F O R D U N I V E R S I T Y


Output Port Lookup<br />

1- Check input<br />

port matches<br />

Dst MAC<br />

5- Add output<br />

port header<br />

2- Check TTL,<br />

checksum<br />

3- Lookup<br />

next hop IP &<br />

output port<br />

(LPM)<br />

4- Lookup<br />

next hop MAC<br />

address (ARP)<br />

0xff<br />

0<br />

0<br />

0<br />

Pkt length,<br />

input port = 0<br />

output port = 4<br />

EthHdr: EthHdr: Dst Dst MAC MAC = nextHop = 0<br />

Src Src MAC MAC = port = x, 4,<br />

Ethertype = IP<br />

IP Hdr:<br />

IP Dst: 192.168.2.3,<br />

TTL: 64, 63, Csum:0x3ab4<br />

Csum:0x3ac2<br />

Data<br />

6- Modify MAC<br />

Dst and Src<br />

addresses<br />

7-Decrement<br />

TTL and<br />

update<br />

checksum<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 122 S T A N F O R D U N I V E R S I T Y


Output Queues<br />

OQ0<br />

OQ4<br />

OQ7<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 123 S T A N F O R D U N I V E R S I T Y


MAC Tx Queue<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 124 S T A N F O R D U N I V E R S I T Y


MAC Tx Queue<br />

0xff<br />

0<br />

0<br />

0<br />

Pkt length,<br />

input port = 0<br />

output port = 4<br />

EthHdr: Dst MAC = nextHop<br />

Src MAC = port 4,<br />

Ethertype = IP<br />

IP Hdr:<br />

IP Dst: 192.168.2.3,<br />

TTL: 64, 63, Csum:0x3ab4<br />

Csum:0x3ac2<br />

Data<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 125 S T A N F O R D U N I V E R S I T Y


Exception Packet<br />

• Example: TTL = 0 or TTL = 1<br />

• Packet has to be sent to the CPU which will<br />

generate an ICMP packet as a response<br />

• Difference starts at the Output Port lookup<br />

stage<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 126 S T A N F O R D U N I V E R S I T Y


Exception Packet Path<br />

Softw<strong>are</strong><br />

nf2c0 nf2c1 nf2c2 nf2c3 ioctl<br />

PCI Bus<br />

NetFPGA<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

user data path<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

nf2_reg_grp<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

Ethernet<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 127 S T A N F O R D U N I V E R S I T Y


Output Port Lookup<br />

1- Check input<br />

port matches<br />

Dst MAC<br />

2- Check TTL,<br />

checksum –<br />

EXCEPTION!<br />

3- Add output<br />

port module<br />

0xff<br />

0<br />

0<br />

0<br />

Pkt length,<br />

input port = 0<br />

output port = 1<br />

EthHdr: Dst MAC = 0,<br />

Src MAC = x,<br />

Ethertype = IP<br />

IP Hdr:<br />

IP Dst: 192.168.2.3,<br />

TTL: 1, Csum:0x3ab4<br />

Data<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 128 S T A N F O R D U N I V E R S I T Y


Output Queues<br />

OQ0<br />

OQ1<br />

OQ2<br />

OQ7<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 129 S T A N F O R D U N I V E R S I T Y


CPU Tx Queue<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 130 S T A N F O R D U N I V E R S I T Y


CPU Tx Queue<br />

0xff<br />

0<br />

0<br />

0<br />

Pkt length,<br />

input port = 0<br />

output port = 1<br />

EthHdr: Dst MAC = 0,<br />

Src MAC = x,<br />

Ethertype = IP<br />

IP Hdr:<br />

IP Dst: 192.168.2.3,<br />

TTL: 1, Csum:0x3ab4<br />

Data<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 131 S T A N F O R D U N I V E R S I T Y


ICMP Packet<br />

• For the ICMP packet, the packet arrives at<br />

the CPU Rx Queue from the PCI Bus<br />

• It follows the same path as a packet from<br />

the MAC until it reaches the Output Port<br />

Lookup<br />

• The OPL module sees the packet is from<br />

the CPU Rx Queue 1 and sets the output<br />

port directly to 0<br />

• The packet then continues on the same<br />

path as the non-exception packet to the<br />

Output Queues and then MAC Tx queue 0<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 132 S T A N F O R D U N I V E R S I T Y


ICMP Packet Path<br />

Softw<strong>are</strong><br />

nf2c0 nf2c1 nf2c2 nf2c3 ioctl<br />

PCI Bus<br />

NetFPGA<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

user data path<br />

CPU<br />

RxQ<br />

CPU<br />

TxQ<br />

nf2_reg_grp<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

MAC<br />

TxQ<br />

MAC<br />

RxQ<br />

Ethernet<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 133 S T A N F O R D U N I V E R S I T Y


NetFPGA-Host Interaction<br />

• Linux driver interfaces with hardw<strong>are</strong><br />

– Packet interface via standard Linux network<br />

stack<br />

– Register reads/writes via ioctl system call<br />

with wrapper functions:<br />

• readReg(nf2device *dev, int address, unsigned *rd_data);<br />

• writeReg(nf2device *dev, int address, unsigned *wr_data);<br />

eg:<br />

readReg(&nf2, OQ_NUM_PKTS_STORED_0, &val);<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 134 S T A N F O R D U N I V E R S I T Y


NetFPGA-Host Interaction<br />

NetFPGA to host packet transfer<br />

1. Packet arrives –<br />

forwarding table<br />

sends to CPU queue<br />

2. Interrupt<br />

notifies<br />

driver of<br />

packet<br />

arrival<br />

PCI Bus<br />

3. Driver sets up<br />

and initiates<br />

DMA transfer<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 135 S T A N F O R D U N I V E R S I T Y


NetFPGA-Host Interaction<br />

NetFPGA to host packet transfer (cont.)<br />

4. NetFPGA<br />

transfers<br />

packet via<br />

DMA<br />

PCI Bus<br />

5. Interrupt<br />

signals<br />

completion<br />

of DMA<br />

6. Driver passes packet to<br />

network stack<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 136 S T A N F O R D U N I V E R S I T Y


NetFPGA-Host Interaction<br />

Host to NetFPGA packet transfers<br />

2. Driver sets up<br />

and initiates<br />

DMA transfer<br />

PCI Bus<br />

3. Interrupt<br />

signals<br />

completion<br />

of DMA<br />

1. Softw<strong>are</strong> sends packet<br />

via network sockets<br />

Packet delivered to driver<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 137 S T A N F O R D U N I V E R S I T Y


NetFPGA-Host Interaction<br />

Register access<br />

PCI Bus<br />

2. Driver<br />

performs<br />

PCI memory<br />

read/write<br />

1. Softw<strong>are</strong> makes ioctl<br />

call on network socket<br />

ioctl passed to driver<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 138 S T A N F O R D U N I V E R S I T Y


NetFPGA-Host Interaction<br />

• Packet transfers shown using DMA<br />

interface<br />

• Alternative: use programmed IO to transfer<br />

packets via register reads/writes<br />

– slower but eliminates the need to deal with<br />

network sockets<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 139 S T A N F O R D U N I V E R S I T Y


Step 10 – Perfect the Router<br />

Go back to “Demo 2: Step 1” after synthesis completes<br />

and redo the steps with your own router<br />

To run your router:<br />

1- cd NF2/projects/tutorial_router/sw<br />

2- type “./tut_adv_router_gui.pl --use_bin<br />

../../../bitfiles/tutorial_router.bit”<br />

You can change the bandwidth and queue size settings<br />

to see how that affects the evolution of queue<br />

occupancy<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 140 S T A N F O R D U N I V E R S I T Y


Drop 1 in N Packets<br />

Objectives<br />

– Add counter and FSM to the code<br />

– Synthesize and test router<br />

Execution<br />

– Open drop_nth_packet.v<br />

– Insert counter code<br />

– Synthesize<br />

– After synthesis, test the new system.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 141 S T A N F O R D U N I V E R S I T Y


New Reference Router Pipeline<br />

One module added<br />

1. Drop Nth Packet<br />

to drop every Nth<br />

packet from the<br />

reference router<br />

pipeline<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

Input Arbiter<br />

Output Port Lookup<br />

Event Capture<br />

Drop Nth Packet<br />

CPU<br />

RxQ<br />

MAC<br />

RxQ<br />

CPU<br />

RxQ<br />

Output Queues<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

Rate<br />

Limiter<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

CPU<br />

TxQ<br />

MAC<br />

TxQ<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 142 S T A N F O R D U N I V E R S I T Y


Step 1 - Open the Source<br />

We will modify the Verilog<br />

source code to add a<br />

counter to the<br />

drop_nth_packet<br />

module<br />

Open terminal<br />

Type “xemacs<br />

NF2/projects/tutorial_router/src/drop_nth_packet.v<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 143 S T A N F O R D U N I V E R S I T Y


Step 2 - Add Counter to Module<br />

Add counter using the following signals:<br />

• counter<br />

–16 bit output signal that<br />

you should increment<br />

on each packet pulse<br />

• rst_counter<br />

– reset signal (a pulse input)<br />

• inc_counter<br />

– increment (a pulse input)<br />

Search for insert counter<br />

(ctrl+s insert counter, Enter)<br />

Insert counter and save<br />

(ctrl+x+s)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 144 S T A N F O R D U N I V E R S I T Y


Step 3 - Build the Hardw<strong>are</strong><br />

Start terminal, cd to<br />

“NF2/projects/<br />

tutorial_router/synth”<br />

Run “make clean”<br />

Start synthesis with “make”<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 145 S T A N F O R D U N I V E R S I T Y


Using the NetFPGA<br />

in the Classroom<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 146 S T A N F O R D U N I V E R S I T Y


<strong>NetFPGAs</strong> <strong>are</strong> used:<br />

• To run laboratory courses on network routing<br />

– Professors teach courses (CS344, Workshops, ..)<br />

• To teach students how to build real Internet routers<br />

– Train students to build routers (Cisco, Juniper, Huawei, .. )<br />

• To research how new features in the network<br />

– Build network services for data centers (Google, UCSD.. )<br />

• To prototype systems with live traffic<br />

– That Buffer measurement (while maintaining throughput, ..)<br />

• To help hardw<strong>are</strong> vendors understand device requirements<br />

– Use of hardw<strong>are</strong> (Xilinx, Micron, Cypress, Broadcom, ..)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 147 S T A N F O R D U N I V E R S I T Y


NetFPGA Classrooms<br />

SIGCOMM - Seattle, Washington, USA<br />

Beijing, China<br />

SIGMETRICS - San Diego, California, USA<br />

EuroSys - Glasgow, Scotland, U.K.<br />

Bangalore, India<br />

http://netfpga.org/pastevents.php and http://netfpga.org/upcomingevents.php<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 148 S T A N F O R D U N I V E R S I T Y


<strong>Where</strong> <strong>are</strong> <strong>NetFPGAs</strong>?<br />

– Over 500 users with ~1,000 cards deployed<br />

– Deployed in ~120 universities in 17 Countries<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 149 S T A N F O R D U N I V E R S I T Y


Components of NetFPGA Course<br />

• Documentation<br />

– System Design<br />

– Implementation Plan<br />

• Deliverables<br />

– Hardw<strong>are</strong> Circuits<br />

– System Softw<strong>are</strong><br />

– Milestones<br />

• Testing<br />

– Proof of Correctness<br />

– Integrated Testing<br />

– Interoperabilty<br />

• Post Mortem<br />

– Lessons Learned<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 150 S T A N F O R D U N I V E R S I T Y


Third Break<br />

(while hardw<strong>are</strong> compiles)<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 151 S T A N F O R D U N I V E R S I T Y


Step 5 – Test your Router<br />

You can watch the number of received and sent packets to watch the<br />

module drop every Nth packet. Ping a local machine (i.e.<br />

192.168.7.1) and watch for missing pings<br />

To run your router:<br />

1- Enter the directory by typing:<br />

cd NF2/projects/tutorial_router/sw<br />

2- Run the router by typing:<br />

./tut_adv_router_gui.pl --use_bin ../../../bitfiles/tutorial_router.bit<br />

To set the value of N (which packet to drop)<br />

type regwrite 0x2000704 N<br />

– replace N with a number (such as 100)<br />

To enable packet dropping, type:<br />

regwrite 0x2000700 0x1<br />

To disable packet dropping, type:<br />

regwrite 0x2000700 0x0<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 152 S T A N F O R D U N I V E R S I T Y


Step 5 – Measurements<br />

• Determine iperf TCP throughput to neighbor’s server<br />

for each of several values of N<br />

– Similar to Demo 2, Step 8<br />

• cd NF2/projects/tutorial_router/sw<br />

• ./iperf.sh<br />

– Ping 192.168.x.2 (where x is your neighbor’s server)<br />

– TCP throughput with:<br />

• Drop circuit disabled<br />

– TCP Throughput = ________ Mbps<br />

• Drop one in N = 1,000 packets<br />

– TCP Throughput = ________ Mbps<br />

• Drop one in N = 100 packets<br />

– TCP Throughput = ________ Mbps<br />

• Drop one in N = 10 packets<br />

– TCP Throughput = ________ Mbps<br />

• Explain why TCPs throughput is so low given that only<br />

a tiny fraction of packets <strong>are</strong> lost<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 153 S T A N F O R D U N I V E R S I T Y


Openflow on NetFPGA<br />

on separate slides<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 154 S T A N F O R D U N I V E R S I T Y


Acknowledgments<br />

NetFPGA Team at Stanford University (Past and Present):<br />

Nick McKeown, Glen Gibb, Jad Naous, David Erickson,<br />

G. Adam Covington, John W. Lockwood, Jianying Luo, Brandon Heller,<br />

Paul Hartke, Neda Beheshti, Sara Bolouki, James Zeng,<br />

Jonathan Ellithorpe, Sachidanandan Sambandan<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 155 S T A N F O R D U N I V E R S I T Y


Special thanks to our Partners:<br />

Patrick Lysaght, Veena Kumar, Paul Hartke, Anna Acevedo<br />

Xilinx University Program (XUP)<br />

Other NetFPGA Tutorial Presented At:<br />

SIGMETRICS<br />

See: http://NetFPGA.org/tutorials/<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 156 S T A N F O R D U N I V E R S I T Y


Thanks to our Sponsors:<br />

• Support for the NetFPGA project has been provided<br />

by the following companies and institutions<br />

Disclaimer: Any opinions, findings, conclusions, or recommendations expressed in these<br />

materials do not necessarily reflect the views of the National Science Foundation or of<br />

any other sponsors supporting this project.<br />

NetFPGA Tsinghua Tutorial – May 15-16, 2010 157 S T A N F O R D U N I V E R S I T Y

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!