• dpdk 运行testpmd 出现: Couldn‘t get fd on hugepage file (已解决)


    背景:

    因工作需要, 经常用到dpdk, 所以在自己电脑上运行dpdk。

    搭建环境时, 遇到了如题的问题。

    问题步骤:

    1. VMware 创建ubuntu 16 虚拟机。 4G内存,4个cpu。3个网卡。

    2.将dpdk 源码:19.08.2 上传到虚拟机。

    设置环境 变量:

    export RTE_SDK=/home/zyb/share/dpdk/dpdk-stable-19.08.2

    export RTE_TARGET=x86_64-native-linux-gcc      ①

    3.执行dpdk-setup.sh , 选择:[39]x86_64-native-linux-gcc

    这一步是build dpdk 源码。 build好后, 在dpdk/dpdk-stable-19.08.2 目录下会出现新目录:x86_64-native-linux-gcc

    4. 编译成功后, 依次执行dpdk-setup.sh 中的43, 44, 49, 分别是:

    插入IGB_UIO,

    插入VFIO

    绑定需要被DPDK 管的ETH口的PCI 号。 注意我用的eth0, 在绑定前先把eth0 down掉: ifconfig eth0 down.

    5. 修改/etc/default/grub中关于大页的配置如下:

    GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=1G hugepagesz=2M hugepages=1024 isolcpus=0-2"   
     

    6. 执行dpdk-setup.sh 中的

    [53] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

    这个时候报了以下错误:

     解决这个问题, 查看了/proc/meminfo中关于大页的配置如下:

    geTables:         5436 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:     2488460 kB
    Committed_AS:     148236 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:           0 kB
    VmallocChunk:          0 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:         0 kB
    CmaTotal:              0 kB
    CmaFree:               0 kB
    HugePages_Total:       1
    HugePages_Free:        1
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:    1048576 kB

    DirectMap4k:       75584 kB
    DirectMap2M:     3069952 kB
    DirectMap1G:     3145728 kB

    这显然和grub 配置中期望的不一样。 解决方法, 把处grub的配置的, 默认hugepage size改成2M。如下:

    GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=2M hugepagesz=2M hugepages=1024 isolcpus=0-2"
    然后sudo update-grub.

    sudo reboot。 重启后查看:

    /share/dpdk/dpdk-stable-19.08.2$  cat /proc/meminfo
    MemTotal:        4028708 kB
    MemFree:         1445036 kB
    MemAvailable:    1404664 kB
    Buffers:           18500 kB
    Cached:           148224 kB
    SwapCached:            0 kB
    Active:           113728 kB
    Inactive:          73796 kB
    Active(anon):      37508 kB
    Inactive(anon):    13712 kB
    Active(file):      76220 kB
    Inactive(file):    60084 kB
    Unevictable:       56396 kB
    Mlocked:           56396 kB
    SwapTotal:        998396 kB
    SwapFree:         998396 kB
    Dirty:                 0 kB
    Writeback:             0 kB
    AnonPages:         77196 kB
    Mapped:            51312 kB
    Shmem:             17276 kB
    Slab:              52592 kB
    SReclaimable:      22244 kB
    SUnreclaim:        30348 kB
    KernelStack:        5072 kB
    PageTables:       136248 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:     1964172 kB
    Committed_AS:     191504 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:           0 kB
    VmallocChunk:          0 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:     28672 kB
    CmaTotal:              0 kB
    CmaFree:               0 kB
    HugePages_Total:    1024
    HugePages_Free:      766
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB

    DirectMap4k:       79680 kB
    DirectMap2M:     4114432 kB
    DirectMap1G:     2097152 kB

    这下能看到dpdk 分配 了1024 个大页, 每个为2M。

    ---------------------------------------------------------------------------

    现在再执行testpmd 程序报如下的错误:

     testpmd能运行了, 不过显示eth0的信息有错, 研究了下, 因为刚重启了电脑, 需要重新绑定下eth0 到dpdk。 重启绑定后就可以了, 如下所示:

     另外在调试的过程, 还发现了testpmd 说找不到的情况 , 那是因为:

    export RTE_TARGET=xx这里设置错误了, 设置成:

    export RTE_TARGET=x86_64-native-linux-gcc  就可以了,

    我错误的写成了如下:

    export RTE_TARGET=x86_64-native-linuxapp-gcc

  • 相关阅读:
    numpy学习笔记
    中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)
    Gamframwork 检查更新、开始更新 热更的流程
    Leetcode—2331.计算布尔二叉树的值【简单】
    计算首屏时间
    华清远见上海中心22071班--11.2作业
    一定要会用selenium的等待,3种等待方式解读
    内外统一的边缘原生云基础设施架构——火山引擎边缘云
    不知道 MySQL 咋学?刷完牛客这 50 道题就够了!(第三篇)
    电子产品出口日本站PSE认证和METI备案需要哪些资料?
  • 原文地址:https://blog.csdn.net/coolfishbone_joey/article/details/126912705