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