Hello everyone. I'm trying to run a fairly heavily multi-threaded application on the Motorola/Freescale MPC5200 platform. So far, we're having a few performance problems. Freescale has profiled the application using strace and shown that a lot of our CPU time goes into executing the kill and rt_sigsuspend system calls, which we understand are used in the implementation of the threading library.
So, I figured I'd see if NPTL (Native Posix Threads Library) would help us out at all. I found and attempted to use a utility named crosstool (0.28-rc37) from http://kegel.com/crosstool/ to build a new toolchain supporting this. I made a few changes to crosstool.sh in an attempt to request NPTL. These are shown later in the email. However, I'm getting an error from the configure of glibc: ... /home/swarren/src/crosstool-0.28-rc37/build/powerpc-603e-linux-gnu/gcc-3 .4-20041001-glibc-20041004/glibc-20041004/configure --prefix=/usr --build=i686-pc-linux-gnu --host=powerpc-603e-linux-gnu --enable-kernel=2.4.24 --without-cvs --without-gd --with-tls --with-__thread --enable-shared --enable-add-ons=nptl --with-headers=/usr/local/ppc_82xx/powerpc-603e-linux-gnu/gcc-3.4-200410 01-glibc-20041004/powerpc-603e-linux-gnu/include ... running configure fragment for nptl/sysdeps/pthread checking for forced unwind support... no configure: error: forced unwind support is required I've tried various combinations of: gcc-3.4.2 (release) gcc-3.4-20041001 (10/01 snapshot) glibc-2.3.3 (release) glibc-20041004 (10/04 snapshot) binutils-2.15 (release) binutils-041007) (10/07 snapshot) kernel 2.4.24 (release) kernel 2.6.8 (release) My question is - can anybody tell me, or point me at a website that definitively tells me: 1) Is NPTL available on PPC at all? I assume so, since I found one of the original announcement of NPTL, which mentions performance on a large SMP PPC system. 2) Which kernels have the required support for NPTL - I believe 2.6.x does. I know RedHat back-ported it to their 2.4.x kernels for RedHat 9 (at least x86). Did it get back-ported into any official 2.4.x kernel, such as the 2.4.24 I tried? 3) Which glibc and gcc do I need. I found webpages that indicate gcc >= 3.4.x is required for toolchain thread/TLS support, and NPTL is part of glibc >= 2.3.x. 4) Which binutils should work? 5) Am I missing some configure options for glibc? Or, binutils or gcc? So far, I'm downloading all GNU tools from gnu.org, or a mirror, and kernels from kernel.org. Should I try PPC-specific branches for any of this? Note: I'd really like 2.4.x support if it's available - I need a DMA-enabled IDE driver for the MPC5200, and so far, all I have is a patched 2.4.24 directly from Freescale (which apparently they're working on integrating back into the kernel at www.denx.de) Eventually, we intend to use a Montavista-based system. We were using MV Linux 3.0 (before we hit problems with IDE DMA) which uses kernel 2.4.18. Thanks for any help, or pointers to good resources. I spent most of yesterday googling and trying out different gcc/glibc/kernel combinations, and couldn't get past this. Modifications I made to crosstool.sh to request NPTL: (Note that if I remove just the second part of this patch, it all builds fine, but using the old Linuxthreads instead of NPTL) =============================================================== [swarren at swarren-linux crosstool-0.28-rc37]$ diff crosstool.sh.orig crosstool.sh 365,367c365,367 < --enable-kernel=2.4.3 \ < --without-cvs --disable-profile --disable-debug --without-gd \ < --without-tls --without-__thread \ --- > --enable-kernel=2.4.24 \ > --without-cvs --without-gd \ > --with-tls --with-__thread \ 369c369 < --enable-add-ons${GLIBC_ADDON_OPTIONS} --with-headers=$HEADERDIR --- > --enable-add-ons=nptl --with-headers=$HEADERDIR =============================================================== I created my own top-level build script and .dat files based upon the existing ones: =============================================================== [swarren at swarren-linux crosstool-0.28-rc37]$ cat demo-ppc603e.sh #!/bin/sh set -ex TARBALLS_DIR=$HOME/archive RESULT_TOP=/usr/local/ppc_82xx export TARBALLS_DIR RESULT_TOP GCC_LANGUAGES="c,c++" export GCC_LANGUAGES # Really, you should do the mkdir before running this, # and chown /opt/crosstool to yourself so you don't need to run as root. mkdir -p $RESULT_TOP # Build the toolchain. Takes a couple hours and a couple gigabytes. eval `cat powerpc-603e.dat gcc-3.4-20041001-glibc-20041004.dat` sh all.sh --notest echo Done. =============================================================== =============================================================== [swarren at swarren-linux crosstool-0.28-rc37]$ cat gcc-3.4-20041001-glibc-20041004.dat BINUTILS_DIR=binutils-2.15 GCC_DIR=gcc-3.4-20041001 GLIBC_DIR=glibc-20041004 LINUX_DIR=linux-2.6.8 =============================================================== -- Stephen Warren, Software Engineer, NVIDIA, Fort Collins, CO swarren at nvidia.com http://www.nvidia.com/ swarren at wwwdotorg.org http://www.wwwdotorg.org/pgp.html