分享
 
 
 

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

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在最开始我就说了,我刚转入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。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有