[dpdk-dev,v3] doc: add performance test guide to the linux gsg

Message ID 1443095316-31699-1-git-send-email-qian.q.xu@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Xu, Qian Q Sept. 24, 2015, 11:48 a.m. UTC
  Add a new guide doc as part of the Linux Getting Started Guide.

The document is a step-by-step guide on how to get high performance
with DPDK on an Intel platform.

It is designed for users who are not familiar with DPDK but would like
to get the best performance with NICs.

Signed-off-by: Qian Xu <qian.q.xu@intel.com>
---

Changes in v3:
* Refined the svg file.
* Made the perf guide more general, not specific with Intel NICs.
* Update BIOS settings.
* Update rst file format.
* Put it into linux_gsg folder.

Changes in v2:
* Created a svg file.
* Add one part about how to check memory channels by dmidecode.
* Add the command about how to check PCIe slot's speed.
* Some doc updates according to the comments.
  

Comments

John McNamara Sept. 24, 2015, 4:25 p.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Qian Xu
> Sent: Thursday, September 24, 2015 12:49 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v3] doc: add performance test guide to the
> linux gsg
> 
> Add a new guide doc as part of the Linux Getting Started Guide.
> 
> The document is a step-by-step guide on how to get high performance with
> DPDK on an Intel platform.
> 
> It is designed for users who are not familiar with DPDK but would like to
> get the best performance with NICs.
> 
> Signed-off-by: Qian Xu <qian.q.xu@intel.com>

Acked-by: John McNamara <john.mcnamara@intel.com>
  
Thomas Monjalon Sept. 25, 2015, 2:10 p.m. UTC | #2
2015-09-24 19:48, Qian Xu:
> --- a/doc/guides/linux_gsg/index.rst
> +++ b/doc/guides/linux_gsg/index.rst
> @@ -47,3 +47,4 @@ Contents
>      build_sample_apps
>      enable_func
>      quick_start
> +    perf_test_intel_platform_nic

Why "test"? What about nic_perf_intel_platform?

> --- /dev/null
> +++ b/doc/guides/linux_gsg/perf_test_intel_platform_nic.rst
[...]
> +Grub Boot Parameters
> +~~~~~~~~~~~~~~~~~~~~
> +
> +The following are some recommendations on GRUB boot settings:
> +
> +#. Use the default grub file as a starting point.
> +
> +#. Reserve 1G huge pages via grub configurations. For example to reserve 8 huge pages of 1G size::
> +
> +      default_hugepagesz=1G hugepagesz=1G hugepages=8
> +
> +#. Isolate CPU cores which will be used for DPDK. For example::
> +
> +      isolcpus=2,3,4,5,6,7,8
> +
> +#. If it wants to use VFIO, use the following additional grub parameters::
> +
> +      iommu=pt intel_iommu=on

These paramters can be set with GRUB, yes.
But they are Linux command line parameters.
I suggest to change the title.

[...]
> +4. Bind the test ports to igb_uio. For example bind two ports to a DPDK compatible driver and check the status:

Not speaking about VFIO here suggests that igb_uio gives better performance.
By the way, UIO/VFIO is not used by mlx4.

[...]
> +   Note: Don't use one 2 lcores on the same core

one 2 lcores? looks to be a typo

[...]
> +5. As it is known that a XL710 40G port need at least two queue pairs to achieve best performance,

Is it well known? At least it is said here.

> +8. Configure the traffic to a traffic generator such as IXIA or Spirent.
> +
> +   * Start creating a stream on packet generator, e.g. IXIA.

Not sure mentioning IXIA or Spirent helps here.
Same comment for the (nice) diagram.

Thanks for the documentation effort.
  
Xu, Qian Q Sept. 29, 2015, 2:41 a.m. UTC | #3
Thomas
Thanks for the comments. See my comments inline below. Let me know if you have objections, if no, I will send a v4 patch soon. 

Thanks
Qian

-----Original Message-----
From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] 
Sent: Friday, September 25, 2015 10:11 PM
To: Xu, Qian Q
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v3] doc: add performance test guide to the linux gsg

2015-09-24 19:48, Qian Xu:
> --- a/doc/guides/linux_gsg/index.rst
> +++ b/doc/guides/linux_gsg/index.rst
> @@ -47,3 +47,4 @@ Contents
>      build_sample_apps
>      enable_func
>      quick_start
> +    perf_test_intel_platform_nic

Why "test"? What about nic_perf_intel_platform?
[Qian] OK. 

> --- /dev/null
> +++ b/doc/guides/linux_gsg/perf_test_intel_platform_nic.rst
[...]
> +Grub Boot Parameters
> +~~~~~~~~~~~~~~~~~~~~
> +
> +The following are some recommendations on GRUB boot settings:
> +
> +#. Use the default grub file as a starting point.
> +
> +#. Reserve 1G huge pages via grub configurations. For example to reserve 8 huge pages of 1G size::
> +
> +      default_hugepagesz=1G hugepagesz=1G hugepages=8
> +
> +#. Isolate CPU cores which will be used for DPDK. For example::
> +
> +      isolcpus=2,3,4,5,6,7,8
> +
> +#. If it wants to use VFIO, use the following additional grub parameters::
> +
> +      iommu=pt intel_iommu=on

These paramters can be set with GRUB, yes.
But they are Linux command line parameters.
I suggest to change the title.
[Qian] OK. 
[...]
> +4. Bind the test ports to igb_uio. For example bind two ports to a DPDK compatible driver and check the status:

Not speaking about VFIO here suggests that igb_uio gives better performance.
By the way, UIO/VFIO is not used by mlx4.
[Qian] In fact not suggests a better performance with igb_uio, but as to VFIO, we need to turn on VT-d in the BIOS, it's an additional step. So here I want to change it as "UIO(e.g: igb_uio) or VFIO(turn on VT-d in the BIOS)", not sure mlx4 uses which module for dpdk running. 
[...]
> +   Note: Don't use one 2 lcores on the same core

one 2 lcores? looks to be a typo
[Qian] Will correct it.
[...]
> +5. As it is known that a XL710 40G port need at least two queue pairs to achieve best performance,

Is it well known? At least it is said here.
[Qian] Maybe well known only in Intel. I will change it as : A XL710 40G port need at least two queue pairs to achieve best performance. 

> +8. Configure the traffic to a traffic generator such as IXIA or Spirent.
> +
> +   * Start creating a stream on packet generator, e.g. IXIA.

Not sure mentioning IXIA or Spirent helps here.
Same comment for the (nice) diagram.
[Qian] *Start creating a stream on packet generator, usually hardware traffic generator can provide line rate traffic, so the NIC's best performance will not be limited by the traffic generator. Hardware traffic generator is like IXIA or Spirent. You can also use high speed software traffic generator to check the NIC's performance. 


Thanks for the documentation effort.
  

Patch

diff --git a/doc/guides/linux_gsg/build_dpdk.rst b/doc/guides/linux_gsg/build_dpdk.rst
index 2680e66..a7d2cda 100644
--- a/doc/guides/linux_gsg/build_dpdk.rst
+++ b/doc/guides/linux_gsg/build_dpdk.rst
@@ -28,6 +28,8 @@ 
     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+.. _linux_gsg_compiling_dpdk:
+
 Compiling the DPDK Target from Source
 =====================================
 
diff --git a/doc/guides/linux_gsg/img/intel_perf_test_setup.svg b/doc/guides/linux_gsg/img/intel_perf_test_setup.svg
new file mode 100644
index 0000000..31c60a6
--- /dev/null
+++ b/doc/guides/linux_gsg/img/intel_perf_test_setup.svg
@@ -0,0 +1,507 @@ 
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="750.94739"
+   height="466.69046"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="performance_test_setup.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4005"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL"
+       style="overflow:visible">
+      <path
+         id="path4066"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="SquareL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="SquareL"
+       style="overflow:visible">
+      <path
+         id="path4075"
+         d="M -5,-5 -5,5 5,5 5,-5 -5,-5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="scale(0.8,0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible">
+      <path
+         id="path4026"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4008"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-8"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4008-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5981"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path5983"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="242.75665"
+     inkscape:cy="174.59234"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:window-width="1168"
+     inkscape:window-height="1153"
+     inkscape:window-x="13"
+     inkscape:window-y="440"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="BG and Nics"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline"
+     transform="translate(-1.4142135,-45.442127)">
+    <rect
+       style="fill:none;stroke:none"
+       id="rect6962"
+       width="750.94739"
+       height="466.69046"
+       x="1.4142135"
+       y="45.442127" />
+    <rect
+       style="fill:#4f87bb;fill-opacity:1;stroke:#4f87bb;stroke-width:1.99999988;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2985"
+       width="219.20311"
+       height="385.99997"
+       x="22.223356"
+       y="63.362179" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="104.55025"
+       y="98.837059"
+       id="text3755"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757"
+         x="104.55025"
+         y="98.837059"
+         style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">IXIA</tspan></text>
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-5-4-9"
+       width="233.5"
+       height="126.23654"
+       x="21.723356"
+       y="116.68151" />
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-6-9"
+       width="80"
+       height="62.142132"
+       x="179.5"
+       y="148.72871" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="38.832031"
+       y="179.08876"
+       id="text3787-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3789-3"
+         x="38.832031"
+         y="179.08876"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Dest MAC: Port 0</tspan><tspan
+         sodipodi:role="line"
+         x="38.832031"
+         y="199.08876"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3814">Dest IP: 2.1.1.1</tspan><tspan
+         sodipodi:role="line"
+         x="38.832031"
+         y="219.08876"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3812">Src IP: Random</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="193.77002"
+       y="186.13669"
+       id="text3755-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-6"
+         x="193.77002"
+         y="186.13669"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port A</tspan></text>
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-5-8"
+       width="233.5"
+       height="126.23654"
+       x="20.499784"
+       y="312.46304" />
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-6-9-6"
+       width="80"
+       height="62.142132"
+       x="178.79289"
+       y="344.51025" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="37.831818"
+       y="375.68961"
+       id="text3787-2-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="37.831818"
+         y="375.68961"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan6829">Dest MAC: Port 1</tspan><tspan
+         sodipodi:role="line"
+         x="37.831818"
+         y="395.68961"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3814-7">Dest IP: 1.1.1.1</tspan><tspan
+         sodipodi:role="line"
+         x="37.831818"
+         y="415.68961"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3812-1">Src IP: Random</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="193.5551"
+       y="381.91824"
+       id="text3755-1-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-6-6"
+         x="193.5551"
+         y="381.91824"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port B</tspan></text>
+    <rect
+       style="fill:#4f87bb;fill-opacity:1;stroke:#4f87bb;stroke-width:1.99999964;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2985-0"
+       width="388.73865"
+       height="379.41064"
+       x="352.02893"
+       y="118.51651" />
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-5-4"
+       width="233.5"
+       height="168.96492"
+       x="340.08374"
+       y="126.68118" />
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-6"
+       width="80"
+       height="62.142132"
+       x="333.83652"
+       y="148.75992" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="465.28302"
+       y="206.81598"
+       id="text3787-2-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="465.28302"
+         y="206.81598"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3812-2">Intel XL 710</tspan><tspan
+         sodipodi:role="line"
+         x="465.28302"
+         y="226.81598"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3954">40G Ethernet</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="349.54794"
+       y="186.15866"
+       id="text3755-1-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-6-5"
+         x="349.54794"
+         y="186.15866"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 0</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="64.119629"
+       y="345.36218"
+       id="text6833"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6835"
+         x="64.119629"
+         y="345.36218">Flow 2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="65.428223"
+       y="151.4325"
+       id="text6833-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6835-2"
+         x="65.428223"
+         y="151.4325">Flow 1</tspan></text>
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-6-7"
+       width="80"
+       height="62.142132"
+       x="334.14633"
+       y="218.72491" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="349.85776"
+       y="256.12366"
+       id="text3755-1-4-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-6-5-7"
+         x="349.85776"
+         y="256.12366"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port X</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="flows"
+     style="display:inline"
+     transform="translate(-1.4142135,-45.442127)">
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-5-4-8"
+       width="233.5"
+       height="168.96492"
+       x="339.71588"
+       y="322.33286" />
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-6-2"
+       width="80"
+       height="62.142132"
+       x="333.46866"
+       y="344.41159" />
+    <path
+       style="fill:none;stroke:#000018;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lend);marker-mid:none;marker-end:url(#Arrow1Lend)"
+       d="m 271.54621,160.17507 171.45382,0 0,234.88637 -185.57109,0"
+       id="path3981"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="460.91516"
+       y="402.46765"
+       id="text3787-2-0-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="460.91516"
+         y="402.46765"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3812-2-8">Intel XL 710</tspan><tspan
+         sodipodi:role="line"
+         x="460.91516"
+         y="422.46765"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3954-0">40G Ethernet</tspan></text>
+    <path
+       style="fill:none;stroke:#000018;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lstart)"
+       d="m 258.67113,197.20047 170.29749,0 0,157.21541 -156.72961,0"
+       id="path3981-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="349.18008"
+       y="381.81033"
+       id="text3755-1-4-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-6-5-0"
+         x="349.18008"
+         y="381.81033"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 1</tspan></text>
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-6-7-8"
+       width="80"
+       height="62.142132"
+       x="333.77847"
+       y="414.37659" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="349.4899"
+       y="451.77533"
+       id="text3755-1-4-5-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-6-5-7-2"
+         x="349.4899"
+         y="451.77533"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port X</tspan></text>
+    <rect
+       style="fill:#759fcc;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759-5-4-8-8"
+       width="153.5"
+       height="364.84363"
+       x="580.25"
+       y="126.87973" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="602.55469"
+       y="354.36218"
+       id="text6927"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="602.55469"
+         y="354.36218"
+         id="tspan6931"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 0 to Port 1</tspan><tspan
+         sodipodi:role="line"
+         x="602.55469"
+         y="374.36218"
+         id="tspan6933"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Port 1 to Port 0 </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
+       x="601.75293"
+       y="323.36218"
+       id="text6937"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan6939"
+         x="601.75293"
+         y="323.36218"
+         style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Forwarding</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="597.66797"
+       y="218.65639"
+       id="text3755-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3757-9"
+         x="597.66797"
+         y="218.65639"
+         style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">IA Platform</tspan><tspan
+         sodipodi:role="line"
+         x="597.66797"
+         y="248.65639"
+         style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
+         id="tspan3948">(Socket 1)</tspan></text>
+  </g>
+</svg>
diff --git a/doc/guides/linux_gsg/index.rst b/doc/guides/linux_gsg/index.rst
index 89800cc..f8b5086 100644
--- a/doc/guides/linux_gsg/index.rst
+++ b/doc/guides/linux_gsg/index.rst
@@ -47,3 +47,4 @@  Contents
     build_sample_apps
     enable_func
     quick_start
+    perf_test_intel_platform_nic
diff --git a/doc/guides/linux_gsg/perf_test_intel_platform_nic.rst b/doc/guides/linux_gsg/perf_test_intel_platform_nic.rst
new file mode 100644
index 0000000..e235c5e
--- /dev/null
+++ b/doc/guides/linux_gsg/perf_test_intel_platform_nic.rst
@@ -0,0 +1,260 @@ 
+How to get best performance with NICs on Intel platforms
+========================================================
+
+This document is a step-by-step guide for getting high performance from DPDK applications on Intel platforms.
+
+
+Hardware and Memory Requirements
+--------------------------------
+
+For best performance use an Intel Xeon class server system such as Ivy Bridge, Haswell or newer.
+
+Ensure that each memory channel has at least one memory DIMM inserted, and that the memory size for each is at least 4GB.
+**Note**: this has one of the most direct effects on performance.
+
+You can check the memory configuration using ``dmidecode`` as follows::
+
+      dmidecode -t memory | grep Locator
+
+      Locator: DIMM_A1
+      Bank Locator: NODE 1
+      Locator: DIMM_A2
+      Bank Locator: NODE 1
+      Locator: DIMM_B1
+      Bank Locator: NODE 1
+      Locator: DIMM_B2
+      Bank Locator: NODE 1
+      ...
+      Locator: DIMM_G1
+      Bank Locator: NODE 2
+      Locator: DIMM_G2
+      Bank Locator: NODE 2
+      Locator: DIMM_H1
+      Bank Locator: NODE 2
+      Locator: DIMM_H2
+      Bank Locator: NODE 2
+
+The sample output above shows a total of 8 channels, from ``A`` to ``H``, where each channel has 2 DIMMs.
+
+You can also use ``dmidecode`` to determine the memory frequency::
+
+      dmidecode -t memory | grep Speed
+
+      Speed: 2133 MHz
+      Configured Clock Speed: 2134 MHz
+      Speed: Unknown
+      Configured Clock Speed: Unknown
+      Speed: 2133 MHz
+      Configured Clock Speed: 2134 MHz
+      Speed: Unknown
+      ...
+      Speed: 2133 MHz
+      Configured Clock Speed: 2134 MHz
+      Speed: Unknown
+      Configured Clock Speed: Unknown
+      Speed: 2133 MHz
+      Configured Clock Speed: 2134 MHz
+      Speed: Unknown
+      Configured Clock Speed: Unknown
+
+The output shows a speed of 2133 MHz (DDR4) and Unknown (not existing).
+This aligns with the previous output which showed that each channel has one memory bar.
+
+
+Network Interface Card Requirements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Use a `DPDK supported <http://dpdk.org/doc/nics>`_ high end NIC such as the Intel XL710 40GbE.
+
+Make sure each NIC has been flashed the latest version of NVM/firmware.
+
+Use PCIe Gen3 slots, such as Gen3 ``x8`` or Gen3 ``x16`` because PCIe Gen2 slots don't provide enough bandwidth
+for 2 x 10GbE and above.
+You can use ``lspci`` to check the speed of a PCI slot using something like the following::
+
+      lspci -s 03:00.1 -vv | grep LnkSta
+
+      LnkSta: Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- ...
+      LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ ...
+
+When inserting NICs into PCI slots always check the caption, such as CPU0 or CPU1 to indicate which socket it is connected to.
+
+Care should be take with NUMA.
+If you are using 2 or more ports from different NICs, it is best to ensure that these NICs on the same CPU socket.
+An example of how to determine this is shown further below.
+
+
+BIOS Settings
+~~~~~~~~~~~~~
+
+The following are some recommendations on BIOS settings. Different platforms will have different BIOS naming
+so the following is mainly for reference:
+
+#. Before starting consider resetting all BIOS settings to their default.
+
+#. Disable all power saving options such as: Power performance tuning, CPU P-State, CPU C3 Report and CPU C6 Report.
+
+#. Select **Performance** as the CPU Power and Performance policy.
+
+#. Disable Turbo Boost to ensure the performance scaling increases with the number of cores.
+
+#. Set memory frequency to the highest available number, NOT auto.
+
+#. Disable all virtualization options when you test the physical function of the NIC, and turn on ``VT-d`` if you wants to use VFIO.
+
+
+Grub Boot Parameters
+~~~~~~~~~~~~~~~~~~~~
+
+The following are some recommendations on GRUB boot settings:
+
+#. Use the default grub file as a starting point.
+
+#. Reserve 1G huge pages via grub configurations. For example to reserve 8 huge pages of 1G size::
+
+      default_hugepagesz=1G hugepagesz=1G hugepages=8
+
+#. Isolate CPU cores which will be used for DPDK. For example::
+
+      isolcpus=2,3,4,5,6,7,8
+
+#. If it wants to use VFIO, use the following additional grub parameters::
+
+      iommu=pt intel_iommu=on
+
+
+Configurations before running DPDK
+----------------------------------
+
+1. Build the DPDK target and reserve huge pages.
+   See the earlier section on :ref:`linux_gsg_hugepages` for more details.
+
+   The following shell commands may help with building and configuration:
+
+   .. code-block:: console
+
+      # Build DPDK target.
+      cd dpdk_folder
+      make install T=x86_64-native-linuxapp-gcc -j
+
+      # Get the hugepage size.
+      awk '/Hugepagesize/ {print $2}' /proc/meminfo
+
+      # Get the total huge page numbers.
+      awk '/HugePages_Total/ {print $2} ' /proc/meminfo
+
+      # Unmount the hugepages.
+      umount `awk '/hugetlbfs/ {print $2}' /proc/mounts`
+
+      # Create the hugepage mount folder.
+      mkdir -p /mnt/huge
+
+      # Mount to the specific folder.
+      mount -t hugetlbfs nodev /mnt/huge
+
+2. Check the CPU layout using using the DPDK ``cpu_layout`` utility:
+
+   .. code-block:: console
+
+      cd dpdk_folder
+
+      tools/cpu_layout.py
+
+   Or run ``lscpu`` to check the the cores on each socket.
+
+3. Check your NIC id and related socket id:
+
+   .. code-block:: console
+
+      # List all the NICs with PCI address and device IDs.
+      lspci -nn | grep Eth
+
+   For example suppose your output was as follows::
+
+      82:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+      82:00.1 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+      85:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+      85:00.1 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+
+   Check the PCI device related numa node id:
+
+   .. code-block:: console
+
+      cat /sys/bus/pci/devices/0000\:xx\:00.x/numa_node
+
+   Usually ``0x:00.x`` is on socket 0 and ``8x:00.x`` is on socket 1.
+   **Note**: To get the best performance, ensure that the core and NICs are in the same socket.
+   In the example above ``85:00.0`` is on socket 1 and should be used by cores on socket 1 for the best performance.
+
+4. Bind the test ports to igb_uio. For example bind two ports to a DPDK compatible driver and check the status:
+
+   .. code-block:: console
+
+
+      # Bind ports 82:00.0 and 85:00.0 to dpdk driver
+      ./dpdk_folder/tools/dpdk_nic_bind.py -b igb_uio 82:00.0 85:00.0
+
+      # Check the port driver status
+      ./dpdk_folder/tools/dpdk_nic_bind.py --status
+
+   See ``dpdk_nic_bind.py --help`` for more details.
+
+
+More details about DPDK setup and Linux kernel requirements see :ref:`linux_gsg_compiling_dpdk`.
+
+
+Example of getting best performance for an Intel NIC
+----------------------------------------------------
+
+The following is an example of running the DPDK ``l3fwd`` sample application to get high performance with an
+Intel server platform and Intel XL710 NICs.
+For specific 40G NIC configuration please refer to the i40e NIC guide.
+
+The example scenario is to get best performance with two Intel XL710 40GbE ports.
+See :numref:`figure_intel_perf_test_setup` for the performance test setup.
+
+.. _figure_intel_perf_test_setup:
+
+.. figure:: img/intel_perf_test_setup.*
+
+   Performance Test Setup
+
+
+1. Add two Intel XL710 NICs to the platform, and use one port per card to get best performance.
+   The reason for using two NICs is to overcome a PCIe Gen3's limitation since it cannot provide 80G bandwidth
+   for two 40G ports, but two different PCIe Gen3 x8 slot can.
+   Refer to the sample NICs output above, then we can select ``82:00.0`` and ``85:00.0`` as test ports::
+
+      82:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+      85:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
+
+2. Connect the ports to the traffic generator, such as IXIA and Spirent.
+
+3. Check the PCI devices numa node (socket id) and get the cores number on the exact socket id.
+   In this case, ``82:00.0`` and ``85:00.0`` are both in socket 1, and the cores on socket 1 in the referenced platform
+   are 18-35 and 54-71.
+   Note: Don't use one 2 lcores on the same core (e.g core18 has 2 lcores, lcore18 and lcore54), instead, use 2 logical
+   cores from different cores (e.g core18 and core19).
+
+4. Bind these two ports to igb_uio.
+
+5. As it is known that a XL710 40G port need at least two queue pairs to achieve best performance, then two queues per port
+   will be required, and each queue pair will need a dedicated CPU core for receiving/transmitting packets.
+
+6. The DPDK sample application ``l3fwd`` will be used for performance testing, with using two ports for bi-directional forwarding.
+   Compile the ``l3fwd sample`` with the default lpm mode.
+
+7. The command line of running l3fwd would be something like the followings::
+
+      ./l3fwd -c 0x3c0000 -n 4 -w 82:00.0 -w 85:00.0 \
+              -- -p 0x3 --config '(0,0,18),(0,1,19),(1,0,20),(1,1,21)'
+
+   This means that the application uses core 18 for port 0, queue pair 0 forwarding, core 19 for port 0, queue pair 1 forwarding,
+   core 20 for port 1, queue pair 0 forwarding, and core 21 for port 1, queue pair 1 forwarding.
+
+
+8. Configure the traffic to a traffic generator such as IXIA or Spirent.
+
+   * Start creating a stream on packet generator, e.g. IXIA.
+
+   * Set the Ethernet II type to 0x0800
diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst
index ebed418..455810e 100644
--- a/doc/guides/linux_gsg/sys_reqs.rst
+++ b/doc/guides/linux_gsg/sys_reqs.rst
@@ -28,6 +28,7 @@ 
     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+
 System Requirements
 ===================
 
@@ -153,6 +154,8 @@  Note also that Red hat* Linux* 6.2 and 6.3 uses a 2.6.32 kernel that already has
     *   HPET and HPET_MMAP configuration options should also be enabled if HPET  support is required.
         See :ref:`Section 5.1 High Precision Event Timer (HPET) Functionality <High_Precision_Event_Timer>` for more details.
 
+.. _linux_gsg_hugepages:
+
 Use of Hugepages in the Linux* Environment
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~