iocp性能分析

网络上找iocp性能分析的文章很少,因工作关系,花了点时间特意从客观数据和理论角度分析了下iocp的性能


环境 CPU i7 4核8线程 1G网卡,echo方式测试(一个客户机模拟多个客户端模式,模拟100连接),TCP无延迟模式,网卡理论上双向在125M,单向发包为每秒8万到9万个


1.连接性能 ,连接速度和发包速度几乎一致,大概在每秒8-9万个,但是由于TCP原因,连接方主动断开连接的话,连接数会被TIME_OUT的生命期限制,以及最大端口数量限制,服务端则会受到句柄系统拖累,到12万连接时几乎不能工作了。


2. 数据传输性能测试,如果数据发送方提交的缓冲尺寸小于服务端接收缓冲时,效率会非常低,iops一般都在1万以下,并且CPU占用率极高,网卡使用率也会很低,当发送方提交数据缓存尺寸大于服务端接收缓存时iops才可以提高网络利用率,并降低CPU占用率,1G网卡环境中,发送方提交缓存在64k,服务端接收方在512字节时,或者发送方32k,接收方256字节时才可占满网卡,客户端iops在10万到15万左右,服务端iops在60万左右,60万应该是API的调用频率的极限了


3.理论分析,在数据发送方和接收方提交缓存相近时,效率非常低,TCP无延迟选项作用有限,最多提升20%的性能,原因应该在于提交的io极有可能被提交到了NDIS网卡层去做单包收发动作,这样硬件延迟系统延迟会让发包收包效率大大降低,当发送提交的缓存远远大于接受方提交的缓存时,在硬件延迟系统延迟的时间内,NDIS完成了批量包的发送,接收方则经常性的读取socket接收缓存中的数据,这样延迟的影响就被降低了,简单说就是缓存换IO性能的方式,如果走硬件IO,100客户端1万iops,则单个客户端最多能提供100iops的性能。


4. 一些影响性能的参数,SO_RCVBUF,大的SO_RCVBUF可以提高网络性能的稳定性,但是win7环境下,设置一个大的SO_RCVBUF有可能会降低性能。

在收发双方提交的缓存相近时,TCP_NODELAY能提高20%的实时性能,但会降低带宽利用率。


猜你喜欢

转载自blog.csdn.net/AthlonxpX86/article/details/50588644