Multi Channel DMA Intel® FPGA IP for PCI Express* Design Example User Guide

ID 683517
Date 6/09/2025
Public
Document Table of Contents

3.5.7. Set the Boot Parameters

Follow the steps below to modify the default hugepages setting in the grub files:
  1. Edit the /etc/default/grub file.

    Append the highlighted parameters to the GRUB_CMDLINE_LINUX line in the /etc/default/grub file.

    For Intel CPU:

    GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 intel_iommu=on iommu=pt processor.max_cstate=0 intel_idle.max_cstate=0 intel_pstate=disable panic=1 quiet splash vt.handoff=7"

    For AMD CPU:

    GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 amd_iommu=on iommu=soft processor.max_cstate=0 amd-pstate panic=1 quiet splash vt.handoff=7"

    An Intel CPU example of the /etc/default/grub file on Ubuntu after the edits can be seen below:

    root@bapvecise042:~# cat /etc/default/grub # If you change this file, run 'update-grub' afterwards to update 
    # /boot/grub/grub.cfg. 
    # For full documentation of the options in this file, see: 
    #   info -f grub -n 'Simple configuration' 
    GRUB_DEFAULT="1>2" GRUB_TIMEOUT_STYLE=hidden 
    GRUB_TIMEOUT=0 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` 
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 
    GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=20 intel_iommu=on iommu=pt nprocessor.max_cstate=0 
    intel_idle.max_cstate=0 intel_pstate=disable panic=1 quiet splash vt.handoff=7"
    # Uncomment to enable BadRAM filtering, modify to suit your needs 
    # This works with Linux (no patch required) and with any kernel that obtains 
    # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) 
    #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" 
    # Uncomment to disable graphical terminal (grub-pc only) 
    #GRUB_TERMINAL=console 
    # The resolution used on graphical terminal 
    # note that you can use only modes which your graphic card supports via VBE 
    # you can see them in real GRUB with the command `vbeinfo' 
    #GRUB_GFXMODE=640x480 
    # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux 
    #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries 
    #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start 
    #GRUB_INIT_TUNE="480 440 1" 
    
  2. Generate GRUB configuration files.

    Execute the following command:

    sudo update-grub

  3. Reboot the system.
  4. Verify the changes above by running the following command:

    $ cat /proc/cmdline

  5. Set the hugepages:

    $ echo 40 | sudo tee /proc/sys/vm/nr_hugepages

  6. If the host supports multiple NUMAs, use the following steps:
    1. Check how many NUMAs are enabled on the host.
      $lscpu | grep NUMA
      NUMA node(s): 2
      NUMA node0 CPU(s): 0-15, 32-47
      NUMA node1 CPU(s): 16-31, 48-63
      

      In this example, we have two NUMAs. If only one NUMA is present, ignore the below steps:

    2. Check which device is provisioned:
      $cat /sys/class/pci_bus/<Domain:Bus>/device/numa_node
      
    3. Enable the hugepages, whichever NUMA device is located:
      $echo 40 |> sudo tee /sys/devices/system/node/node<nodenum>\
      /hugepages/hugepages-1048576kB/nr_hugepages
      
    4. Configure the thread sequence in software/user/cli/perfq_app/perfq_app.h based on which NUMA device is located. For example:

      #define THREAD_SEQ "0-15"

  7. Set PCIe_SLOT based on your design example link width configuration. Modify the software flag below in the p0_software/user/common/include/ifc_libmqdma.h and p0_software/dpdk/dpdk/drivers/net/mcdma/rte_pmd_mcdma.h files.

    #define PCIe_SLOT 0 /* 0 - x16, 1 - x8, 2 – x4 */

    Example of software flag setting for x4 link width:

    #define PCIe_SLOT 2