mirror of
https://github.com/rtbrick/bngblaster.git
synced 2024-05-06 15:54:57 +00:00
370 lines
34 KiB
HTML
370 lines
34 KiB
HTML
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" data-content_root="./">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Performance Guide — BNG Blaster 0.8 documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=80d5e7a1" />
|
||
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
|
||
<link rel="stylesheet" type="text/css" href="_static/tabs.css?v=a5c4661c" />
|
||
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=411f5019" />
|
||
|
||
|
||
<!--[if lt IE 9]>
|
||
<script src="_static/js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
|
||
<script src="_static/jquery.js?v=5d32c60e"></script>
|
||
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||
<script src="_static/documentation_options.js?v=a0e24af7"></script>
|
||
<script src="_static/doctools.js?v=888ff710"></script>
|
||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
<script src="_static/js/theme.js"></script>
|
||
<link rel="index" title="Index" href="genindex.html" />
|
||
<link rel="search" title="Search" href="search.html" />
|
||
<link rel="next" title="Troubleshooting" href="troubleshooting.html" />
|
||
<link rel="prev" title="Controller" href="controller.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="index.html" class="icon icon-home">
|
||
BNG Blaster
|
||
<img src="_static/rtbrick_logo.png" class="logo" alt="Logo"/>
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart Guide</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Interfaces</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="access/index.html">Access Protocols</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="routing/index.html">Routing Protocols</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="streams.html">Traffic Streams</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="http.html">HTTP Emulation</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="nat.html">NAT / CGNAT</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="reports.html">Reports</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="configuration/index.html">Configuration</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="api/index.html">API/CLI</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="controller.html">Controller</a></li>
|
||
<li class="toctree-l1 current"><a class="current reference internal" href="#">Performance Guide</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="#numa">NUMA</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#dpdk">DPDK</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="faq.html">Frequently Asked Questions</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="index.html">BNG Blaster</a>
|
||
</nav>
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<div role="navigation" aria-label="Page navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item active">Performance Guide</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
<a href="_sources/performance.rst.txt" rel="nofollow"> View page source</a>
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<section id="performance-guide">
|
||
<span id="performance"></span><h1>Performance Guide<a class="headerlink" href="#performance-guide" title="Link to this heading"></a></h1>
|
||
<p>The BNG Blaster handles all traffic sent and received (I/O) in the main thread per default.
|
||
With this default behavior, you can achieve between 100.000 and 250.000 PPS bidirectional
|
||
traffic in most environments. Depending on the actual setup, this can be even less or much
|
||
more, which is primarily driven by the single-thread performance of the given CPU.</p>
|
||
<p>Those numbers can be increased by splitting the workload over multiple I/O worker threads.
|
||
Every I/O thread will handle only one interface and direction. It is also possible to start
|
||
multiple threads for the same interface and direction.</p>
|
||
<p>The number of I/O threads can be configured globally for all interfaces or per interface link.</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eth1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The configuration per interface link allows asymmetric thread pools. Assuming you would send
|
||
massive unidirectional traffic from eth1 to eth2. In such a scenario, you would set up multiple
|
||
TX threads and one RX thread on eth1. For eth2 you would do the opposite, meaning to set up
|
||
multiple RX threads but only one TX thread.</p>
|
||
<p>It is also possible to start dedicated threads for TX but remain RX in the main thread or
|
||
vice versa by setting the number of threads to zero (default).</p>
|
||
<p>With multithreading, you should be able to scale up to 8 million PPS bidirectional, depending on
|
||
the actual configuration and setup. This allows starting 1 million flows with 1 PPS per flow over
|
||
at least 4 TX threads to verify all prefixes of a BGP full table for example.</p>
|
||
<p>The configured traffic streams are automatically balanced over all TX threads of the corresponding
|
||
interfaces but a single stream can’t be split over multiple threads to prevent re-ordering issues.</p>
|
||
<p>Enabling multithreaded I/O causes some limitations. First of all, it works only on systems with
|
||
CPU cache coherence, which should apply to all modern CPU architectures. TX threads are not allowed
|
||
for LAG (Link Aggregation) interfaces but RX threads are supported. It is also not possible to capture
|
||
traffic streams send or received on threaded interfaces. All other traffic is still captured on threaded
|
||
interfaces.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>The BNG Blaster is currently tested for 8 million PPS with 10 million flows, which is not a
|
||
hard limitation but everything above should be considered with caution. It is also possible to
|
||
scale far beyond using DPDK-enabled interfaces.</p>
|
||
</div>
|
||
<p>A single stream will be always handled by a single thread to prevent re-ordering.</p>
|
||
<p>It is also recommended to increase the hardware and software queue size of your
|
||
network interface links to the maximum for higher throughput as explained
|
||
in the <a class="reference internal" href="interfaces.html#interfaces"><span class="std std-ref">Operating System Settings</span></a>.</p>
|
||
<p>The packet receives performance can be increased by the number of RX threads and IO slots.</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">20</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"io-slots"</span><span class="p">:</span><span class="w"> </span><span class="mi">32768</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The packet receives performance is also limited by the abilities of your network
|
||
interfaces to properly distribute the traffic over multiple hardware queues using
|
||
receive side scaling (RSS). This is a technology that allows network applications
|
||
to distribute the processing of incoming network packets across multiple CPUs,
|
||
improving performance, RSS uses a hashing function to assign packets to different
|
||
CPUs based on their source and destination addresses and ports. RSS requires
|
||
hardware support from the network adapter and the driver.</p>
|
||
<p>Some network interfaces are not able to distribute traffic for PPPoE/L2TP or even
|
||
MPLS traffic. Even double-tagged VLANs with default the default type 0x8100 is
|
||
often not supported.</p>
|
||
<p>Therefore best results can be reached with single tagged IPoE traffic. Depending
|
||
on the actual network adapter, there are different options to address this
|
||
limitation. For instance, Intel adapters support different
|
||
Dynamic Device Personalization (DDP) to support RSS for PPPoE traffic.</p>
|
||
<p>You can also boost the performance by adjusting some driver settings. For example,
|
||
we found that the following setting improved the performance for
|
||
<a class="reference external" href="https://www.kernel.org/doc/html/v6.6/networking/device_drivers/ethernet/intel/i40e.html">Intel 700 Series</a>
|
||
in some of our tests. However, these settings may vary depending on your specific
|
||
test environment.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 125 tx-usecs 125
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>We are continuously working to increase performance. Contributions, proposals,
|
||
or recommendations on how to further increase performance are welcome!</p>
|
||
</div>
|
||
<section id="numa">
|
||
<h2>NUMA<a class="headerlink" href="#numa" title="Link to this heading"></a></h2>
|
||
<p>NUMA, which stands for Non-Uniform Memory Access, is a computer memory design used in multi-processor systems.
|
||
In a NUMA system, each processor, or a group of processors, has its own local memory. The processors can access
|
||
their own local memory faster than non-local memory, which is the memory local to another processor or shared
|
||
between processors.</p>
|
||
<p>On such systems, the best performance can be achieved by manually assigning RX and TX threads to a set of CPU
|
||
to ensure that the corresponding threads of an interface are running on the same NUMA node. The NUMA node
|
||
of the interface can be derived from the file <code class="docutils literal notranslate"><span class="pre">/sys/class/net/<interface>/device/numa_node</span></code>.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cat /sys/class/net/eth0/device/numa_node
|
||
0
|
||
cat /sys/class/net/eth1/device/numa_node
|
||
1
|
||
</pre></div>
|
||
</div>
|
||
<p>The command <code class="docutils literal notranslate"><span class="pre">lscpu</span></code> returns the number of NUMA nodes with the associated
|
||
CPU’s for each NUMA node.</p>
|
||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>...
|
||
NUMA:
|
||
NUMA node(s): 2
|
||
NUMA node0 CPU(s): 0-17,36-53
|
||
NUMA node1 CPU(s): 18-35,54-71
|
||
</pre></div>
|
||
</div>
|
||
<p>Folowing an example configuration.</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eth0"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">36</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">37</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">38</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">39</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eth1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">18</span><span class="p">,</span><span class="w"> </span><span class="mi">54</span><span class="p">,</span><span class="w"> </span><span class="mi">19</span><span class="p">,</span><span class="w"> </span><span class="mi">55</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">20</span><span class="p">,</span><span class="w"> </span><span class="mi">56</span><span class="p">,</span><span class="w"> </span><span class="mi">21</span><span class="p">,</span><span class="w"> </span><span class="mi">57</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Following a real world example from a system with two CPU sockets (NUMA nodes) and two physical NIC adapters,
|
||
each connected to another socket (NUMA node). This example was optimized to send loss free 20G from
|
||
ens2f2np2, ens2f3np3 (NUMA node 0) to ens5f2np2, ens5f3np3 (NUMA node 1).</p>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ens2f2np2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">36</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">37</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ens2f3np3"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">38</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">39</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ens5f2np2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">18</span><span class="p">,</span><span class="w"> </span><span class="mi">54</span><span class="p">,</span><span class="w"> </span><span class="mi">19</span><span class="p">,</span><span class="w"> </span><span class="mi">55</span><span class="p">,</span><span class="w"> </span><span class="mi">20</span><span class="p">,</span><span class="w"> </span><span class="mi">56</span><span class="p">,</span><span class="w"> </span><span class="mi">21</span><span class="p">,</span><span class="w"> </span><span class="mi">57</span><span class="p">,</span><span class="w"> </span><span class="mi">22</span><span class="p">,</span><span class="w"> </span><span class="mi">58</span><span class="p">,</span><span class="w"> </span><span class="mi">23</span><span class="p">,</span><span class="w"> </span><span class="mi">59</span><span class="p">,</span><span class="w"> </span><span class="mi">24</span><span class="p">,</span><span class="w"> </span><span class="mi">60</span><span class="p">,</span><span class="w"> </span><span class="mi">25</span><span class="p">,</span><span class="w"> </span><span class="mi">61</span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"io-slots-rx"</span><span class="p">:</span><span class="w"> </span><span class="mi">32768</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ens5f3np3"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">26</span><span class="p">,</span><span class="w"> </span><span class="mi">62</span><span class="p">,</span><span class="w"> </span><span class="mi">27</span><span class="p">,</span><span class="w"> </span><span class="mi">63</span><span class="p">,</span><span class="w"> </span><span class="mi">28</span><span class="p">,</span><span class="w"> </span><span class="mi">64</span><span class="p">,</span><span class="w"> </span><span class="mi">29</span><span class="p">,</span><span class="w"> </span><span class="mi">65</span><span class="p">,</span><span class="w"> </span><span class="mi">30</span><span class="p">,</span><span class="w"> </span><span class="mi">66</span><span class="p">,</span><span class="w"> </span><span class="mi">31</span><span class="p">,</span><span class="w"> </span><span class="mi">67</span><span class="p">,</span><span class="w"> </span><span class="mi">32</span><span class="p">,</span><span class="w"> </span><span class="mi">68</span><span class="p">,</span><span class="w"> </span><span class="mi">33</span><span class="p">,</span><span class="w"> </span><span class="mi">69</span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"io-slots-rx"</span><span class="p">:</span><span class="w"> </span><span class="mi">32768</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This example shows well that more RX threads are required than TX threads.</p>
|
||
</section>
|
||
<section id="dpdk">
|
||
<span id="dpdk-usage"></span><h2>DPDK<a class="headerlink" href="#dpdk" title="Link to this heading"></a></h2>
|
||
<p>Using the experimental <a class="reference external" href="https://www.dpdk.org/">DPDK</a> support requires building
|
||
the BNG Blaster from sources with DPDK enabled as explained
|
||
in the corresponding <a class="reference internal" href="install.html#install-dpdk"><span class="std std-ref">installation</span></a> section.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>The official BNG Blaster Debian release packages do not support
|
||
<a class="reference external" href="https://www.dpdk.org/">DPDK</a>!</p>
|
||
</div>
|
||
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interfaces"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"io-slots"</span><span class="p">:</span><span class="w"> </span><span class="mi">32768</span>
|
||
<span class="w"> </span><span class="nt">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0000:23:00.0"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"io-mode"</span><span class="p">:</span><span class="w"> </span><span class="s2">"dpdk"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">7</span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0000:23:00.2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"io-mode"</span><span class="p">:</span><span class="w"> </span><span class="s2">"dpdk"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"rx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">12</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">14</span><span class="p">,</span><span class="mi">15</span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"tx-threads"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"tx-cpuset"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="mi">9</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">11</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"a10nsp"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"__comment__"</span><span class="p">:</span><span class="w"> </span><span class="s2">"PPPoE Server"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0000:23:00.0"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">],</span>
|
||
<span class="w"> </span><span class="nt">"access"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"__comment__"</span><span class="p">:</span><span class="w"> </span><span class="s2">"PPPoE Client"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0000:23:00.2"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pppoe"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"outer-vlan-min"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"outer-vlan-max"</span><span class="p">:</span><span class="w"> </span><span class="mi">4000</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"inner-vlan-min"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"inner-vlan-max"</span><span class="p">:</span><span class="w"> </span><span class="mi">4000</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"stream-group-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="nt">"pppoe"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"reconnect"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="nt">"dhcpv6"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"enable"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span>
|
||
<span class="w"> </span><span class="p">},</span>
|
||
<span class="w"> </span><span class="nt">"streams"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
||
<span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nt">"stream-group-id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"S1"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ipv4"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"direction"</span><span class="p">:</span><span class="w"> </span><span class="s2">"both"</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"pps"</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="p">,</span>
|
||
<span class="w"> </span><span class="nt">"a10nsp-interface"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0000:23:00.0"</span>
|
||
<span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">]</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>DPDK assigns one hardware queue to each RX thread, so you need to increase
|
||
the number of threads to utilize more queues and enhance performance.</p>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||
<a href="controller.html" class="btn btn-neutral float-left" title="Controller" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
<a href="troubleshooting.html" class="btn btn-neutral float-right" title="Troubleshooting" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© Copyright 2020-2024, RtBrick, Inc..</p>
|
||
</div>
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |