LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 831|回复: 3

为i686优化编译glibc的问题

[复制链接]
发表于 2007-1-25 21:41:33 | 显示全部楼层 |阅读模式
有多个选项不知是什么意思
--with-tls     --with-__thread     nptl      linuxthread这几个是什么意思,为i686优化该怎样选项?参考redhat的,里面各种选择都有,看不明白,而且还附带自己的add-on包,很复杂似的!
哪位能解析一下
发表于 2007-1-25 22:11:45 | 显示全部楼层
哪些东西也不见得能提升多少,日後可能问题多多,用 FC 系列作 LFS 的 host 多数不能通过,随时弊多於利,其实用 gcc-4.1.x 来编译已能提升不少效能,值得吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-26 11:10:52 | 显示全部楼层
我的目的不只在提升效能,还在于实验某些东西。我也不用redhat或fc作host
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-26 11:58:42 | 显示全部楼层
通过google查得linuxthread是传统的线程模式,Linux 2.6内核以前所有版本的标准Linux超线程库被称为LinuxThreads。这种库可以与不低于GLIBC 2.0版本GNU C库一起工作,并且与POSIX兼容;nptl是更优的线程模式,NPTL自从出现2.5内核后便开始逐渐代替LinuxThreads和NGPT。NPTL为Linux系统提供更高性能的超线程支持,并且可提供多线程企业应用软件所需的基本功能,此外还可提供高容量、高加载量的网络和邮件服务器等。


但是它们是否会同时共存呢?参考redhat与archlinux的glibc编译指引,好像都有两种线程的编译选项,就是看不明白是否同时编译两种线程模式。


这是archlinux的glibc编译指引:
  mkdir build-linuxthreads
  cd build-linuxthreads
  if echo '__thread int a;' | gcc -xc - -S -o /dev/null 2>/dev/null; then
    sed -i -e 's/0 [|][|]/1 ||/' ../elf/tst-tls10.h ../linuxthreads/tst-tls1.h
  fi

  AddOns=`cd .. && echo */configure | sed -e 's!/configure!!g;s!\(linuxthreads\|nptl\|rtkaio\)\( \|$\)!!g;s! \+$!!;s! !,!g;s!^!,!;/^,\*$/d'`
  
  
  CFLAGS="${CFLAGS} -DNDEBUG=1" ../configure --prefix=/usr \
    --enable-add-ons=linuxthreads${AddOns} --without-cvs \
    --enable-kernel=2.4.1 --disable-profile \
    --with-headers=$startdir/pkg/usr/include \
    --enable-bind-now --with-tls --without-__thread \
    --build ${CHOST} --host ${CHOST}
   
  make -r CFLAGS="${CFLAGS}" || return 1
  make install_root=${startdir}/pkg install || return 1
  make install_root=${startdir}/pkg localedata/install-locales || return 1
  cd ..
  
  mkdir build-nptl
  cd build-nptl
  CFLAGS="${CFLAGS} -DNDEBUG=1" ../configure --prefix=/usr \
     --enable-add-ons=nptl${AddOns} --without-cvs \
     --enable-kernel=2.6.6 --disable-profile \
     --with-headers=$startdir/pkg/usr/include \
     --enable-bind-now --with-tls --with-__thread \
     --build ${CHOST} --host ${CHOST}
  make -r CFLAGS="${CFLAGS}" || return 1
  
  cd build-nptl
  mkdir -p ${startdir}/pkg/lib/tls/
  libcsofile=`basename ${startdir}/pkg/lib/libc-*.so`
  cp -a libc.so ${startdir}/pkg/lib/tls/${libcsofile}
  ln -sf ${libcsofile} ${startdir}/pkg/lib/tls/`ls libc.so.*`

  libmsofile=`basename ${startdir}/pkg/lib/libm-*.so`
  pushd math > /dev/null
  cp -a libm.so ${startdir}/pkg/lib/tls/${libmsofile}
  ln -sf ${libmsofile} ${startdir}/pkg/lib/tls/`ls libm.so.*`
  popd > /dev/null

  librtsofile=`basename ${startdir}/pkg/lib/librt-*.so`
  pushd rt > /dev/null
  cp -a librt.so ${startdir}/pkg/lib/tls/${librtsofile}
  ln -sf ${librtsofile} ${startdir}/pkg/lib/tls/`ls librt.so.*`
  popd > /dev/null
  
  libthreaddbsofile=`basename ${startdir}/pkg/lib/libthread_db-*.so`
  pushd nptl_db > /dev/null
  cp -a libthread_db.so ${startdir}/pkg/lib/tls/${libthreaddbsofile}
  ln -sf ${libthreaddbsofile} ${startdir}/pkg/lib/tls/`ls libthread_db.so.*`
  popd > /dev/null

  libpthreadsofile=libpthread-${pkgver}.so
  pushd nptl > /dev/null
  cp -a libpthread.so ${startdir}/pkg/lib/tls/${libpthreadsofile}
  ln -sf ${libpthreadsofile} ${startdir}/lib/tls/`ls libpthread.so.*`
  popd > /dev/null
  
  mkdir -p ${startdir}/pkg/usr/lib/nptl
  cp -a libc.a nptl/libpthread.a nptl/libpthread_nonshared.a rt/librt.a \
        ${startdir}/pkg/usr/lib/nptl
  
  for lib in libc libpthread; do
    sed -e "s:/lib/${lib}.so:/lib/tls/${lib}.so:g" \
        -e "s:/usr/lib/${lib}_nonshared.a:/usr/lib/nptl/${lib}_nonshared.a:g" \
        ${startdir}/pkg/usr/lib/${lib}.so \
        > ${startdir}/pkg/usr/lib/nptl/${lib}.so
    chmod 755 ${startdir}/pkg/usr/lib/nptl/${lib}.so
  done

  ln -sf ../librt.so ${startdir}/pkg/usr/lib/nptl/librt.so

  mkdir -p ${startdir}/pkg/nptl ${startdir}/pkg/usr/include/nptl
  make install_root=${startdir}/pkg/nptl install-headers || return 1
  pushd ${startdir}/pkg/nptl/usr/include > /dev/null
  for i in `find . -type f`; do
    if ! [[ -f ${startdir}/pkg/usr/include/${i} ]] \
       || ! cmp -s ${i} ${startdir}/pkg/usr/include/${i}; then
         mkdir -p ${startdir}/pkg/usr/include/nptl/`dirname ${i}`
         cp -a ${i} ${startdir}/pkg/usr/include/nptl/${i}
    fi
  done
  popd > /dev/null
  rm -rf ${startdir}/pkg/nptl

  rm -rf ${startdir}/pkg/etc/ld.so.cache ${startdir}/pkg/etc/localtime
  install -D -m644 ${startdir}/src/glibc-${_snap}/nscd/nscd.conf ${startdir}/pkg/etc/nscd.conf
  install -D -m755 ${startdir}/src/nscd ${startdir}/pkg/etc/rc.d/nscd

  sed -i -e 's/^\tserver-user/#\tserver-user/' ${startdir}/pkg/etc/nscd.conf || return 1
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表