两个 PCI 设备之间直接通信

2023-11-25

我有一个 NIC 卡和一个 HDD,它们都连接在 Linux 机器的 PCIe 插槽上。理想情况下,我希望将传入数据包传输到 HDD,而不涉及 CPU,或最少涉及 CPU。是否可以像这样沿着 PCI 总线建立直接通信?有谁知道要阅读什么内容才能开始这样的项目吗?

谢谢大家。


不确定您问的是 PCI 还是 PCIe。您使用了这两个术语,并且每个术语的答案都不同。

如果您谈论的是传统 PCI 总线:答案是“是”。板对板 DMA 是可行的。例如,视频捕获板可以将 DMA 视频帧直接传输到显卡内存中。

在您的示例中,视频卡可以直接 DMA 到存储设备。然而,这些数据将是相当“原始”的。例如,您的网卡没有文件系统的概念。您还需要确保可以对 NIC 的 DMA 引擎进行编程,使其位于 SATA 控制器寄存器的范围内。您不想走出酒吧的尽头!

如果您谈论的是现代 PCIe 总线:答案是“通常不会,但这取决于情况”。在 PCI Express 规范中,点对点总线事务是一件有趣的事情。根联合体设备不需要支持它。

在我的测试中,如果您的设备位于 PCIe 交换机后面(未直接插入主板),则点对点 DMA 将起作用。但是,如果您的设备直接连接到芯片组(Root Complex),点对点 DMA 将无法工作,除某些特殊情况外。最值得注意的特殊情况是我之前提到的视频捕获示例。芯片组数据表中提到了特殊情况。

我们使用一些不同的 Intel 和 AMD 芯片组测试了点对点 PCIe DMA,并发现了一致的行为。但尚未测试最新一代的芯片组。 (我们已经与 Intel 讨论了缺乏对等 PCIe DMA 支持的问题,不确定我们的反馈是否对他们的工程部门产生了任何影响。)

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

两个 PCI 设备之间直接通信 的相关文章

  • 移动应用程序的 OAuth2 流程

    我们有一个预先存在的移动应用程序 用户将注册他的用户名和密码 目前我们有一个基于自定义令牌的身份验证 我们希望在不影响用户体验的情况下切换到 OAuth2 看起来资源所有者密码凭证对我们来说是最接近的流程 但是有很多建议反对使用它们 任何其
  • 使用斯坦福 NLP 检测语言

    我想知道是否可以使用Stanford CoreNLP检测句子是用哪种语言写的 如果是这样 这些算法的精确度如何 几乎可以肯定的是 斯坦福 COreNLP 目前还没有语言识别功能 几乎 因为不存在更难证明 编辑 尽管如此 以下是间接证据 也没
  • If 语句与函数指针

    目标是根据复选框是否打开或关闭来更改事件循环中的行为 我能想到的最简单的方法就是每次运行循环时测试复选框状态 if statement void action void someLoop if checkboxTrue action oth
  • AngularJS $http 从失败的 CORS 请求返回状态代码 0

    好吧 我已经查遍了这个 基本上我们使用的是跨域请求的 http 请求 我们的服务器允许该域 当请求返回 200 时 一切正常 然而 每当我们的服务器返回错误 500 401 无论什么时候 Angular 都会认为这是 CORS 问题 我使用
  • 客户端和服务器端编程有什么区别?

    我有这个代码 为什么这不会将 bar 写入我的文本文件 而是警告 42 注意 这个问题的早期修订明确涉及服务器上的 PHP 和客户端上的 JavaScript 问题的本质和解决方案是相同的any当一种语言在客户端上运行而另一种语言在服务器上
  • 访问修饰符 - 目的是什么?

    一般来说 我对编程比较陌生 我想知道是否有人可以帮助我理解访问修饰符的目的 我知道他们为类和变量等设置了不同的访问级别 但为什么要限制对这些内容的访问权限 不允许访问不同的东西有什么意义 为什么不只允许访问所有内容呢 抱歉 如果这是一个愚蠢
  • 未使用的装配参考的成本是多少?

    我想知道在 NET 解决方案中引用程序集的各种成本是多少 我对技术和组织成本都感兴趣 一些例子 未使用的程序集包含需要传送的额外字节 下载时间更长 浪费空间 未使用的程序集可能包含可利用的安全漏洞 未使用的程序集可能会产生额外的启动成本 未
  • 使用 Selenium 和 Python 查找存在 data-tb-test-id 属性而不是 id 的元素

    我正在尝试使用 Selenium 查找元素 但没有找到 请遵循 HTML 代码 div style font size 12px font weight normal color 000000 display inline block pa
  • 如何使 D3 强制布局中的标签和节点可单击以导航到 URL?

    我正在使用 D3 使用基于力的布局 并且想知道当我单击节点或标签时是否可能会自动转到存储在该节点 标签中的 url 如果是的话 我怎样才能实现这一目标 这就是图表的实际外观 标签指示 URL 本身 我正在分享我用来生成 D3 图的 Java
  • 使用 CSS 子选择器会更快吗?

    如果我们想定位段落内的链接 哪个选择器会更有效 更快 p a or p gt a 第二个 极其 稍微快一些 CSS 由浏览器反向处理 因此您的两个规则都会在所有a页面上的元素 对于第二条规则 它只需要测试直接父级 对于另一条规则 它需要测试
  • setter 和 getter 方法是否会破坏封装? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 有人告诉我们应该避免 setter 和 getter 关于它有各种各样的想法 但根据我的说法 使用这些会破坏封装 为什么 因为它告诉世界一个物体的内部结构 例如 class Point p
  • 新的 React 应用程序安装后无法立即编译

    我已经使用 React Native 一段时间了 但我想我应该在网络上尝试 React 所以我遵循了这个指南 https reactjs org docs create a new react app html但使用后npx create
  • vi 的 splitview 上的 Linux shell (bash)

    我一直在寻找将 bash 集成到 vi 中的方法 但没有找到任何结果 如 emacs 中的功能 问题是 我用 vi 打开了 2 个视图 其中一个打开了 split命令 我想通过第二个视图使用 bash 而我正在第一个视图中编辑文件 如果我做
  • 众所周知的“进程因 StackOverflowException 而终止”屏幕是如何出现的?

    一个好奇的问题 如果当前进程的堆栈已满 如何出现众所周知的 进程因 StackOverflowException 而终止 屏幕 是运行时保存一些寄存器以使其正常降级 还是可能是一个内部技巧 可能会运行另一个临时进程来显示此屏幕 附 知道这个
  • Eclipse Spring Tools 缺少内容辅助/自动完成

    新的一年 新的问题 我正在一台 Linux 机器上工作 并且刚刚安装了一个新的 Eclipse Version Oxygen 2 Release 4 7 2 Build id 20171218 0600 JRE java version 1
  • 最佳实践:如何跟踪出站链接?

    由于请求记录在目标服务器上 而不是您的服务器上 因此如何跟踪网站的出站链接 您可以向页面添加一个快速 JQuery 脚本 该脚本将跟踪外部链接 并且可以将它们重定向到服务器上的一个文件 该文件将跟踪该链接 然后转发到该文件 或者添加一个 a

随机推荐