问题标签 [openonload]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2721 浏览

java - 在哪里可以找到 SolarFlare OpenOnLoad Kernel Bypass 的一些示例 Java 代码?

让任何人开始的简单问题:

  1. 我知道我需要一个特殊的网络接口卡 (nic) 来执行此操作。我假设它必须是SolarFlare制造的。我能得到的最便宜的可以让我实现和测试内核绕过的工具是什么?

  2. 看起来他们使用OpenOnLoad作为网络堆栈。在哪里可以找到有关如何使我的网络应用程序使用 OpenOnLoad 的示例代码和示例?我很想知道我的程序使用这项技术有多容易或多复杂。

从这里的另一个问题产生的问题:使用 Java 中的内核绕过网络

0 投票
2 回答
2610 浏览

c - 将静态链接的精灵二进制文件转换为动态链接的

我有一个静态链接到 libc 的精灵二进制文件。我无权访问它的 C 代码。我想使用 OpenOnload 库,它在用户空间中实现了套接字,因此与标准 libc 版本相比提供了更低的延迟。OpenOnload 实现标准套接字 API,并使用 LD_PRELOAD 覆盖 libc 版本。但是,由于这个 elf 二进制文件是静态链接的,它不能使用 OpenOnload 版本的套接字 API。

我相信可以通过以下步骤将此二进制文件转换为与 OpenOnload 动态链接:

  1. 添加新的程序头文件:PT_INTERP、PT_DYNAMIC 和 PT_LOAD。
  2. 在 PT_DYNAMIC 中添加条目以列出与 libc 的依赖关系。
  3. 在新的 PT_LOAD 部分中为所需的 libc 函数添加 PLT 存根。
  4. 修改 libc 函数的现有二进制代码以跳转到相应的 PLT 存根。

作为第一次剪辑,我尝试仅添加 3 个 PT_LOAD 段。在现有的 PT_LOAD 段标头之后添加了新的段标头。此外,未修改现有段的 vm_addr。基于 p_align 将现有段的文件偏移量移至下一个对齐地址。在文件末尾的文件中添加了新的 PT_LOAD 段。

重新编写文件后,当我运行它时,它被内核正确加载,但随后立即出现 seg-faulted。

我的问题是:

  1. 如果我只是在 elf 二进制文件中移动文件偏移量,而不修改 vm_addresses,它会在运行二进制文件时导致任何错误吗?
  2. 有可能做我正在尝试的事情吗?有人尝试过吗?
0 投票
3 回答
9324 浏览

c - Linux 上 UDP 和 TCP 的内核绕过 - 它涉及什么?

根据http://www.solacesystems.com/blog/kernel-bypass-revving-up-linux-networking

[...] 一个名为 OpenOnload 的网络驱动程序,它使用“内核绕过”技术在用户空间中一起运行应用程序和网络驱动程序,并且绕过内核。这允许连接的应用程序端以更低和更一致的延迟每秒处理更多消息。

[...]

如果你是一名开发人员或架构师,多年来一直在与上下文切换作斗争,内核绕过可能会感觉像是在作弊,但幸运的是它完全在规则之内。

进行这种内核绕过需要哪些功能?

0 投票
1 回答
938 浏览

c++ - 为什么用于零拷贝的 OpenOnload 扩展 API 没有用于 UDP 发送或 TCP 接收的任何内容?

根据 OpenOnload Extensions API 文档,零拷贝 API 不包括 UDP 发送和 TCP 接收方案。为什么?

0 投票
0 回答
155 浏览

checksum - EFVI 库 openonload-201509-u1 校验和比较

我正在使用 EFVI 库 openonload-201509-u1。我正在运行一个 efvi 6 二进制文件,它监听 udp 多播馈送。我不相信任何“校验和比较”用于检查收到的数据包是否损坏。是否有人能够提供没有使用校验和比较的证据,并可能提出任何“打开”此检查的方法?

谢谢

0 投票
2 回答
1565 浏览

c++ - 如何检查应用程序是否在 OpenOnload 下运行?

我需要检查我的应用程序是否通过在 OpenOnload 下运行来加速。限制是不能使用特定于 Onload 的 API - 应用程序未与 Onload 扩展库链接。

如何做到这一点?

0 投票
1 回答
358 浏览

c++ - 是否可以将 ONLOAD_MSG_WARM 标志与零长度缓冲区一起使用?

在 OpenOnload 下运行网络应用程序时,是否可以/有意义地使用具有零长度缓冲区的 ONLOAD_MSG_WARM 标志(因为应该预热标准 Linux TCP 堆栈上的发送路径)?

例如

0 投票
1 回答
111 浏览

c - 在 dma_buf_addr 的地址上添加偏移量有什么用?

Question> 我理解MEMBER_OFFSET的意思。但是,我没有得到以下行的含义:

基本上, 的值MEMBER_OFFSET(struct pkt_buf, dma_buf)是成员变量dma_bufin的字节偏移值struct pkt_buf

0 投票
1 回答
1470 浏览

kernel - 什么是 Solarflare Onload 堆栈以及它与它们的虚拟接口有何关系

我试图了解什么是 openonload 堆栈以及使用它们有什么好处。例如,与 1 个堆栈(1 个堆栈 8 行)相比,为什么我要将 8 条多播线路分成 2 个堆栈(每个 4 行)。对 RX 掉线有帮助吗?

我也很困惑这与他们的虚拟接口(vNics)有什么关系——当我们创建一个新的 onload 堆栈时它们会自动创建吗?

我试图从他们的用户指南http://www.smallake.kr/wp-content/uploads/2015/12/SF-104474-CD-20_Onload_User_Guide.pdf中获取它,但他们并没有真正完整地描述它细节。

谢谢!

0 投票
1 回答
679 浏览

c++ - 使用 OpenOnload Solarflare c 获得性能提升

我正在尝试使用安装在我的服务器中的 Solarflare NIC 来衡量我的系统的性能提升。

服务器详情:Intel(R) Core(TM) i7-8086K CPU @ 4.00GHz(12 核/8 GB RAM)

网络:Solarflare XtremeScale X2522 (10G) 适配器

我用 C++ 编写了一个简单的 TCP/IP 服务器/客户端程序。服务器/客户端都接受两个输入,即。缓冲区大小和接口名称。使用 setsockopt 我可以使用 SO_BINDTODEVICE 将我的套接字绑定到特定接口。

我在 client 和 server.cpp 程序中都使用了上面的代码片段。

为了测量延迟,我在从大小为 2048 的客户端发送 10000000 条消息之前和之后使用了以微秒为单位的计时时间戳。

我使用 SO_BINDTODEVICE + 使用以下命令将套接字绑定到 solarflare 接口以运行客户端服务器程序:

onload ./client (buf_size) (interface_name_solarflare)

onload ./server (buf_size) (interface_name_solarflare)

对于没有 onload 的基准测试:

./client (buf_size) (interface_name)

./server (buf_size) (interface_name)

我能够观察到的是,onload 的延迟比没有 onload 的要高。我也尝试过改变缓冲区大小。这只是发送时间。

我的示例结果以微秒为单位:

在此处输入图像描述

有人可以指导我在这里做错什么吗?我是使用 OpenOnLoad 的新手。

注意:我没有在我的客户端/服务器程序中使用任何其他 setsockopt 选项。

提前致谢。:)