We use cookies to improve your experience with our site.

用户级设备驱动程序:得来的性能

  • 摘要: 设备驱动程序是操作系统的最关键部分之一。从传统的角度来说,设备驱动程序作为内核的一部分实现,因而在特权方式下执行,可以对所有的系统资源进行访问。这简化了驱动程序的实现且减少了开销。 从 90 年代初以来,在微内核大行其道的时候,许多人就一直有这样一个设想,即建立能够在内核外把驱动程序作为无特权用户级代码运行的系统。然而,这些设想没有能够形成气候。因为典型的情况是:研究人员发现,用户级驱动程序引入的额外上下文切换导致了整体性能的明显下降。因此,用户级驱动程序在主流系统中仍然是个例外。一般而言,它们仅仅用于对性能要求不是很高或下文切换次数与驱动程序所做工作相比不是很多的设备( Linux 服务器就是个例子)。 在本文当中,我们针对用户级驱动程序说明了一个新的情况,并通过其在 Linux 中的实现证明了用户级驱动程序的可行性。我们还证明,用户级驱动程序获得的 I/O 性能可以与用传统内核驱动程序的 Linux 所获得的 I/O 性能相媲美。 把设备驱动程序作为无特权用户级代码运行并封装到自身的进程中常常作为一种提高系统健壮性的技巧提出。然而,在过去,基于用户级设备驱动程序的系统一般表现出低劣的性能。因此,用户级设备驱动程序从没有任何明显良好的性能表现。 我们通过修改 Linux 以便在用户级运行网络和设备驱动程序,研究了用户级驱动程序的性能。与先前的用户级驱动程序框架相比,我们不能把所获得的良好性能仅仅归结于少数几个因素,而应该归功于系统的、全面的框架设计与实现方法,这个框架应该能够避免额外拷贝,大量利用共享结构,尽量通过无死锁结构避免同步,对部件间的任务进行批处理以介绍通知事件,加大优化事件通知机制的力度。 我们的结果证明,把设备驱动程序作为无特权用户级代码运行值得认真研究。 我们在本文当中证明,在不明显降低性能的情况下,即使对于诸如 Gigabit 以太网的高带宽来说,建立应用用户级设备驱动程序的系统是可能的。 一些平台现在能够提供 I/O 存储管理单元,它们可以保护主存免受设备驱动程序 DMA 的影响。我们准备在我们的框架内探讨这种保护机制的集成,以便封装并使驱动程序与系统其余部分隔离开来。

     

    Abstract: Running device drivers as unprivileged user-level code, encapsulatedinto their own process, has often been proposed as a technique forincreasing system robustness. However, in the past, systems based onuser-level drivers have generally exhibited poor I/O performance.Consequently, user-level device drivers have never caught on to anysignificant degree. In this paper we demonstrate that it is possible tobuild systems which employ user-level device drivers, withoutsignificant performance degradation, even for high-bandwidth devicessuch as Gigabit Ethernet.

     

/

返回文章
返回