06dcd45ff8
Change-Id: I9fca8fb98502dffc2555f9de7f507b6f006e0e77 Signed-off-by: John DeNisco <jdenisco@cisco.com>
45 lines
2.1 KiB
Markdown
45 lines
2.1 KiB
Markdown
Software Architecture
|
|
=====================
|
|
|
|
The fd.io vpp implementation is a third-generation vector packet
|
|
processing implementation specifically related to US Patent 7,961,636,
|
|
as well as earlier work. Note that the Apache-2 license specifically
|
|
grants non-exclusive patent licenses; we mention this patent as a point
|
|
of historical interest.
|
|
|
|
For performance, the vpp dataplane consists of a directed graph of
|
|
forwarding nodes which process multiple packets per invocation. This
|
|
schema enables a variety of micro-processor optimizations: pipelining
|
|
and prefetching to cover dependent read latency, inherent I-cache phase
|
|
behavior, vector instructions. Aside from hardware input and hardware
|
|
output nodes, the entire forwarding graph is portable code.
|
|
|
|
Depending on the scenario at hand, we often spin up multiple worker
|
|
threads which process ingress-hashes packets from multiple queues using
|
|
identical forwarding graph replicas.
|
|
|
|
VPP Layers - Implementation Taxonomy
|
|
------------------------------------
|
|
|
|
![image](/_images/VPP_Layering.png)
|
|
|
|
- VPP Infra - the VPP infrastructure layer, which contains the core
|
|
library source code. This layer performs memory functions, works
|
|
with vectors and rings, performs key lookups in hash tables, and
|
|
works with timers for dispatching graph nodes.
|
|
- VLIB - the vector processing library. The vlib layer also handles
|
|
various application management functions: buffer, memory and graph
|
|
node management, maintaining and exporting counters, thread
|
|
management, packet tracing. Vlib implements the debug CLI (command
|
|
line interface).
|
|
- VNET - works with VPP\'s networking interface (layers 2, 3, and 4)
|
|
performs session and traffic management, and works with devices and
|
|
the data control plane.
|
|
- Plugins - Contains an increasingly rich set of data-plane plugins,
|
|
as noted in the above diagram.
|
|
- VPP - the container application linked against all of the above.
|
|
|
|
It's important to understand each of these layers in a certain amount of
|
|
detail. Much of the implementation is best dealt with at the API level
|
|
and otherwise left alone.
|