On Tuesday, March 24, 2015 3:17:55 AM Walter Dnes wrote:
> On Mon, Mar 23, 2015 at 06:18:46PM -0400, Mike Gilbert wrote
> 
> > You will probably need to add -m32 to CFLAGS to avoid building 64-bit
> > objects on the 64-bit machine.
> 
>   How could i686-pc-linux-gnu-gcc build 64-bit stuff in the first place?
> I followed the instructions, and ran the following on the host 64-bit
> machine...
> 
> [d531][root][~] crossdev -t -S i686-pc-linux-gnu
> 
> [d531][root][~] i686-pc-linux-gnu-gcc --version
> i686-pc-linux-gnu-gcc (Gentoo 4.9.2 p1.2, pie-0.6.2) 4.9.2
> Copyright (C) 2014 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.
> 
> [d531][root][~] echo 'int main(){return 0;}' > ctest.c
> [d531][root][~] i686-pc-linux-gnu-gcc -Wall ctest.c -o ctest
> [d531][root][~] file ctest
> ctest: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
> dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux
> 2.6.32, not stripped
> 
>   Here's how far I've gotten with the setup.  Let me know if I'm missing
> anything...
> 
> =========================================================================
> 
> On the host; 64-bit Gentoo on Core2; IP address 192.168.123.251
> 
> # emerge crossdev
> 
> # crossdev -t -S i686-pc-linux-gnu
> 
> # emerge distcc
> 
> edit /etc/conf.d/distccd to indicate allowed client(s).  Change the
> DISTCCD_OPTS line to...
> 
> DISTCCD_OPTS="--port 3632 --log-level notice --log-file /var/log/distccd.log 
-N 15 --allow 192.168.123.253
> 
> get distccd service running now and every boot up (OpenRC)...
> 
> # rc-update add distccd default
> 
> # rc-service distccd start
> 
>   I believe it's OK to leave "-march=native" in the host's make.conf
> 
> =========================================================================
> 
>   On the client; underpowered ancient 32-bit Atom netbook; 192.168.123.253
> 
> # emerge distcc
> 
> specify host(s)
> 
> # /usr/bin/distcc-config --set-hosts "192.168.123.251"
> 
> This modifies /etc/distcc/hosts
> 
> In make.conf make the following changes
> 
> MAKEOPTS="-j1 -l2"
> 
> add "distcc distcc-pump" to FEATURES variable
> 
>   Replace "-march=native" in CFLAGS with output of...
> # gcc -v -E -x c -march=native -mtune=native - < /dev/null 2>&1 | grep cc1 | 
perl -pe 's/ -mno-\S+//g; s/^.* - //g;'
> 
>   Note that the distcc wiki page gives different instructions here than
> the crossdev wiki page.  The command goes out of its way to remove the
> "-mno-<whatever>" compiler flags.  This results in (one long line)...
> 
> CFLAGS="-O2 -march=atom -msahf -mmovbe -mfxsr --param l1-cache-size=24
> --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=atom
> -fstack-protector -mfpmath=sse -fomit-frame-pointer -pipe
> -fno-unwind-tables -fno-asynchronous-unwind-tables"
> 
> Note that I include "-mfpmath=sse -fomit-frame-pointer -pipe
> -fno-unwind-tables -fno-asynchronous-unwind-tables" myself.
> 
> =========================================================================
> 
>   Now for the questions...
> 1) https://wiki.gentoo.org/wiki/Distcc#Using_distcc_with_automake
> mentions adding...
> 
> export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
> 
> ...to /etc/env.d/  Is this necessary for Portage/emerge/etc, or is
> "automake" something separate?  (You can tell I'm not a programmer, let
> alone a developer.)
> 
> 2) The docs mention running emerge on the client with the command...
> 
> # pump emerge -u world
> 
> Is that all there is, or am I missing something?  Does it
> "automagically" install properly?  Can I assume that...
> 
> a) The "pump" command does the lookup in /etc/distcc/hosts for the
> appropriate server
> 
> b) The line...
> 
> CHOST="i686-pc-linux-gnu"
> 
> ...in the client's make.conf is sufficient to tell emerge to use
> "/usr/bin/i686-pc-linux-gnu-gcc" on the host and not "/usr/bin/gcc"?
> 
> 3) Is this supposed to happen on the host...
> 
> =====================================================
> [d531][waltdnes][~] gcc-config -l
>  [1] i686-pc-linux-gnu-4.9.2 *
> 
>  [2] x86_64-pc-linux-gnu-4.8.3 *
> =====================================================
> 
> Note that the asterisk after "x86_64-pc-linux-gnu-4.8.3" is green.
> 
> 4) Is the command...
> 
> # DISTCC_DIR="" distccmon-text 5
>   Or:
> # DISTCC_DIR="" distccmon-gnome
> 
> ...supposed to be run from a seprate terminal?
> 

Let me know if you have any luck with pump mode, I didn't. IIRC it sort of 
worked but most compiles fell back to compiling locally so it's was actually 
slower. The rest of this post (or parts) may not apply if you do get it 
working.

I've also found that I get better performance without the -l N on MAKEPOTS and 
specifying the number of cores per host as follows:

distcc-config --set-hosts "192.168.123.251/4" 

It may not matter if you got only one host. Also change the -j N flag 
accordingly. You'll need to do some testing to find the right number, I've find 
that between 4 to 8 cores per physical core works best (for some reason varies 
between hosts). Just look for the right number, you'll know when you see the 
CPU usage maxing on the hosts during a parallel build. Keep in mind that most 
makefiles don't do a lot of parallel compiling so you need to use the monitor 
utility to check during a busy time.

Also if you're using wireless and you can connect via ethernet do that because 
you will see a LOT of traffic.

-- 
Fernando Rodriguez

Reply via email to