【问题标题】:Polling and interrupt based methods for packet processing in multicore processor多核处理器中基于轮询和中断的数据包处理方法
【发布时间】:2011-03-08 15:00:00
【问题描述】:

此查询与多核处理器中的数据包处理有关。数据包处理可以在 Linux 或纯数据路径中进行。如果数据包处理应用程序是在 Linux 上,那么它是否必须是基于中断的数据包处理以获得高性能,但如果数据包处理是在纯数据路径(没有 linux)中,那么应该使用轮询来获得更高的性能?如果是,为什么/如何?

【问题讨论】:

  • 请重新表述您的问题 - 不清楚。
  • ...它实际上对我来说很不清楚,我什至不确定它是否属于 SO(这是一个编程问题吗?)。

标签: linux embedded multicore interrupt processor


【解决方案1】:
  • 轮询
    我们到了吗?我们到了吗?我们到了吗?我们到了吗?我们到了吗? ...

  • 中断
    完成后 Ping 我。

因此,中断允许 CPU 执行其他工作,而轮询避免了中断的开销(如果您每秒被中断数万次,这很重要)。各种高性能。

注意有混合方法,即:在中断几毫秒后轮询,然后再恢复到中断。

【讨论】:

    【解决方案2】:

    如果您使用的是多任务操作系统,则会出现轮询 有延迟损失(如果数据包到达时另一个任务是 执行)。因此,您可以通过使用 此类系统上的基于中断的方法。这是因为 中断机制可以提升上述数据路径的优先级 其他进程而不阻塞它们(如以更高优先级轮询 task 会阻塞所有优先级较低的任务)。

    如果您在没有操作系统的裸机嵌入式系统上运行,您 应该能够使用轮询获得最佳吞吐量,因为 CPU 可以将所有时间都花在检查新数据包或作为 收到数据包的结果。这最大限度地减少了延迟并分配 数据包处理的最大周期。调用中断 在这种情况下,处理程序会浪费周期并引入额外的复杂性; 因为 CPU 上没有其他任何东西在运行,所以你采取的任何周期都是一个周期 不用于处理数据路径。

    请注意,这意味着应用程序的总性能是 更好或任何特定的实现都更快 轮询。这仅意味着实现了可能的最大吞吐量 通过投票。例如,如果您的应用程序需要做很多 处理您可能会使用带有中断的 DMA 获得更好的性能。 要知道在任何特定情况下轮询是否更快,很大程度上取决于 该案例的应用特点。

    我不确定这个问题的“多核”方面是什么,但是 将 CPU 专用于 I/O 轮询以获得最低限度是有意义的 嵌入式多核系统中的延迟,尽管这也是 高度特定于应用程序。

    正如 ninjalj 所说,混合方法可用于优化总 在更复杂的场景中表现出色。以上仅适用于 简单的案例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-17
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多