You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DPDK PMD设备无法停止:memif设备关闭流程报错求助

DPDK Memif设备关闭顺序问题排查与修复

错误原因解析

返回的错误码-95对应DPDK的RTE_ENOTSUP(操作不支持),核心问题出在状态不匹配:

  • 当memif设备处于非运行状态(如已断开、未启动)时,调用rte_eth_dev_stop()或rte_eth_promiscuous_disable()会因操作不符合当前设备状态返回不支持错误
  • memif_disconnect()的回调注销失败,是因为设备状态异常时,控制通道的回调已经被清理或不存在,导致断开操作无法执行

正确关闭流程与代码示例

memif作为DPDK虚拟以太网设备,关闭时需要先校验设备当前状态,避免无效操作,正确步骤如下:

  1. 先获取设备状态,仅当设备处于启动状态时执行stop操作
  2. 检查混杂模式是否开启,仅在开启状态下执行关闭操作
  3. 最后执行设备关闭(该API会强制清理所有残留资源)

示例代码:

struct rte_eth_dev_info dev_info;
uint8_t promisc_enabled = 0;

// 获取设备信息,校验状态合法性
if (rte_eth_dev_info_get(portId, &dev_info) == 0) {
    // 仅设备处于启动状态时执行stop
    if (dev_info.state == RTE_ETH_DEV_STARTED) {
        rte_eth_dev_stop(portId);
    }

    // 先确认混杂模式已开启,再执行关闭操作
    if (rte_eth_promiscuous_get(portId, &promisc_enabled) == 0 && promisc_enabled) {
        rte_eth_promiscuous_disable(portId);
    }
}

// 最终执行设备关闭,该操作不受设备当前状态限制
rte_eth_dev_close(portId);

额外注意事项

  • 客户端模式的memif无需手动调用rte_memif_disconnect(),rte_eth_dev_stop()会自动处理连接断开逻辑
  • 服务器模式的memif,关闭前需确保没有新的连接请求进入,避免残留未清理的连接资源

内容的提问来源于stack exchange,提问作者Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:45:45