713程序袁 2024-03-20 17:21 采纳率: 0%
浏览 11

dpdk的rte_mbuf不够用

如果 rte_mbuf 中 unused 【比如,rte_mbuf 中最后的uint32_t dynfield1[9] 保存的36B的空间】 的 空间实在是不够用,则可以 通过 :
mbuf 中的 struct rte_mbuf_ext_shared_info *shinfo; 成员。

struct rte_mbuf_ext_shared_info {
    rte_mbuf_extbuf_free_callback_t free_cb; /**< Free callback function */
    void *fcb_opaque;                        /**< Free callback argument */
    uint16_t refcnt;
};


注:
外部的空间需要释放,比如在mbuf释放的时候,考虑是否有外部空间;如果有,则考虑释放。
但是不是mbuf释放时,就给外部空间释放,比如一个外部空间被多个mbuf 使用。

请问这个shinfo怎么用,谢谢

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-20 17:21
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    Answer: 如果 rte_mbuf 中 unused 的空间实在是不够用,就可以使用 rte_mbuf_ext_shared_info 中的成员结构体 shinfo 来释放外部空间。 rte_mbuf_ext_shared_info 中的三个成员含义如下:
    • free_cb: 释放外部空间的回调函数;
    • fcb_opaque: 释放外部空间的回调函数参数;
    • refcnt: 外部空间的引用计数。 当需要释放外部空间时,可以通过以下几步来完成:
    • 创建外部空间结构体: struct my_ext_buf { char data[1024]; };
    • 在 mbuff 中保存对该外部空间的引用计数,并设置回调函数: struct my_ext_buf *ext_buf = malloc(sizeof(*ext_buf)); struct rte_mbuf *mbuf; mbuf->shinfo->free_cb = free_my_ext_buf; mbuf->shinfo->fcb_opaque = ext_buf; mbuf->shinfo->refcnt = 1;
    • 在回调函数中释放外部空间: void free_my_ext_buf(void *ext_buf, u16_t ext_size, void *opaque, struct rte_mbuf *mbuf) { struct my_ext_buf *my_ext_buf = opaque; free(my_ext_buf); }
    • 当 mbuf 被释放时,通过 rte_pktmbuf_free 函数释放外部空间: rte_pktmbuf_free(mbuf); 以上就是使用 shinfo 结构体释放外部空间的基本流程,具体实现还需根据实际情况进行修改。
    评论

报告相同问题?

问题事件

  • 创建了问题 3月20日

悬赏问题

  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理