免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 74065 | 回复: 16
打印 上一主题 下一主题

[算法] 超高性能网络编程, Asynchronous network I/O [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-17 11:03 |显示全部楼层 |倒序浏览

为什么是超高性能?
因为常见资料太过普通, 没有讨论到核心问题.


本贴目的:
讨论Linux下的高性能网络编程.
热烈欢迎参加讨论, 或提供关键的技术参考资料. 最新的资料确实不好找.


项目背景:
流媒体交换服务器, 单台服务器配置4个1Gbps 网口.
要求客户连接超过1024, (单客户约512kbps),  网络满负载运行, 实时性好.

参考产品:
华为与3COM合作的 杭洲H3C公司的 MS8000媒体交换服务器, 最高并发量只达到1024路.  使用双核CPU,4个 1Gbps网口.
MS8000媒体交换服务器

H3C还开发了面向电信高端的 媒体交换机.  基本框架应该是嵌入式, 在协议栈中实现流媒体交换. 在网络性能上应该是马马虎虎.
H3C UMS9005 通用媒体交换机

网络并发能力理论上应该达到物理极限.
所以发此贴, 还望国内的网络高手不吝赐教!    H3C MS8000的网络性能也不见得就最优化.


重要资料:

[1]、 Dan Kegel - "The C10K problem"
        http://www.kegel.com/c10k.html
        主题:   Web servers 同时处理10000个客户端的技术问题,包括不同OS.

[2]、 Improving (network) I/O performance ...
http://www.xmailserver.org/linux-patches/nio-improve.html

        epoll模型原理及性能测量结论.

[3]、 Drepper's New Network Interface (proposal for Linux 2.6+)
At OLS 2006, Ulrich Drepper proposed a new high-speed asynchronous networking API. See:
his paper, "The Need for Asynchronous, Zero-Copy Network I/O"
his slides :http://people.redhat.com/drepper/newni-slides.pdf
LWN article from July 22 : http://lwn.net/Articles/192410/


[4]、Benchmarking BSD and Linux
http://bulk.fefe.de/scalability/

在BSD 和Linux系统下,一系列网络性能的测量对比。


注释:

AIO:  Asynchronous I/O;

以上的资料只到2006年底, 没找到最新的.

epoll 只是事件通知模型.  没有异步IO. 使用epoll 仍然需要用户处理缓存.
Linux 下目前的AIO实现不支持socket, 可以支持文件AIO.


关于windows IOCP:   对用户来讲是异步模型. 但是, 其实现并不是真正的异步.
真正的AIO是由kernel完成, 不需要线程切换, 应当能实现Zero-Copy.


以下是在跟贴中提供的资料,整理一下方便使用:


[1]、High-Performance Server Architecture
http://pl.atyp.us/content/tech/servers.html



[2]、 高性能网络编程,第 1 部分: 最大程度地利用您的网络资源
http://www.ibm.com/developerwork ... perform1/index.html

高性能网络编程,第 2 部分: 加快客户机和服务器的处理速度
http://www.ibm.com/developerwork ... perform2/index.html

[ 本帖最后由 fm971 于 2008-7-21 09:15 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-07-17 11:06 |显示全部楼层
热烈欢迎参加讨论, 或提供一些最新的资料.

论坛徽章:
0
3 [报告]
发表于 2008-07-17 11:12 |显示全部楼层
原帖由 scutan 于 2008-7-17 11:09 发表
我觉得性能的提升应该是多方面的。下面有一个资料:
http://www.ibm.com/developerwork ... perform2/index.html


谢谢。
是有很多方而, 比如自己的缓存问题,mbuf /sk_buff。
但核心的还是通信模型的问题。如果是真正的异步模型就最理想。

论坛徽章:
0
4 [报告]
发表于 2008-07-17 11:20 |显示全部楼层
原帖由 scutan 于 2008-7-17 11:12 发表


没看到.........


thanks a lot!  
有关缓存效率的一样有用. 收集一下也是给别人参考嘛!

huggahalli05.pdf (123.93 KB, 下载次数: 772)

论坛徽章:
0
5 [报告]
发表于 2008-07-17 11:27 |显示全部楼层
原帖由 yunhappy 于 2008-7-17 11:24 发表
这么看来 linux 2.6 的 epoll 效率很稳定嘛


是.
linux 2.6 几乎在所有网络操作的时候,效率都是 O(1), 不会因数客户数量上升而降低效率。

论坛徽章:
0
6 [报告]
发表于 2008-07-17 13:04 |显示全部楼层
原帖由 键盘老农 于 2008-7-17 12:54 发表
freebsd kqueue好用。


你没看我贴的东西. don't jump to conclusion

论坛徽章:
0
7 [报告]
发表于 2008-07-17 13:25 |显示全部楼层
原帖由 converse 于 2008-7-17 11:24 发表
还有这个:
http://pl.atyp.us/content/tech/servers.html


谢谢各各位分享的资料, 这些资料也算讨论的比较深了。

现在缺少的还是Linux aio 和网络的最新资料。Linux本身在这方面也可能没什么进展。socket 这个API都已经用了几个年代了。

论坛徽章:
0
8 [报告]
发表于 2008-07-17 16:03 |显示全部楼层
原帖由 zsniper 于 2008-7-17 15:10 发表
LZ发的那些BSD和Linux的比较已经很老了

现在FreeBSD7.0出来了,多线程以及userland的jemalloc性能已经相当强了。

还有请问LZ,是想写个高并发的呢?还是高相应的呢?

高并发的话,只拿着epoll和kqueue ...


现在最重要的是网络I/O的并发吞吐量问题.  古老的socket API 有性能限制, 像send()和recv()至少需要拷贝一次缓存. 所以才有那么多人讨论AIO和Zero-Copy. 当然还有其它并发性能问题.

这个BSD和Linux的测试是2003年左右.  可以说明当时linux在网络上的领先.  测试还证明OpenBSD根本不适合网络服务器. 当然BSD会有改进.

论坛徽章:
0
9 [报告]
发表于 2008-07-17 16:20 |显示全部楼层

回复 #18 zsniper 的帖子

这就是为什么这么多人讨论研究socket的并发问题和改进方案.
Ulrich Drepper 在论文里提议的方案是直接访问DMA, read()/receive()只需要返回一个DMA内存指针.
这些是研究性内容, 实现思路可以参考.

[ 本帖最后由 fm971 于 2008-7-17 16:42 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-07-18 09:10 |显示全部楼层
3.0GHz的CPU, 配上4个1Gbps网卡,理论上有4Gbps的网络I/O. 瓶颈会在哪?
缓存拷贝的开销的很大的. 线程切换代价也大. 多线程比较适合需要阻塞的场合.

通信模型是只能依赖于OS, 剩下的是应用层.
我现在的思路,只有选择epoll, 然后应用层协议栈参考TCP/IP, sk_buff/mmap.

据我查的资料, UNIX-like操作系统的网络I/O还没有实现内核级的异步. 如果把epoll封装一下,看起来也会像kqueue或iocp.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP