转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> SyBase >> 正文
linux编程(3) 2.6内核、Posix兼容性与其他         ★★★★

linux编程(3) 2.6内核、Posix兼容性与其他

作者:闵涛 文章来源:闵涛的学习笔记 点击数:776 更新时间:2009/4/22 23:09:01
     在最开始我就说了,我刚转入linux刚刚3天,我进入linux下的目的也很明确:我们公司的后台系统网络底层模块目前使用的是我封装的IOCP。我首先就需要将这个IOCP模块移植到LINUX下,用LINUX2.6内核所支持的EPOLL模型来取代,同时还要最大限度地兼容原来的模块接口。
     因为我们开发的是服务器系统,对服务器端程序性能要求比较苛刻,所以传统的select、poll或者预先派生子进程等等网络服务器程序开发模型基本上我们不考虑。从e-donkey的主页上得知,他们采用的EPOLL模型跑在4G内存的LINUX上,支持的最大用户已经超过了280K,由此可见EPOLL的威力,基本上可以断定,他们的服务器使用了SMP。而资料表明,linux 2.6内核至少在以下三个方面对开发大容量高性能并发服务器程序有大的帮助(也许我孤陋寡闻,我目前只关注这三个改进)。
1:NPTL
UNIX传统是没有线程的,线程是后来加入的,所以*nix操作系统从来对线程的支持都不是很好。后来IBM和REDHAT提出了线程模型改进计划,IBM提出的是NGPT,这是一个 m : n的线程模型,REDHAT提出了NPTL,这是一个1:1的线程模型,即一个用户线程对应一个内核线程。从测试效果来看,NPTL性能大大超过了NPTL,IBM现在已经停止了NGPT的开发,只做维护。NPTL已经正式加入到LINUX2.6内核。关于NPTL的性能测试,请参见:http://www-900.ibm.com/developerWorks/cn/linux/l-nptl/index.shtml 总之,性能比传统的linuxthreads提高了很多。

2:新的内核调度器
上面我说了,e-donkey的服务器肯定用了SMP,而linux以前的调度器对多处理器支持得不是很好,Ingo Molnar对此进行了改进,以下是引用自网上的资料:
新的调度器 2.6版本的Linux 内核使用了由Ingo Molnar开发的新的调度器算法,称为O(1)算法,它在高负载的情况下执行得极其出色,
并且当有很多处理器时也可以很好地扩展。
  • SMP效率:如果有工作需要完成,那么所有处理器都会工作。
  • 等待进程:没有进程需要长时间地等待处理器;同时,没有进程会无端地占用大量的CPU时间。
  • SMP进程映射:进程只映射到一个CPU而且不会在CPU之间跳跃。
  • 优先级:不重要的任务的优先级低(反之亦然)。
  • 负载平衡:调度器会降低那些超出处理器负载能力的进程的优先级。
  • 交互性能:使用新调度器,即便是在非常高负载的情况下,系统花费很长时间来响应鼠标点击或者键盘输入的情况不会再发生。

    处理器支,对于高性能的网络服务器程序来说,SMP基本上是必须的,所以新的调度器对此有利。

    3、EPOLL
    在2.4内核里,epoll只是作为一个补丁发布,现在在2.6内核里,已经被正式支持收入了内核开发树,根据epoll作者提供的资料以及采用此模型的e-donkey服务器程序,此模型的威力惊人,基本上不逊于WINDOWS的IOCP和FreeBSD的KQUEUE。

    POSIX兼容性
    在新的2.6内核里,我遇到了一个奇怪的问题,无法使用POSIX的消息队列,明明已经 include <mqueue.h>
    但是编译的时候就是说找不到mq_open和mq_unlink这些东西。后来在国外网站上找到资料,原来消息队列已经从传统的linuxthreads中移除,将添加到NPTL中,目前内核还没支持,不过在http://www.kernel.org上已经发布了一个-mm补丁,据说这个补丁解决了这个问题。
    在我写程序中,我尽量使用POSIX的标准,一则为了兼容性,而则为了效率。虽然消息队列和信号量这些都有基于SYSTEM V的实现,但是SYSTEM V是80年代初期加入的。很多东西从现在来看,不仅仅使用麻烦,而且效率低下,比如信号灯,SYSTEM V的信号灯就是基于内核的,而POSIX的信号灯是基于内存的, 后者比前者少了在内核和用户模式之间的切换,效率要高,而且使用也非常简单,和WINDOWS下的信号量基本没区别。而且POSIX标准比SYSTEM V的实现大多数要新得多,所以我坚持使用支持POSIX标准的实现。

  • 最后,如果要查看自己的系统是否支持NPTL,可以以如下方式查看:

  • $ /lib/tls/libc.so.6
    GNU C Library 20041006 release version 2.3.4, by Roland McGrath et al.
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    Compiled by GNU CC version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6).
    Compiled on a Linux 2.6.8 system on 2004-10-15.
    Available extensions:
    GNU libio by Per Bothner
    crypt add-on version 2.1 by Michael Glad and others
    Native POSIX Threads Library by Ulrich Drepper et al
    The C stubs add-on version 2.1.2.
    BIND-8.2.3-T5B
    NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
    Glibc-2.0 compatibility add-on by Cristian Gafton
    GNU Libidn by Simon Josefsson
    Thread-local storage support included.
    For bug reporting instructions, please see:<http://www.gnu.org/software/libc/bugs.html>.

  • 红色的那行字就是,如果看传统的linuxthreads

  • $ /lib/libc.so.6
    GNU C Library 20041006 release version 2.3.4, by Roland McGrath et al.
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    Compiled by GNU CC version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6).
    Compiled on a Linux 2.6.8 system on 2004-10-15.
    Available extensions:
    GNU libio by Per Bothner
    crypt add-on version 2.1 by Michael Glad and others
    linuxthreads-0.10 by Xavier Leroy
    The C stubs add-on version 2.1.2.
    BIND-8.2.3-T5B
    NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
    Glibc-2.0 compatibility add-on by Cristian Gafton
    GNU Libidn by Simon Josefsson
    libthread_db work sponsored by Alpha Processor Inc
    Thread-local storage support included.
    For bug reporting instructions, please see:
    <
    http://www.gnu.org/software/libc/bugs.html>.

  • 如何察看自己的程序时候使用了NPTL,很简单,比如我们编译了某个可执行文件 sem

  • 输入如下命令

  • $ ldd sem

  • libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4003d000)
     libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
     libm.so.6 => /lib/tls/libm.so.6 (0x4004a000)
    因为NPTL需要TLS支持,所以连接到的库都是TLS下的,如果没连接到TLS下的库,那么程序就没用上NPTL。


  • [SyBase]linux 2.6内核epoll用法举例说明(续)--给echo服务…  [SyBase]linux 2.6内核epoll用法举例说明
    [SyBase]linux 2.6内核epoll用法简要说明  
    教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台