超高性能网络编程, Asynchronous network I/O
为什么是超高性能?
因为常见资料太过普通, 没有讨论到核心问题.
本贴目的:
讨论Linux下的高性能网络编程.
热烈欢迎参加讨论, 或提供关键的技术参考资料. 最新的资料确实不好找.
项目背景:
流媒体交换服务器, 单台服务器配置4个1Gbps 网口.
要求客户连接超过1024, (单客户约512kbps),网络满负载运行, 实时性好.
参考产品:
华为与3COM合作的 杭洲H3C公司的 MS8000媒体交换服务器, 最高并发量只达到1024路.使用双核CPU,4个 1Gbps网口.
MS8000媒体交换服务器
H3C还开发了面向电信高端的 媒体交换机.基本框架应该是嵌入式, 在协议栈中实现流媒体交换. 在网络性能上应该是马马虎虎.
H3C UMS9005 通用媒体交换机
网络并发能力理论上应该达到物理极限.
所以发此贴, 还望国内的网络高手不吝赐教! H3C MS8000的网络性能也不见得就最优化.
重要资料:
、 Dan Kegel - "The C10K problem"
http://www.kegel.com/c10k.html
主题: Web servers 同时处理10000个客户端的技术问题,包括不同OS.
、 Improving (network) I/O performance ...
http://www.xmailserver.org/linux-patches/nio-improve.html
epoll模型原理及性能测量结论.
、 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/
、Benchmarking BSD and Linux
http://bulk.fefe.de/scalability/
在BSD 和Linux系统下,一系列网络性能的测量对比。
http://bulk.fefe.de/scalability/httpreq-2.png
注释:
AIO:Asynchronous I/O;
以上的资料只到2006年底, 没找到最新的.
epoll 只是事件通知模型.没有异步IO. 使用epoll 仍然需要用户处理缓存.
Linux 下目前的AIO实现不支持socket, 可以支持文件AIO.
关于windows IOCP: 对用户来讲是异步模型. 但是, 其实现并不是真正的异步.
真正的AIO是由kernel完成, 不需要线程切换, 应当能实现Zero-Copy.
以下是在跟贴中提供的资料,整理一下方便使用:
、High-Performance Server Architecture
http://pl.atyp.us/content/tech/servers.html
、 高性能网络编程,第 1 部分: 最大程度地利用您的网络资源
http://www.ibm.com/developerworks/cn/aix/library/au-highperform1/index.html
高性能网络编程,第 2 部分: 加快客户机和服务器的处理速度
http://www.ibm.com/developerworks/cn/aix/library/au-highperform2/index.html
[ 本帖最后由 fm971 于 2008-7-21 09:15 编辑 ] 热烈欢迎参加讨论, 或提供一些最新的资料. 我觉得性能的提升应该是多方面的。下面有一个资料:
http://www.ibm.com/developerworks/cn/aix/library/au-highperform2/index.html 原帖由 scutan 于 2008-7-17 11:09 发表 http://bbs.chinaunix.net/images/common/back.gif
我觉得性能的提升应该是多方面的。下面有一个资料:
http://www.ibm.com/developerworks/cn/aix/library/au-highperform2/index.html
谢谢。
是有很多方而, 比如自己的缓存问题,mbuf /sk_buff。
但核心的还是通信模型的问题。如果是真正的异步模型就最理想。 原帖由 fm971 于 2008-7-17 11:03 发表 http://bbs.chinaunix.net/images/common/back.gif
为什么是超高性能?
因为常见资料太过普通, 没有讨论到核心问题.
项目背景:
流媒体交换服务器, 单台服务器配置4个1Gbps 网口.
要求客户连接超过1024, 网络满负载运行, 实时性好.
本贴目的:
讨论Lin ...
没看到你是要异步通信的。
[ 本帖最后由 scutan 于 2008-7-17 11:15 编辑 ] 原帖由 scutan 于 2008-7-17 11:12 发表 http://bbs.chinaunix.net/images/common/back.gif
没看到.........
thanks a lot!
有关缓存效率的一样有用. 收集一下也是给别人参考嘛!
这么看来 linux 2.6 的 epoll 效率很稳定嘛 还有这个:
http://pl.atyp.us/content/tech/servers.html 原帖由 yunhappy 于 2008-7-17 11:24 发表 http://bbs.chinaunix.net/images/common/back.gif
这么看来 linux 2.6 的 epoll 效率很稳定嘛
是.
linux 2.6 几乎在所有网络操作的时候,效率都是 O(1), 不会因数客户数量上升而降低效率。 原帖由 yunhappy 于 2008-7-17 11:24 发表 http://bbs.chinaunix.net/images/common/back.gif
这么看来 linux 2.6 的 epoll 效率很稳定嘛
深有感受,要是能支持普通文件就更好了