DPDK 学习第一天

DPDK

环境: wsl2 Ubuntu (不建议用wsl)

编译安装

安装必要的工具

bash 复制代码
sudo apt install -y \
  build-essential \
  meson ninja-build \
  python3-pip python3-pyelftools \
  libnuma-dev \
  pciutils ethtool \
  git wget

下载安装dpdk

bash 复制代码
wget https://fast.dpdk.org/rel/dpdk-22.11.4.tar.xz
tar xf dpdk-22.11.4.tar.xz
cd dpdk-stable-22.11.4
mkdir build && cd build
meson setup ..
ninja
sudo ninja install

HugePage(大页内存)

bash 复制代码
sudo nano /etc/sysctl.conf
# 添加:
vm.nr_hugepages=1024

sudo nano /etc/fstab
# 添加:
hugetlbfs /dev/hugepages hugetlbfs defaults 0 0

重启后生效

题主用的是wsl Ubuntu, powershell 执行wsl --shutdown

  • 检查是否生效 mount | grep huge

  • mount | grep huge

Hello 程序

c 复制代码
#include <stdio.h>
#include <rte_eal.h>
#include <rte_lcore.h>

/* 每个 lcore 上执行的函数 */
static int
lcore_hello(__rte_unused void *arg)
{
    unsigned lcore_id;

    /* 获取当前执行代码的逻辑核 ID */
    lcore_id = rte_lcore_id();

    /* 打印当前核信息 */
    printf("hello from core %u\n", lcore_id);

    return 0;   /* 返回值会被 EAL 收集 */
}

/* 主函数 */
int
main(int argc, char **argv)
{
    int ret;
    unsigned lcore_id;

    /* ================================
     * 1. 初始化 EAL(核心入口)
     * ================================ */
    ret = rte_eal_init(argc, argv);
    if (ret < 0)
        rte_panic("Cannot init EAL\n");

    /*
     * rte_eal_init 做的事情:
     * - 解析命令行参数(如 -l coremask)
     * - 初始化 hugepage 内存
     * - 初始化多核环境(lcore)
     * - 初始化设备(PCI/VFIO)
     * - 建立主从线程模型
     */

    /* ================================
     * 2. 在每个 worker lcore 上启动任务
     * ================================ */
    RTE_LCORE_FOREACH_WORKER(lcore_id) {

        /*
         * 在指定 lcore 上异步执行函数
         *
         * 参数:
         *  - 函数指针(每个核执行的函数)
         *  - 参数(这里传 NULL)
         *  - 指定的 lcore ID
         */
        rte_eal_remote_launch(lcore_hello, NULL, lcore_id);
    }

    /* ================================
     * 3. 主核(main lcore)也执行同样函数
     * ================================ */
    lcore_hello(NULL);

    /* ================================
     * 4. 等待所有 worker 核执行完成
     * ================================ */
    rte_eal_mp_wait_lcore();

    /* ================================
     * 5. 释放 EAL 资源(⚠️ 建议打开)
     * ================================ */
    // rte_eal_cleanup();

    return 0;
}
  • wsl 上执行该程序有段错误,不知道具体原因,先把rte_eal_cleanup注释掉
  • 其他错误暂时忽略掉
相关推荐
白猫不黑20 小时前
从运维到网络安全:转行优势、路径与薪资前景全解析
运维·网络·web安全·网络安全·信息安全·渗透测试
dog25020 小时前
多路径聚合效率的统计理论
网络·tcp/ip
草莓熊Lotso20 小时前
【Linux网络加餐】手动部署:SSH 与 Web 服务实战 + 底层原理全解析
linux·运维·网络·人工智能·python·langchain·ssh
剑锋所指,所向披靡!20 小时前
TCP并发服务器
服务器·网络·tcp/ip
网安蟹佬霸20 小时前
密码学安全实战:从加密原理到哈希破解的完整攻防指南
网络·算法·安全·web安全·开源·密码学·哈希算法
AI备忘录21 小时前
(十一)DHCP 配置命令五厂商对照:华为 华三 锐捷 迈普 思科
服务器·网络·网络协议·网络安全·华为
迪康coolmu21 小时前
企业文件外发防泄漏实践:从通道封堵到三层全链路管控
大数据·运维·网络·人工智能·安全·阿里云
星恒讯工业路由器1 天前
新一代通信网:从“连接万物”到“智联万物”的关键跃迁
网络·物联网·智能路由器·工业路由器·工业物联网·5g-a·新一代通信网
暴力求解1 天前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
石头猫灯1 天前
WordPress wp2shell 漏洞链完整拆解流程
网络·数据结构·安全·web安全