免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: yulc
打印 上一主题 下一主题

哪位知道如何让linux支持NPTL [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-17 13:56 |只看该作者
另外,说一下我的测试结果:

硬件: intel 2.8 支持超线程; 512M ddr;
操作系统: fedora4发行版;
创建线程数:1000 ; 5000; 10k; 50k; (调用pthread_create()后调用pthread_cancel()锁毁线程);
时间: 0.03-0.08秒; 0.13-0.14秒; 0.25-0.26; 1.3秒

论坛徽章:
0
12 [报告]
发表于 2006-05-17 14:00 |只看该作者
nptl这块我不大清楚,那个多出来的线程也可能和实时信号有关,好久不碰这个领域了。

至于是否N:1,你理解的还是有问题的。 每个pthread_create创建出来的线程,都被内核感知,并由内核调用; 如果是 *传统的* N:1, 则调度是由pthreads库做的。

论坛徽章:
0
13 [报告]
发表于 2006-05-17 14:42 |只看该作者
我的理解确实有些问题,参考了些资料加上版主的指点,总结一下,希望能加深理解:

在现在的linux系统中,不管是2.4内核还是2.6内核, 不管是传统的linuxthreads还是新兴的NPTL,
与"是否需要由glibc中的一个额外的线程来管理其他用户线程"是没有联系的.
传统的linuxthreads中和新的NPTL均是1:1模型.
on fedora4, 通过以下命令可以看到一个进程中各个线程的ID号(PID是进程的pid):
ls -l /proc/PID/task/

在redhat9以及redhat以后的发行版本(fedora, AS...)中,均是使用NPTL模式的,虽然redhat9是2.4内核.
通常这样验证自己的系统是否支持NPTL,存在类似以下红色行表示支持:

[root@localhost transmitdemo]# getconf GNU_LIBPTHREAD_VERSION
NPTL 2.4
[root@localhost transmitdemo]# /lib/libc.so.6
GNU C Library development release version 2.4, by Roland McGrath et al.
Copyright (C) 2006 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 4.1.0 20060304 (Red Hat 4.1.0-2).
Compiled on a Linux 2.6.9 system on 2006-03-07.
Available extensions:
        The C stubs add-on version 2.1.2.
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        GNU libio by Per Bothner
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

[ 本帖最后由 yulc 于 2006-5-18 09:17 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2006-05-17 15:11 |只看该作者
明明只有11个嘛.
./a.out 在内核好大于2.4.19之后的都是支持NPTL的。
如果想在这样的系统上以linuxthreads方式运行如下:
export LD_ASSUME_KERNEL=2.4.19;./a.out
这样会有12个。
lz看看有没有设置相似的环境变量。

论坛徽章:
0
15 [报告]
发表于 2006-05-17 15:49 |只看该作者
原帖由 yeehya 于 2006-5-17 15:11 发表
明明只有11个嘛.
./a.out 在内核好大于2.4.19之后的都是支持NPTL的。
如果想在这样的系统上以linuxthreads方式运行如下:
export LD_ASSUME_KERNEL=2.4.19;./a.out
这样会有12个。
lz看看有没有设置相似的环 ...


你的测试是在redhat9上吧,我的测试结果和你一样..
看来还有未理解的地方,但在fedora4系统上,却实有12个..

论坛徽章:
0
16 [报告]
发表于 2006-05-17 19:29 |只看该作者
为什么我在linux下只能一个进程创进254个线程呢,哪位说明一下:

for(t=1;t<257;t++)
    {
   ret=pthread_create(&id[1],NULL,(void *) test,(void *)&sin);
    if(ret!=0){
            printf ("create pthread error!\n");
            exit (1);
              }            
    }

论坛徽章:
0
17 [报告]
发表于 2006-05-17 20:13 |只看该作者
再次强调,LT 和 NPTL 都是 1:1 模型的。强烈建议 albcamus 版主更新前面提到的那个帖子。

其实,查看可靠的线程实现的方法是:
  1. $ ldd a.out
  2.                 libc.so.6 => /lib/tls/libc.so.6 (0x4002e000)
复制代码

查看程序链接到的 C 库,然后
  1. $ /lib/tls/libc.so.6 | grep NPTL
  2.         NPTL 0.60 by Ulrich Drepper
复制代码

查看对应Libc 的线程实现。

论坛徽章:
0
18 [报告]
发表于 2006-05-18 09:37 |只看该作者
谢谢楼上的,看来确实都是1:1的模型.
很奇怪的是为什么在redhat9上不会存在"多出来的"管理线程,而在fedora4上又会有?
由于两者都是NPTL的线程,那么在NPTL中, 这个管理线程倒底是不是必须的?

我现在的理解是当初NPTL是在2.5内核中调试,REDHAT把它向后移植到了redhat9上面,所以在此上默认没有使用管理线程,而在现在2.6的内核上,它又存在了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP