论文部分内容阅读
随着网络的飞速发展,网络使用者的数量也急速膨胀。作为各种网络服务的直接提供者,高性能的网络服务器也成为人们关注的焦点之一。网络服务器的性能首先取决于它所运行的硬件平台。受限于外设速度有限的提高,低下的I/O 性能依然是制约着计算机整体性能提高的主要瓶颈。当计算机上运行的是要同时为成千上万用户服务的网络服务器,这种矛盾体现得更加突出。但是另一方面,网络服务器软件本身的结构决定了它是否能充分利用现有的硬件环境。传统的服务器结构和I/O 模型的缺陷也是制约着服务器性能提高的重要因素,因此,如何对其加以改进就成为了提高网络服务器性能的另一个着手点。基于事件驱动的I/O 模型是这一领域研究的热点之一。传统的UNIX/Linux提供的select/poll 实现了基于事件驱动的多路复用I/O 模型,然而由于实现上的不完善,select/poll 的伸缩性受到了限制。针对select/poll 的不足,多种平台下也都有了相应的替代方案,如Solaris 的/dev/poll,BSD 的Kqueue,以及Linux 的epoll 等。实时信号驱动I/O 也是其中的有力竞争者之一,尤其是在Linux 平台上,得益于POSIX 实时信号的完整实现,它已经被证实有很大的价值。然而,这种模型依然存在着缺陷并有待进一步改进。本文首先介绍了传统的UNIX/Linux 系统服务器结构和I/O 模型并解释了为什么它们已经不能胜任于当前的网络服务器。之后分析了基于select/poll 的事件驱动I/O 模型的缺陷,并介绍了现有的各种替代方案,其中重点分析了实时信号驱动I/O。接下来,指出了实时信号驱动I/O 在目前Linux 平台下的实现所存在的性能不足及潜在的可靠性问题,然后提出了解决办法并给出了具体的实现。最后给出了可靠性测试和性能测试并对结果进行了分析。通过测试表明,经过改进的实时信号驱动I/O 模型的可靠性有了很大提高,并且在性能上也达到甚至超过了其它类似解决方案的水平。