fm971 发表于 2008-07-17 11:03

超高性能网络编程, 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 编辑 ]

fm971 发表于 2008-07-17 11:06

热烈欢迎参加讨论, 或提供一些最新的资料.

scutan 发表于 2008-07-17 11:09

我觉得性能的提升应该是多方面的。下面有一个资料:
http://www.ibm.com/developerworks/cn/aix/library/au-highperform2/index.html

fm971 发表于 2008-07-17 11:12

原帖由 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。
但核心的还是通信模型的问题。如果是真正的异步模型就最理想。

scutan 发表于 2008-07-17 11:12

原帖由 fm971 于 2008-7-17 11:03 发表 http://bbs.chinaunix.net/images/common/back.gif

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

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

本贴目的:
讨论Lin ...

没看到你是要异步通信的。

[ 本帖最后由 scutan 于 2008-7-17 11:15 编辑 ]

fm971 发表于 2008-07-17 11:20

原帖由 scutan 于 2008-7-17 11:12 发表 http://bbs.chinaunix.net/images/common/back.gif


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

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

yunhappy 发表于 2008-07-17 11:24

这么看来 linux 2.6 的 epoll 效率很稳定嘛

converse 发表于 2008-07-17 11:24

还有这个:
http://pl.atyp.us/content/tech/servers.html

fm971 发表于 2008-07-17 11:27

原帖由 yunhappy 于 2008-7-17 11:24 发表 http://bbs.chinaunix.net/images/common/back.gif
这么看来 linux 2.6 的 epoll 效率很稳定嘛

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

aoegiss 发表于 2008-07-17 11:38

原帖由 yunhappy 于 2008-7-17 11:24 发表 http://bbs.chinaunix.net/images/common/back.gif
这么看来 linux 2.6 的 epoll 效率很稳定嘛

深有感受,要是能支持普通文件就更好了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 超高性能网络编程, Asynchronous network I/O