此查询与多核处理器中的数据包处理有关。数据包处理可以是Linux或纯数据路径。如果数据包处理应用程序在Linux上,那么它必须是基于中断的数据包处理以获得高性能,但如果数据包处理是纯数据路径(没有linux),那么应该使用轮询来获得更高的性能吗?如果是,为什么/如何?
答案 0 :(得分:2)
轮询
我们到了吗?我们到了吗?我们到了吗?我们到了吗?我们到了吗? ...
中断
完成时给我打分。
因此,中断允许CPU执行其他工作,而轮询可以避免中断的开销(如果您每秒被中断数万次,则显着)。不同种类的高性能。
请注意,存在混合方法,即:在中断之后轮询几毫秒,然后再恢复为中断。
答案 1 :(得分:1)
如果您正在使用多任务操作系统,则会进行轮询 延迟惩罚(如果数据包到达而另一个任务是 执行)。因此,使用a可以获得更好的吞吐量 这种系统上基于中断的方法。这是因为 中断机制可以提升上面数据路径的优先级 其他进程没有阻塞它们(作为更高优先级的轮询) 任务会阻止所有优先级较低的任务。)
如果你是在没有操作系统的裸机嵌入式系统上运行的话 应该能够从CPU使用轮询获得最佳吞吐量 可以花费所有时间检查新数据包或作为一个处理 收到的数据包的结果。这可以最大限度地减少延迟和分配 数据包处理的最大周期。调用中断 处理程序浪费周期并在这种情况下引入额外的复杂性; 因为在CPU上没有运行任何其他任何循环,所以你采取的是一个循环 不习惯倾向于数据路径。
请注意,不表示应用程序的总体性能 更好或任何特定的实现更快 轮询。它只意味着可以实现最大吞吐量 通过民意调查。例如,如果您的应用程序需要执行大量操作 使用带有中断的DMA可以获得更好的性能。 要知道在任何特定情况下轮询是否更快取决于 该案的适用特点。
我不确定这个问题的“多核”方面是什么,但是 将CPU专用于I / O轮询以获得最小值是有意义的 嵌入式多核系统中的延迟虽然也是如此 具体应用程序。
正如ninjalj所指出的,混合方法可用于优化总数 在更复杂的场景中表现。以上仅适用于 简单的案例。