有一些疑惑与底部half.Here,我只考虑微进程。 另外,我只考虑非抢占内核。

假设考虑其中RX中断处理做一些10的功能调用以太网驱动程序。(不好的编程:))

现在,看着性能的角度来看,如果9个函数调用可以移动到一个tasklet和中断处理被称为只有1需要,我可以真正在TCP的一些性能良好阅读应用程序。

或者换句话说,当有切换到用户空间应用程序的所有9个功能要求安排将被称为微进程,在有效的用户空间应用程序将能够只有在“所有taskets将数据包暨数据计划”完成?正确的吗?

据我所知,具有下半部分,我们正在使所有的中断..但我有一个疑问,依靠中断应用程序实际上是否通过在中断处理程序本身或者在下半区整个10个功能获得任何东西。

在短,通过具有微进程我获得性能改进在用户空间中的应用,在这里?

有帮助吗?

解决方案

由于任务蕾不排队,但已排定,即几个硬件中断张贴同样的微进程可能会导致在单个微进程函数调用,您将能够节省的高达90%的极端的处理案例。

在另一方面,存在已经是净-RX一个高优先级的软IRQ。

其他提示

在我的机器速度快,从处理器到了微动工作不会使整机运行速度更快的体验。我已经添加的宏中,可以把我的schedule_tasklet(处理程序)调用进入到了微函数本身的调用,并可以很容易地基准两种方式,看到了差距。

但重要的是,中断处理程序尽快完成。至于尼古拉提到的,你可以,如果你的设备喜欢打断了很多好处,但大多数高带宽的设备有中断缓解硬件,使得这一个不太严重的问题。

使用任务蕾的是,核心内核的人都要做的事情,所以在其他条件相同的方式,它可能是最好跟着他们走,特别是如果你想查看您的驾驶接受入主内核。

我还要指出,调用大量的功能并不一定是不好的做法;现代分支预测器可以使分支重码的运行就如同非分支重码一样快。远在我看来,更重要的是具有现在做了一半工作的潜在的缓存效果,然后一半的工作后。

一个微进程不会在用户进程的上下文中运行。如果你的ISR调度一个tasklet,你的ISR完成后,将立即执行,但允许中断。这样做的好处是,你的分组处理不防止附加中断。

在您的TCP例如,硬件手离开分组到网络堆栈和驱动程序做 - 网协议栈处理唤醒过程等。所以真的没有办法硬件的驱动程序的过程中上下文中执行数据的接收方,因为硬件甚至不知道他是谁。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top