硬件设施和操作系统的开销比较。
我们将1,2结合起来进行比较:
选择下面一些基本的硬件平台:
典型的笔记本电脑,P4M平台,100M网卡,512M内存
典型的台式机,P4平台,100M网卡,512内存
典型的服务器,xeon平台,千兆网卡,1G内存
典型的AMD64位服务器,千兆网卡,1G内存
软件系统包括:
Windows系统:
Windows2000 Profession
Windows2000 Advance Server
自由的Unix类系统:
Linux 2.4内核
Linux 2.6内核
FreeBSD5.1内核
主要的性能评估包括:
影响服务器性能的操作系统的基本调用评估
l 分配/释放内存的开销
l 创建/中止线程/进程的开销
l 互斥锁的开销(上下文切换的开销)
l 内存映像文件的创建/读写开销
操作系统网络性能的基本评估
l 套接字的创建/释放开销
l 套接字的绑定开销
l 建立网络连接的开销
l 发送数据/接收数据的吞吐量
l 一次标准HTTP请求/响应的延时和开销。
初步的结果表明,硬件方面,Xeon系统显然超过了通常的笔记本和台式机,而AMD 的64位系统在较低的主频下有非常好的性能表现(我们仍然使用32位软件进行测试)。而操作系统方面,所有的类Unix系统都全面超过Windows平台,而Linux2.6内核是各个平台中表现最好的。
网络IO模型的设计和评估:
基本概念,操作系统采用何种方式通知应用软件应该去某一个套接字上获取数据或者发送数据。
最简单的办法,采用轮询的机制循环检查套接字的状态,在很多时候,这种方式的效率反而最高。
轮询方式具体的应用范围:
其次,使用每个连接一个线程的方式,这种方式可行性决定于
操作系统可以使用线程的数量
操作系统线程创建和线程间切换的开销。(初步的测试表明,linux2.6内核每秒可以创建5000以上的线程)
两种基本的消息触发方式:
条件触发和边沿触发
常见的select就是条件触发。
Window平台:
包括常见的Select模型
event select模型
IO完成端口模型,实际上就是一种边沿触发的机制。
Linux平台
基本的select模型,最大的问题在于寻找哪一个socket上面发生的事件(socket的本质是文件句柄,所以数量巨大)
边沿触发:
2.4内核推荐的实时信号模型
2.6内核推荐的epoll模型
FreeBSD
基本的select模型
边沿触发的kqueue模型
性能评估:
基本的测试表明,在同时并发连接数量,每个连接的延时和吞吐量上,Linux 2.6内核都是胜利者,其性能显著超过了2.4内核以及FreeBSD。所有的类Unix系统都将Windows系统远远抛在后面。在各种IO模型的比较下, linux2.6内核的epoll同样成为胜利者,而IO完成端口仍然是最后一名,显然,对易用性和图形性能的要求使得Windows并不适合作为一个服务器端的操作系统。
摘自:http://www.cnblogs.com/fangzi/archive/2006/07/16/452106.html