AF-XDP:实现共享 Umem 套接字

2024-03-24

我想实现 XDP_SHARED_UMEM:https://www.kernel.org/doc/html/latest/networking/af_xdp.html#xdp-shared-umem-bind-flag https://www.kernel.org/doc/html/latest/networking/af_xdp.html#xdp-shared-umem-bind-flag

The libbpf库函数xsk_socket__create (https://github.com/libbpf/libbpf/blob/master/src/xsk.c https://github.com/libbpf/libbpf/blob/master/src/xsk.c)检查xsk_umem->refcount价值。如果大于 1,则XDP_SHARED_UMEM的选项struct sockaddr_xdp is set.

因此,据我正确理解,我“只”需要传递我想要与之共享 umem 的套接字的原始 umem 结构,其余部分由libbpf.

我尝试的方法是让第一个进程复制它的umem-struct 到共享内存区域,第二个进程可以从中加载它。但是因为struct xsk_umem定义于xsk.c它对用户隐藏,我无法执行以下操作:

memcpy(shdm_ptr, umem, sizeof(struct xsk_umem))

我不知道他们如何期望有人使用共享umem功能?


于是就讨论了这个问题邮件列表。在此报告以作记录。

不建议像您尝试那样采用多进程设置。比约恩 说:

请注意,如果您愿意 做一个多process使用共享 umem 设置,您: 需要有 管理填充/完成环的控制过程,以及 在进程之间同步,或重新映射填充/完成 从多个进程中拥有 umem 的套接字发出响铃and同步对它们的访问。两者都不令人愉快。

老实说,我不推荐这种设置。

他补充道:

只是为了完整性;设置共享 umem:

  1. 创建套接字 0 并将 umem 注册到此。
  2. 使用套接字 0 映射 fr/cr
  3. 创建套接字 1、2、n 并为 umem 引用套接字 0。

因此,在多进程解决方案中,步骤 3 将单独完成 流程和步骤 2(具体取决于您的应用程序)。你需要 将套接字 0 传递给其他进程and共享 umem 内存 创建套接字 0 的进程。这几乎是一个线程 给定所有共享状态的解决方案。

我建议不要走这条路。

(归功于比约恩。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AF-XDP:实现共享 Umem 套接字 的相关文章

随机推荐

  • GNUPLOT:点图,数据取决于点大小

    我正在尝试绘制由 3 个坐标组成的数据集 X 坐标 x 坐标和出现次数 例子 1 2 10 3 1 2 3 2 1 我想在 x y 处为每条线画一个点 其直径取决于第三个值 Gnuplot 可以做到这一点吗 创建具有可变点大小的二维图 看t
  • CSS非标准“ZOOM”属性

    我有一个 css 文件 其中包含一个带有 Zoom 1 的类 我在浏览器控制台上收到以下错误 该页面使用非标准的 缩放 属性 相反 您可以使用 calc 或将 transform 与 transform origin 0 0 一起使用 如何
  • $redis 全局变量与 ruby​​ on Rails

    我使用 redis 作为读取缓存 我创建了一个初始化程序 配置 初始化程序 redis rb redis Redis new host gt ENV REDIS HOST port gt ENV REDIS PORT 每当创建新工作人员时
  • 未在命名空间中捕获 PDOException

    我不知道怎样才能抓住PDOException在下面的代码中 请告诉我下面的代码中哪里抛出异常 我有 目录 folder 1 b php 2 c php autoloader in the b php and in c php class c
  • 测试“0”、“-0”、“0.0”、“00”时的 PHP 和 Perl 行为

    当 PHP Perl 测试一个值时 我遇到了这个有趣的行为 print 0 Yes No gt No print 00 Yes No gt Yes print 0 0 Yes No gt Yes print 0 Yes No gt Yes
  • 为什么C#中没有反向枚举器?

    有谁知道是否有特定原因或设计决定不在 C 中包含反向枚举器 如果有一个与 C 相当的东西就好了reverse iterator就像 Enumerator 相当于 C 一样iterator 可以反向迭代的集合只需实现 IReverseEnum
  • 关于如何识别右值或左值引用以及 if-it-has-a-name 规则

    我正在读托马斯 贝克尔的书article http thbecker net articles rvalue references section 05 html关于右值引用及其使用 在那里他定义了他所说的如果它有一个名字 rule 声明为
  • 当 ISO 年份与公历年份不同时,Python Dataframe isocalendar() 布尔条件不会产生所需的结果

    令我惊讶的是 当我只想要当年第一周的数据时 我的简单布尔条件却产生了完整的一年结果 My code Some sample data df1 pd DataFrame 1596 1537 1482 1960 1879 1824 index
  • c中int (*pt)[5]的含义是什么[重复]

    这个问题在这里已经有答案了 我读过一些关于这种类型声明的地方 声明是 int arr 5 我对这个类型声明有点困惑 实际上这个声明的含义是什么以及我们什么时候使用它 int arr 5 arr是 5 个指针的数组 int arr 5 arr
  • 组件、行为和 MonoBehaviour 之间有什么区别?为什么这些是分开的?

    MonoBehaviour延伸Behaviour and Behaviour延伸Component 我想知道为什么这些类被分开以及这些类的语义含义 区分这些类有什么目的吗 是否有任何课程延伸Behaviour or Component直接地
  • Youtube Api playVideo 方法在某些移动设备上不起作用

    我正在尝试创建一个移动网站 点击图像后可以播放 YouTube 视频 我已经在几款 Android 手机 版本上进行了测试 有些手机的行为与预期不符 我的意思是它停止在缓冲并且永远不会播放视频 我注意到的另一件事是 播放器在用户触发视频播放
  • Eclipse GridData 的垂直滚动条

    我在 Eclipse 应用程序中有以下 Java 代码 import org eclipse swt layout GridData import org eclipse swt widgets List import org eclips
  • 如何从我的 Subversion 托管帐户创建转储文件?

    我的 SVN 存储库托管在某处 我想搬到别人那里去 如何创建存储库的转储以便将其导入到我的新主机中 这就是我一直看到的 svnadmin dump path to repos gt repos dump 我的存储库是托管的 因此它不是本地的
  • 在单独的函数中修改指向字符串文字的指针

    我希望这是一个微不足道的问题 有人可以用比我已经遇到的更简单的术语向我解释 在工作过程中 C 之旅 第二版 我一直在尝试几个例子 我目前正在尝试在单独的函数中修改指向字符串文字的指针 我认为这很容易 using namespace std
  • 小块饼图上的标签(ggplot)

    我想用ggplot制作饼图 My data lab lt c a b c d e f g h percentage lt c 50 20 10 10 2 2 2 2 df prison lt data frame lab percentag
  • 如何设置内联集合?

    例如 DataTable table new DataTable Columns new DataColumnCollection new DataColumn col1 new DataColumn col2 你说的是集合初始化器 htt
  • 完全用汇编语言编写操作系统有什么好处? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 MenuetOS http en wikipedia org wiki MenuetOS是完全用汇编编写的操作系统的示例 用汇编语言编写它比用
  • 在 Visual Basic 6 中对 Excel 工作表进行编码

    我想将excelsheet1的列A的值获取到Visual Basic的某个变量中 然后在更改该值后发送回下一个sheet2 这是一个完整且有效的项目示例 它将值从 Sheet1 单元格 A1 复制到 Sheet2 单元格 A1 declar
  • C# 中的空可扩展树节点

    我想在 C 中创建一个可扩展的空树节点 即一个空的树节点 旁边有 符号 原因是因为最初它是空的 但是一旦单击一个节点 我想用许多子节点填充它 我面临的唯一问题是空树节点不可扩展 所以我不知道该怎么办 有没有办法解决这个问题 或者有什么解决方
  • AF-XDP:实现共享 Umem 套接字

    我想实现 XDP SHARED UMEM https www kernel org doc html latest networking af xdp html xdp shared umem bind flag https www ker