• DPDK 与DPDKPktgen 安装


    文本将介绍DPDK与Pktgen的安装。

    安装包下载

    DPDK与DPDK-Pktgen下载

    # git clone https://dpdk.org/git/dpdk
    # git clone http://dpdk.org/git/apps/pktgen-dpdk
    

    安装DPDK

    首先安装DPDK的必备库。

    #!/bin/sh
    
    yum update -y --allowerasing --skip-broken --nobest
    yum install -y gcc-toolset-9
    yum install -y zlib-devel
    yum install -y libnl3-devel
    yum install -y boost-devel
    yum install -y systemd-devel
    yum install -y yasm
    yum install -y lz4-devel
    yum install -y elfutils-libelf-devel
    yum install -y openssl-devel
    yum install -y numactl-devel
    yum install -y python3
    pip3 install mwcp # python3需要安装 mwcp , 才可以继续安装meson build, 
    pip3 install meson # Build DPDK和DPDK-pktgen的工具
    pip3 install ninja # 安装DPDK和DPDK-pktgen的工具
    

    meson 如果安装不上去,

    设置大页内存

    设置大页内存有两种方式,通过挂载或者通过修改grub。

    挂载的方式如下:

    echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
    mkdir /mnt/huge
    mount -t hugetlbfs pagesize=1GB/mnt/huge
    # modprobe vfio
    # modprobe vfio_pci
    # modprobe uio_pci_generic
    # modprobe vfio enable_unsafe_noiommu_mode=1
    # echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
    

    修改grub的方式如下:进入/etc/default/grub,把 default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt 添加到GRUB_CMDLINE_LINUX:

    # vim /etc/default/grub
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt"
    GRUB_DISABLE_RECOVERY="true"
    GRUB_ENABLE_BLSCFG=true
    
    

    重新载入grub并重启:

    grub2-mkconfig -o /boot/grub2/grub.cfg
    reboot
    

    通过grep Huge /proc/meminfo检查是否设置成功:

    AnonHugePages:    149504 kB
    ShmemHugePages:        0 kB
    HugePages_Total:     100
    HugePages_Free:      100
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:    1048576 kB
    Hugetlb:        104857600 kB
    

    有时候会出现这个错误:

    [root@localhost grub2]# grub2-mkconfig -o /boot/grub2/grub.cfg
    Generating grub configuration file ...
    /usr/bin/grub2-editenv: error: environment block too small.
    [root@localhost grub2]# ls
    grub.cfg  grub.cfg.new  grub.cfg.old  grubenv
    

    这一般是grubenv文件配置导致的,该文件是environment block, 环境锁,在该文件中将default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt添加到kernelopts中(与grub.cfg一致)。

    # GRUB Environment Block
    #saved_entry=4df9ab5a7ada4793a22d0d4668f7e914-4.18.0-193.el8.x86_64
    #saved_entry=1
    kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt
    boot_success=0
    

    设置大页内存,可以参考:

    Setup Hugepages

    Setup HugePages 2

    安装Pktgen

    Pktgen安装必须要有的库有:

    libpcap # 数据包捕获函数库
    meson
    ninja
    pkg-config # 指向头文件和库文件的工具,给编译器使用,类似快捷方式
    

    进入pktgen源文件目录进行安装:

    cd pktgen-dpdk
    meson build # meson编译时容易报错
    ninja 
    ninja install
    

    在执行meson build时,可能会出现以下问题:

    Found pkg-config: /usr/bin/pkg-config (1.4.2)
    Found CMake: /usr/bin/cmake (3.18.2)
    Run-time dependency libdpdk found: NO (tried pkgconfig and cmake)
    
    meson.build:62:0: ERROR: Dependency "libdpdk" not found, tried pkgconfig and cmake
    

    显示没有找到dpdk相关的库,原因在于dpdk编译时生成的库并没有放入/usr/lib与/lib中。dpdk相关的库数量非常多,如果直接拖动到这两个文件夹中,不方便管理。因此可以采用ld.so的方式进行类似"快捷方式"的连接,dpdk的库不需要移动位置就可以被其他的程序调用。

    解决方法如下:

    先将已安装的dpdk全部删除干净,目的是重新安装DPDK且其lib有一个固定的位置。
    如果是只删除原来用meson和ninja安装的DPDK, 直接执行:

    ninja uninstall 
    

    再删除创建的dpdk-xxx/build文件夹。

    但是有可能机器里安装了DPDK在其他位置。

    find /usr/ -type d -name "dpdk" -exec rm -rf {} #在/usr/下寻找所有带有"dpdk"字符的目录 并且删除所有结果
    find /lib/ -type d -name "dpdk" -exec rm -rf {} 
    find /lib64/ -type f -name "librte" -exec rm -rf {} #在/lib64/下寻找带有"librte"字符的文件,并且删除所有结果
    find /usr/ -type f -name "librte" -exec rm -rf {}
    find /lib/ -type f -name "librte" -exec rm -rf {}
    

    执行完再重新安装DPDK,一般安装完之后的库在/lib64/下(如果在其他的地方也没有问题,仍然使用ldconfig 进行配置)。安装过程上文已写出。关键在于安装完毕之后配置libdpdk的路径。新版的DPDK安装完之后并没有名叫“libdpdk”的包,而是各种分为了许许多多名字不一的包,可以在dpdk-xxx/build/lib中看到,需要将该目录中的所有库文件被ld.so指向。

    配置ldconfig文件:

    # vim /etc/ld.so.conf.d/pktgen.conf
    # 在该配置文件中加入需要指向的库文件目录
    
    /usr/local/lib64
    /dpdk-20.11/build/lib
    

    在命令行模式下执行export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfigldconfig,之后就可以顺利编译pktgen了:

    # cd dpdk-pktgen
    yum install -y libpcap-devel
    meson  -Denable_kmods=true -Dexamples=all build
    ninja
    ninja install
    
  • 相关阅读:
    Solaris引导和关闭
    systemctl
    [Poj3281]Dining(最大流)
    [Poj1149]Pigs(最大流)
    [Bzoj2588]Count on a tree(主席树+LCA)
    [BZOJ3524]区间问题(主席树)
    [Poj2761]Feed the dogs(主席树)
    [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化)
    [BSOJ2684]锯木厂选址(斜率优化)
    [Hdu3507]Print Article(斜率优化)
  • 原文地址:https://www.cnblogs.com/goto2091/p/15939960.html
Copyright © 2020-2023  润新知