使用道具 举报
a.. 这是从Red Hat Linux 9 发行注记中摘出来的,附件是性能对比 a.. 本来NPTL只能支持2.5.31以后的内核,但是Redhat 把它移到了2.4的内核上面 a.. Red Hat Linux 9 包括 Native POSIX Thread Library (NPTL),它是 Linux 的 POSIX 线程的新实现。该库为 i686 或更高的处理器提供了性能增进和增加了的可缩放 性。 该线程库的设计目标是与原有的 LinuxThreads 实现在二进制上兼容;不过,依赖于脱 离 POSIX 标准的 LinuxThreads 实现之处的应用程序将需要被修正。值得注意的不同 之处包括: - 信号处理已从每线程信号处理改成 POSIX 进程信号处理。 - getpid() 在所有的线程中返回相同值。 - 如果使用了 vfork(),用 pthread_atfork 注册的线程处理程序就不会运行。 使用 NPTL 时会遇到问题的已知应用程序包括: - 版本 1.4.1 之前的 Sun JRE - IBM JRE 如果某应用程序使用 NPTL 无法正确运行,它可以使用原有的 LinuxThreads 实现来运 行,方法是设置以下的环境变量: LD_ASSUME_KERNEL=<kernel-version> 可用的版本如下: - 2.4.1 — 带有浮动堆栈的 Linuxthreads - 2.2.5 — 没有浮动堆栈的 Linuxthreads 所有动态链接的程序的 NPTL 支持可以使用以下引导时间选项来禁用: nosysinfo
NPTL的出现 在多处理器服务器架构已经成为主流的今天,Linux的发展受到了严重的制约,这也是 新的稳定版Linux核心迟迟没有开发完成的最大原因。2.4系列以前的核心和基于此所发 布的套件都只能以线程库的方式在用户空间对应用程序提供线程的支持,而没有提供核 心一级的线程管理机制,这直接限制了它在多处理器核心上的效能发挥。随后人们开始 在Linux领域寻找更为妥善的本地化线程实现方法,目前我们能够看到的最好的一个选 择就是NPTL(Native POSIX Thread Library)。 自从2002年7月起,RedHat工程师Ulrich Drepper就开始和各大Unix厂商密切接触,为 新一代Linux NPTL做准备。与此同时Linux核心也在2.5.36版中提供了一些调用,来允 许用户地址空间使用核心的线程机制。此外,GNU的C运行库GLIBC也在2.3版中提供了 NPTL所需要的TLS(Thread Local Storage)支持。在万事俱备后,Drepper在其网页上 放出了实验性的NPTL,作为glibc的线程库(Linuxthread)的二进制兼容版本。和之前的 一些Linux本地化线程支持方式相比,NPTL通过在二进制上兼容Linuxthread,使大部分 应用不用作任何改动和编译,就能够得到一定的性能提高。 走近NPTL 在《微电脑世界》评测实验室中,我们在Slackware 8.1上开始尝试着运行NPTL。在经 过多次的编译和调试后,终于成功地建立了一个NPTL运行环境。我们在其上运行了一系 列非常典型的应用,发现最大的不同就是:以前的应用在调用Linuxthread库时,会用 进程模拟出很多线程,而现在它们已经从进程列表中消失了,取而代之的是由NPTL用核 心线程机制所创建的线程。当然,目前传统的进程查看/管理工具仍无法对这些线程进 行管理。另外,通过本次测试,我们也可以清楚地感受到,在应用的启动时间和内存占 用上,NPTL的确给Linux带来较为明显的改善,运行效率也有了一定的提高。而更为具 体的测试数据,我们将在今后的相关测试报道中陆续为您做出更详尽探讨。 本地化线程的明天 虽然从技术角度上讲,NPTL的优势已经日渐清晰,但在NPTL发展了近一年之后,仍只有 RedHat对它提出了支持。当然,这也很容易理解,毕竟NPTL和RedHat有着很深的渊源, 这也给其他Linux发行商造成了一定的顾虑。同时,由于下一个稳定版的Linux核心 (2.6)至今仍迟迟没有露脸,目前能够支持NPTL也只有2.5这个试验性质的内核版本, 这也是其它厂商按兵不动、静待时机的重要原因。此外,由于Linuxthread提供了一个 极好的过渡方式——二进制兼容,这也让其他厂商有机会用自己的方式来实现本地线程 的调用,这更为NPTL的发展道路笼罩上了一层阴云。不过不管是用哪种方式,我们现在 可以明确的是Linux系统的本地化线程标准即将浮出水面,这也是Linux进入现代企业应 用的关键一步。
您需要 登录 才可以下载或查看,没有账号?注册
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
GMT+8, 2025-9-7 23:54 , Processed in 0.032509 second(s), 16 queries .
© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.