iocp性能分析
2016-01-26 18:11
183 查看
网络上找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%的实时性能,但会降低带宽利用率。
环境 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%的实时性能,但会降低带宽利用率。
相关文章推荐
- AttachThreadInput
- Python求索之路3——迭代器&装饰器&生成器&正则
- JAVA八大经典书籍,你看过几本?
- 51CTO稿酬标准2016版正式发布!
- MyBatis入门学习
- Java并发中正确使用volatile
- HDU2089 不要62(数位DP)
- maven学习
- CentOS7 Juno Cinder块重启后 实例起不来 --rescan Exit code: 21
- 2的m次方 内存对齐
- WordPress程序伪静态规则(Nginx/Apache)及二级目录规则
- tuple内部方法
- self.方法和_对变量的引用的区别
- gerrit+http+2
- mysql创建索引
- SqlBulkCopy批量插入数据
- Java数据类型和位运算
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
- 拟工作todo
- CSS 简介