aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/flow
AgeCommit message (Expand)AuthorFilesLines
2018-06-04flow:add enabled hw format functionEyal Bari2-0/+25
2018-05-17flow:redirect to nodeEyal Bari1-0/+8
2018-05-10vnet: device flow offload infraDamjan Marion3-0/+818
2018-05-04Flow: Rename IPFIX exporter.Ole Troan8-2572/+0
2018-02-07Refactor vlib_buffer flagsDamjan Marion1-1/+1
2018-01-23VPPAPIGEN: vppapigen replacement in Python PLY.Ole Troan1-1/+1
2018-01-11api: remove transport specific code from handlersFlorin Coras1-15/+15
2018-01-09api: refactor vlibmemoryFlorin Coras1-5/+4
2018-01-08NAT64: IPFix (VPP-1106)Matus Fabian1-1/+5
2017-11-26VPP-252 Coding standards cleanup - vnet/vnet/flowSwarup Nayak6-563/+663
2017-10-09vppapigen: support per-file (major,minor,patch) version stampsDave Barach1-0/+2
2017-05-30Flowprobe: Stateful flows and IPv6, L4 recordingOle Troan4-11/+17
2017-05-24ipfix: make IPFIX work for all skip_n_vectors values (VPP-204)Juraj Sloboda1-22/+23
2017-04-25"autoreply" flag: autogenerate standard xxx_reply_t messagesDave Barach1-29/+3
2017-04-21CGN: IPFIX loggingMatus Fabian1-1/+2
2017-03-01VPP-598: tcp stack initial commitDave Barach1-1/+1
2017-01-25API refactoring : flowPavel Kotucek2-0/+570
2016-12-28Reorganize source tree to use single autotools instanceDamjan Marion6-0/+1915
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ .highlight .mb { color: #ae81ff } /* Literal.Number.Bin */ .highlight .mf { color: #ae81ff } /* Literal.Number.Float */ .highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ .highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ .highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ .highlight .sa { color: #e6db74 } /* Literal.String.Affix */ .highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ .highlight .sc { color: #e6db74 } /* Literal.String.Char */ .highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ .highlight .sd { color: #e6db74 } /* Literal.String.Doc */ .highlight .s2 { color: #e6db74 } /* Literal.String.Double */ .highlight .se { color: #ae81ff } /* Literal.String.Escape */ .highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ .highlight .si { color: #e6db74 } /* Literal.String.Interpol */ .highlight .sx { color: #e6db74 } /* Literal.String.Other */ .highlight .sr { color: #e6db74 } /* Literal.String.Regex */ .highlight .s1 { color: #e6db74 } /* Literal.String.Single */ .highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ .highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #a6e22e } /* Name.Function.Magic */ .highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
NFV Service Density
-------------------

Network Function Virtualization (NFV) service density tests focus on
measuring total per server throughput at varied NFV service “packing”
densities with vswitch providing host dataplane. The goal is to compare
and contrast performance of a shared vswitch for different network
topologies and virtualization technologies, and their impact on vswitch
performance and efficiency in a range of NFV service configurations.

Each NFV service instance consists of a set of Network Functions (NFs),
running in VMs (VNFs) or in Containers (CNFs), that are connected into a
virtual network topology using VPP vswitch running in Linux user-mode.
Multiple service instances share the vswitch that in turn provides per
service chain forwarding context(s). In order to provide a most complete
picture, each network topology and service configuration is tested in
different service density setups by varying two parameters:

- Number of service instances (e.g. 1, 2, 4, 6, 8, 10).
- Number of NFs per service instance (e.g. 1, 2, 4, 6, 8, 10).

Implementation of NFV service density tests in |csit-release| is using two NF
applications:

- VNF: VPP of the same version as vswitch running in KVM VM, configured with /8
  IPv4 prefix routing.
- CNF: VPP of the same version as vswitch running in Docker Container,
  configured with /8 IPv4 prefix routing.

Tests are designed such that in all tested cases VPP vswitch is the most
stressed application, as for each flow vswitch is processing each packet
multiple times, whereas VNFs and CNFs process each packets only once. To
that end, all VNFs and CNFs are allocated enough resources to not become
a bottleneck.

Service Configurations
~~~~~~~~~~~~~~~~~~~~~~

Following NFV network topologies and configurations are tested:

- VNF Service Chains (VSC) with L2 vswitch

  - *Network Topology*: Sets of VNFs dual-homed to VPP vswitch over
    virtio-vhost links. Each set belongs to separate service instance.
  - *Network Configuration*: VPP L2 bridge-domain contexts form logical
    service chains of VNF sets and connect each chain to physical
    interfaces.

- CNF Service Chains (CSC) with L2 vswitch

  - *Network Topology*: Sets of CNFs dual-homed to VPP vswitch over
    memif links. Each set belongs to separate service instance.
  - *Network Configuration*: VPP L2 bridge-domain contexts form logical
    service chains of CNF sets and connect each chain to physical
    interfaces.

- CNF Service Pipelines (CSP) with L2 vswitch

  - *Network Topology*: Sets of CNFs connected into pipelines over a
    series of memif links, with edge CNFs single-homed to VPP vswitch
    over memif links. Each set belongs to separate service instance.
  - *Network Configuration*: VPP L2 bridge-domain contexts connect each
    CNF pipeline to physical interfaces.

Thread-to-Core Mapping
~~~~~~~~~~~~~~~~~~~~~~

CSIT defines specific ratios for mapping software threads of vswitch and
VNFs/CNFs to physical cores, with separate ratios defined for main
control threads and data-plane threads.

In |csit-release| NFV service density tests run on Intel Xeon testbeds
with Intel Hyper-Threading enabled, so each physical core is associated
with a pair of sibling logical cores corresponding to the hyper-threads.

|csit-release| executes tests with the following software thread to
physical core mapping ratios:

- vSwitch

  - Data-plane on single core

    - (main:core) = (1:1) => 1mt1c - 1 main thread on 1 core.
    - (data:core) = (1:1) => 2dt1c - 2 Data-plane Threads on 1 Core.

  - Data-plane on two cores

    - (main:core) = (1:1) => 1mt1c - 1 Main Thread on 1 Core.
    - (data:core) = (1:2) => 4dt2c - 4 Data-plane Threads on 2 Cores.

- VNF and CNF

  - Data-plane on single core

    - (main:core) = (2:1) => 2mt1c - 2 Main Threads on 1 Core, 1 Thread
      per NF, core shared between two NFs.
    - (data:core) = (1:1) => 2dt1c - 2 Data-plane Threads on 1 Core per
      NF.

  - Data-plane on single logical core (Two NFs per physical core)

    - (main:core) = (2:1) => 2mt1c - 2 Main Threads on 1 Core, 1 Thread
      per NF, core shared between two NFs.
    - (data:core) = (2:1) => 2dt1c - 2 Data-plane Threads on 1 Core, 1
      Thread per NF, core shared between two NFs.

Maximum tested service densities are limited by a number of physical
cores per NUMA. |csit-release| allocates cores within NUMA0. Support for
multi NUMA tests is to be added in future release.