gpt4 book ai didi

linux - udp 从驱动程序发送

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:46 25 4
gpt4 key购买 nike

我有一个驱动程序需要:

  1. 从 FPGA 接收数据
  2. DMA 数据到另一个设备 (DSP) 进行编码
  3. 通过 UDP 将编码数据发送到外部主机

最初的计划是让应用程序处理第 3 步,但在下一组数据从 FPGA 到达之前,应用程序没有及时让处理器处理数据。

有没有办法强制调度程序(来自驱动程序)运行我的应用程序?

如果没有,我认为工作队列可能是我需要使用的解决方案,但我不确定如何/在哪里调用网络堆栈/驱动程序来完成来自工作队列的 UDP 传输。

有什么想法吗?

最佳答案

您应该尝试找出应用程序“无法足够快地获取数据”的原因。

您的内存带宽可能远远优于典型的以太网带宽,因此即使将数据从驱动程序传递到应用程序也涉及复制。

如果 udp 链接在用户空间中不够快,那么它在内核空间中也不会更快。您需要做的是:

  • 了解您的应用程序速度不够快的原因,也许可以通过跟踪它。
  • 在用户空间中实现排队。

您可以将应用程序拆分为两个线程,共享缓冲区列表

  • 线程 A 等待驱动程序有可用数据,并将其放在列表的末尾。

  • 线程B从链表头部读取数据,并通过UDP发送。如果由于某种原因线程 B 正忙于等待发送特定缓冲区,则 fifo 会填满一点,但只要 UDP 链路带宽大于来自 DSP 的数据速率,就应该没问题。

将内容移至内核中并不会让事情变得神奇地更快,只是编码、调试和跟踪变得更加困难。

关于linux - udp 从驱动程序发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com