From bfaa71829c7845b3a060b0b9cf6dcc6ad8e86c02 Mon Sep 17 00:00:00 2001 From: Luke Gorrie Date: Fri, 11 Mar 2016 14:37:38 +0000 Subject: [PATCH] doc/in-a-nutshell.md: High-level overview Add a really high-level overview of what Snabb Switch is all about. This is imported from lukego/blog#10. --- src/Makefile | 2 +- src/doc/.images/FirewallAppNetwork.png | Bin 0 -> 4173 bytes src/doc/.images/KindsOfApps.png | Bin 0 -> 8486 bytes src/doc/.images/Processes.png | Bin 0 -> 5761 bytes src/doc/.images/SimpleApp.png | Bin 0 -> 1612 bytes src/doc/in-a-nutshell.md | 113 ++++++++++++++++++ src/doc/in-a-nutshell.src.md | 159 +++++++++++++++++++++++++ 7 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 src/doc/.images/FirewallAppNetwork.png create mode 100644 src/doc/.images/KindsOfApps.png create mode 100644 src/doc/.images/Processes.png create mode 100644 src/doc/.images/SimpleApp.png create mode 100644 src/doc/in-a-nutshell.md create mode 100644 src/doc/in-a-nutshell.src.md diff --git a/src/Makefile b/src/Makefile index 9fb0370e6d..fd262e78b3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -16,7 +16,7 @@ CSRC = $(shell find . -regex '[^\#]*\.c' -not -regex './arch/.*' -printf '%P ' CHDR = $(shell find . -regex '[^\#]*\.h' -printf '%P ') ASM = $(shell find . -regex '[^\#]*\.dasl' -printf '%P ') ARCHSRC= $(shell find . -regex '^./arch/[^\#]*\.c' -printf '%P ') -RMSRC = $(shell find . -name README.src.md -printf '%P ') +RMSRC = $(shell find . -name '*.src.md' -printf '%P ') # regexp is to include program/foo but not program/foo/bar PROGRAM = $(shell find program -regex '^[^/]+/[^/]+' -type d -printf '%P ') # sort to eliminate potential duplicate of programs.inc diff --git a/src/doc/.images/FirewallAppNetwork.png b/src/doc/.images/FirewallAppNetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..4f3f6ff9b802855941da5c9bfe7f9037f7b1243e GIT binary patch literal 4173 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 literal 0 HcmV?d00001 diff --git a/src/doc/.images/Processes.png b/src/doc/.images/Processes.png new file mode 100644 index 0000000000000000000000000000000000000000..d623631c39917dc7b890a6c56115a207147a7033 GIT binary patch literal 5761 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 literal 0 HcmV?d00001 diff --git a/src/doc/.images/SimpleApp.png b/src/doc/.images/SimpleApp.png new file mode 100644 index 0000000000000000000000000000000000000000..fa92480704a077d45e182aa648dec49cefe553f9 GIT binary patch literal 1612 zcma)-dsNbA7{|%$FJ}R6nJFeQbE)0T)FUlXB&TMOg?h?MVp?V;JBAdod)p14C0$f~Vi`y!wPM)>x|Cz>Wgs?@NjA%PAs5;`k@*E%Y zA}>dqJ@LS3edRW8H6jR6-|vBl%*smB?u$3aIU9O44vq|MWOmt<+~r-}$58v+oFY-K zsxK#(5L6R|R`=Q5U+0TvixjG^XiUzc82MgNe z(i863V!X7yy?u6ec6@wXsdT16=t!bj+4HD(bCRr)==GUnIeQ^kSXK5p3WY+YQe$He zBQ~0w*Xp|hST_6`gHhCX;(X-8!9|5)P#dXJHUy|ts_s!Kx75ke5wTYPLp>6iEPMU> zHJ{HP7#NtI-u|~rAaL8-+Qee<*cb|M1F*1E7`W5-QD+mdnvMh`D1%4wKA8iq`ENsH zF>E%wP7VDXX-M~jl<7h178c_2dUUWD)G|vWz`fD8pM~yR(j}cbRXJzZlsJpJ2^U>l z=X&=5-P_sO+04vLD4Oaka#AXlxw*OB-QDx^^DRRXe8u6F0}@_mXXjbRz)LeU)#8u4 z$o~HRG+HAXNNF%Y@?EgjX!OyR#bXVGh=_=zM{iAXz;k3WQOzN(&COGJ%_4!o3TkR$ zq5gySHMN|@>P{XX?M#o^9~>M^p*%vst*xysTrMn)Z!Q%(lSw2}P*6}xN^2C5^0NWb z(3tKWGdws&k*xJ7_YJ9@l*wq*yeCgQO3x_1A(TAr^dl0RlH}eZPjBxA`c4#zSytvo z?KL$vcC@#To!=~*c>A_tw~SM;gTvuG$0f$Eb2W(rSY2IRqobt9X_HTDYwfsa(ROyT zOS8vib&cI&z8g=6hvS|hBvU+|FM%$X%X=FO3k&C>Ocsw9+XQ6{yy)DP|X zLR-DEL67Re9~`WlgcfilkF5g&0wQ7)TSx9yRf#PKo}Tsf^*IUGF>$_!4vl5}R9@~* z4Y;POa3V+7i}T1&f^G-kgVohqK-#or{*G0)wzj?I;&2lalbPZC2dZYwY62b~cKmpa z%R-ty6tOlv@Yc6-KY^WtgM7d%acXmEF}>i;Su(jG{h-=%AxIad2k%fRWM+n!A3n5K zn2VZe6~YN!k+9~Nt@X^Srv1_lOLcX!DRfxy3Rw=yv^ zGqc1c*@pb8F@bx=@zsSMm8dmE<}4c?E=KU;pcyx>&9U(VjJ?-nm|nYBOR&vbbmxU(o2DJ*QPzrTN* z%n;jJqXn>UG~I7_2Q7Cs0q#LMLNSg?-RS?a$!DGP(S08r_tAp?sH5uKkQ(UfJ4`0i z73jFc89jHurY3OfjoR8;h6RRldT*hx)pcq_RN?J45Ug4nhpv0{$k^D}$LhBVLg__e z(ynqJoB3Y;u03WD`ig93=G@7XzeKTnTXq-qr9^%@IUyznrJp+K>AXQ85UlV&oywKO z^n~QwgFN9z*Qr_ZaF0Ubo9mSk6h{c4&B{vIBTSn1IufUW<`oS+Q5tM!fQ&?1g5dnD y2uszl6hw{&uK* App *---> + | | + +-------+ + + +The name "app" is supposed to make you think of an App Store on your +mobile phone: an element in a collection of fixed-purpose components +that are easy for developers to distribute and for users to install. + +Each app is a "black box" that receives packets from its input links, +processes the packets in its own peculiar way, and transmits packets +on its output links. Snabb Switch developers write new apps when they +need new packet processing functionality. An app could be an I/O +interface towards a network card or a virtual machine, an ethernet +switch, a router, a firewall, or really anything else that can receive +and transmit packets. + + DIAGRAM: KindsOfApps + +-------+ ^ ^ + | | | | + ---->* I/O *---> v v + | | +-*----*-+ + +-------+ | | + <--->* L2 *<--> + +-----------+ | Switch | + ---->* *----> <--->* *<--> + inside| Firewall |outside | | + <----* *<---- +-*----*-+ + +-----------+ ^ ^ + | | + v v + +### App networks + +To solve a networking problem with Snabb Switch you connect apps +together to create an *app network*. + +For example, you could create a inline ("bump in the wire") firewall +device by taking two apps that perform I/O (e.g. 10G ethernet drivers) +and connecting them together via a firewall app that performs packet +filtering. + + DIAGRAM: FirewallAppNetwork + +-------+ +-----------+ +-------+ + | *------->* *-------->* | + | I/O | inside| Firewall |outside | I/O | + | *<-------* *<--------* | + +-------+ +-----------+ +-------+ + +The app network executes as a simple event loop. On each iteration it +receives a batch of approximately 100 packets from the I/O sources and +then drives them through the network to their ultimate destinations. +Then it repeats. This is practical because the whole batch of packets +can fit into the CPU cache at the same time and each app can use the +CPU for a reasonable length of time between "context switches". + +The performance and behavior of each app is mostly independent of the +others. This makes it possible to make practical estimates about +system performance when designing your app network. For example, if +your I/O apps require 50 CPU cycles and your firewall app requires 100 +CPU cycles then you would spend 200 cycles per packet and expect to +handle 10 million packets per second (Mpps) on a 2GHz CPU. + +You can also run multiple app networks in parallel. These each run as +an independent process and each use one CPU core. If you want 200 Mpps +performance then you can run 20 of your firewall app networks each on +a separate CPU core. (Your challenge will be to dispatch traffic to +the processes by some suitable means, for example assigning separate +hardware NICs to each process.) + + DIAGRAM: Processes + +-----+ +-----+ + | | | | + | cRED| | cBLU| + | | | | + +--*--+ +--*--+ + | | + +-----+ +--*--+ +--*--+ +-----+ + | | | | | | | | + | cRED*----* cRED| | cBLU*----* cBLU| + | | | | | | | | + +-----+ +-----+ +-----+ +-----+ + + +-----+ +-----+ +-----+ +-----+ + | | | | | | | | + | cGRE*----* cGRE| | cPNK*----* cPNK| + | | | | | | | | + +-----+ +--*--+ +--*--+ +-----+ + | | + +--*--+ +--*--+ + | | | | + | cGRE| | cPNK| + | | | | + +-----+ +-----+ + + +Separate app networks can pass traffic between each other by simply +using apps that perform inter-process I/O. This is like having a +physical cluster of network devices that are cross-connected with +ethernet links. Generally speaking you can approach app network design +problems in the same way you would approach physical networks. + +### Programs + +Programs are shrink-wrapped applications built on Snabb Switch. They +are front ends that can be used to hide an app network behind a simple +command-line interface for an end user. This means that only system +designers need to think about apps and app networks: end users can use +simpler interfaces reminiscent of familiar tools like tcpdump, netcat, +iperf, and so on. + +Snabb Switch uses the same trick as BusyBox to implement many programs +in the same executable: it behaves differently depending on the name +that you use to invoke it. This means that when you compile Snabb +Switch you get a single executable that supports all available +programs. You can choose a program with a syntax like `snabb +myprogram` or you can `cp snabb /usr/local/bin/myprogram` and then +simply run `myprogram`. + +You can browse the available programs and their documentation in +[src/program/](https://github.com/SnabbCo/snabbswitch/tree/master/src/program). +You can also list the programs included with a given Snabb executable +by running `snabb --help`. + +### Summary + +Now you know what Snabb Switch is about! + +The Snabb Switch community is now busy creating apps, app networks, +and programs. Over time we are improving our tooling and experience +for the common themes such as regression testing, benchmarking, code +optimization, interoperability testing, operation and maintenance +("northbound") interfaces, and so on. This is a lot of fun and we look +forward to continuing this for many years to come. \ No newline at end of file