<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hardware Acceleration on OCUDU India Docs</title><link>https://docs.ocuduindia.org/docs/hardware-acceleration/</link><description>Recent content in Hardware Acceleration on OCUDU India Docs</description><generator>Hugo</generator><language>en</language><atom:link href="https://docs.ocuduindia.org/docs/hardware-acceleration/index.xml" rel="self" type="application/rss+xml"/><item><title>Intel ACC100 LDPC offload</title><link>https://docs.ocuduindia.org/docs/hardware-acceleration/acc100-ldpc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.ocuduindia.org/docs/hardware-acceleration/acc100-ldpc/</guid><description>&lt;div class="pageinfo pageinfo-info"&gt;
&lt;p&gt;&lt;strong&gt;Scope:&lt;/strong&gt; hardware-accelerated LDPC encoding (PDSCH) and decoding (PUSCH)
on Intel ACC100 vRAN accelerator cards, with full upper-PHY metrics
instrumentation so operators can directly compare CPU-software and
HW-offload performance in production logs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introduced in commit:&lt;/strong&gt; &lt;code&gt;aa6db7d066&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="highlights"&gt;Highlights&lt;a class="td-heading-self-link" href="#highlights" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LDPC offload for both PDSCH and PUSCH&lt;/strong&gt; the most CPU-heavy channel-coding
steps move off the host and onto the accelerator.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration-driven&lt;/strong&gt; enable or disable via the DU YAML; no code changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-VF scaling&lt;/strong&gt; allowlisting additional ACC100 VFs automatically
spreads load across them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unified metrics&lt;/strong&gt; the same per-block PHY metric fields populate whether
LDPC runs in software (AVX-512) or on the accelerator, enabling direct
side-by-side comparison from one log format.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Measured gains on real traffic&lt;/strong&gt; significantly lower PUSCH decode
latency, tighter tail latency, higher processor throughput, and reduced
upper-PHY uplink CPU (see &lt;a href="https://docs.ocuduindia.org/docs/hardware-acceleration/acc100-ldpc/#7-results"&gt;§7&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1-prerequisites"&gt;1. Prerequisites&lt;a class="td-heading-self-link" href="#1-prerequisites" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="11-hardware"&gt;1.1 Hardware&lt;a class="td-heading-self-link" href="#11-hardware" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Intel &lt;strong&gt;ACC100&lt;/strong&gt; PCIe card, SR-IOV capable; at least one VF exposed to the host.&lt;/li&gt;
&lt;li&gt;x86-64 CPU with AVX2 (AVX-512 recommended for the software-fallback path).&lt;/li&gt;
&lt;li&gt;≥ &lt;strong&gt;2 GB of 2 MiB hugepages&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;PCIe slot on the &lt;strong&gt;same NUMA node&lt;/strong&gt; as the upper-PHY worker cores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-software"&gt;1.2 Software&lt;a class="td-heading-self-link" href="#12-software" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Minimum version&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;DPDK&lt;/td&gt;
 &lt;td&gt;22.11&lt;/td&gt;
 &lt;td&gt;Tested with 25.11; ACC100 PMD (&lt;code&gt;baseband_acc&lt;/code&gt;) required.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Linux kernel&lt;/td&gt;
 &lt;td&gt;5.15+&lt;/td&gt;
 &lt;td&gt;IOMMU enabled (&lt;code&gt;intel_iommu=on iommu=pt&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pf_bb_config&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;24.03+&lt;/td&gt;
 &lt;td&gt;PF configurator daemon; must run continuously.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DU build flags&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ENABLE_DPDK=True&lt;/code&gt;, &lt;code&gt;ENABLE_PDSCH_HWACC=True&lt;/code&gt;, &lt;code&gt;ENABLE_PUSCH_HWACC=True&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;See &lt;a href="https://docs.ocuduindia.org/docs/hardware-acceleration/acc100-ldpc/#5-build-guide"&gt;§5&lt;/a&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-kernel-and-vfio-setup"&gt;1.3 Kernel and VFIO setup&lt;a class="td-heading-self-link" href="#13-kernel-and-vfio-setup" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Kernel boot parameters (then update-grub + reboot):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;intel_iommu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;on &lt;span class="nv"&gt;iommu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pt &lt;span class="nv"&gt;hugepagesz&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2M &lt;span class="nv"&gt;hugepages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1024&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hugepage mount if not done by distro:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;1024&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Load VFIO modules:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo modprobe vfio-pci
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /sys/module/vfio_pci/parameters/enable_sriov &lt;span class="c1"&gt;# if kernel-builtin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create one SR-IOV VF and bind it to vfio-pci:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee /sys/bus/pci/devices/&amp;lt;ACC100_PF_BDF&amp;gt;/sriov_numvfs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dpdk-devbind.py --bind&lt;span class="o"&gt;=&lt;/span&gt;vfio-pci &amp;lt;ACC100_VF_BDF&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Start pf_bb_config holding the PF group open with a VF token.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# The token (UUID) is required in the DU&amp;#39;s EAL args.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo /opt/pf-bb-config/pf_bb_config ACC100 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -c /opt/pf-bb-config/acc100/acc100_config_vf_5g.cfg &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &amp;lt;UUID&amp;gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After setup, &lt;code&gt;dpdk-test-bbdev&lt;/code&gt; should enumerate the VF as &lt;code&gt;intel_acc100_vf&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>