[distcc] garbage transferred instead of preprocessed source
Martin Pool
mbp at sourcefrog.net
Wed Apr 12 00:13:53 GMT 2006
On 11/04/2006, at 7:27 PM, Zdenek Behan wrote:
> Hi,
>
> I encountered a very strange problem with distcc. Let me explain:
>
> I have 2 machines (both gentoo). One is i686 (fast) and the other
> is ppc (slow). I have a working(tested) ppc crosscompiler on i686
> and native compiler on ppp [same versions - 3.4.6]
>
> I emerged exactly the same version of distcc on both (tried
> multiple versions), and ran them with:
>
> (slow machine)
> PATH="/usr/powerpc-unknown-linux-gnu/bin:/usr/powerpc-unknown-linux-
> gnu/gcc-bin/3.4.6/" /usr/bin/distccd -p 55555 -N 10 --allow
> 192.168.1.0/24 --listen=192.168.1.15 --no-detach --user distcc --
> log-stderr
>
> (fast machine)
> PATH="/usr/powerpc-unknown-linux-gnu/bin:/usr/powerpc-unknown-linux-
> gnu/gcc-bin/3.4.6/" /usr/bin/distccd -p 55555 -N 10 --allow
> 192.168.1.0/24 --listen=192.168.1.201 --no-detach --user distcc --
> log-stderr
>
>
> I put both hosts (201, 15) into /etc/distcc/hosts.
>
> Daemons work fine until i try to actually compile something.
>
> --
> #include <stdio.h>
>
> int main( int argc, char ** argv )
> {
> printf("Hello world!\n");
>
> return 1;
> }
> --
>
> I created simple hello.c to demonstrate. The command used is:
> distcc powerpc-unknown-linux-gnu-gcc -c -o hello.o hello.c
>
> Now i have 4 variants of using distcc. Fast to Fast (localhost)
> Fast to Slow, Slow to Fast and Slow to Slow.
>
> When doing any of the pointless variants (F->S, F->F, S->S),
> distccd creates /tmp/distccd_key.i on the local machine containing
> preprocessed source and within fraction of a second, it's done.
> Verbose distccd output says something like:
When you say "/tmp/distccd_key.i " I presume the "key" is actually
some random hex characters?
>
> distccd[12392] (dcc_check_client) connection from 192.168.1.15:1895
> distccd[12392] compile from hello.c to hello.o
> distccd[12392] (dcc_r_file_timed) 16695 bytes received in
> 0.001372s, rate 11883kB/s
> distccd[12392] (dcc_collect_child) cc times: user 0.170000s, system
> 0.040000s, 501 minflt, 1030 majflt
> distccd[12392] powerpc-unknown-linux-gnu-gcc hello.c on localhost
> completed ok
> distccd[12392] job complete
>
> In the last variant (Slow -> Fast), it creates /tmp/distccd_key.i
> as well, however, what it contains can hardly be compared to
> preprocessed source. It's basically a binary file containing a
> random dump of some disk data. I have a copy of such a file in case
> anyone wants to see it, but there's not much to see, really.
>
> Naturally this fails with megabytes long error log going as following
> /tmp/distccd_237f6a6d.i:122: error: stray '\242' in program
> /tmp/distccd_237f6a6d.i:122: error: stray '\160' in program
> /tmp/distccd_237f6a6d.i:122: error: stray '\195' in program
> /tmp/distccd_237f6a6d.i:122: error: stray '\242' in program
> ...
>
> Output looks like this:
> distccd[11797] (dcc_check_client) connection from 192.168.1.15:1894
> distccd[11797] compile from hello.c to hello.o
> distccd[11797] (dcc_r_file_timed) 16695 bytes received in
> 0.002057s, rate 7926kB/s
> distccd[11797] (dcc_collect_child) cc times: user 0.425935s, system
> 0.989849s, 889 minflt, 0 majflt
> distccd[11797] powerpc-unknown-linux-gnu-gcc hello.c on localhost
> failed
> distccd[11797] job complete
>
> Notice the size file size actually being the same. It's the content
> that is scrambled, for reason completely unknown to me. Neither
> side does crash, only report the huge error log and then go on.
>
> Just for the record, distcc is built on both systems natively with
> native compiler (same version - 3.4.6), glibc versions are not the
> same, but i can hardly imagine that being a problem.
>
> Can anyone help me, or at least point me to where i should be
> looking for the problem? This seems to be purely distcc issue, as
> it never gets to actually compiling anything, besides, i believe my
> crosscompiler setup is correct.
>
> My first guess was endianity swap (ppc is big endian), but since
> there is some totally out of place text mixed up with garbage
> binary data in the temporary file, i think that's not the solution.
> So now i'm left with being completely clueless, and any help will
> be appreciated.
I suspect you have a kernel bug on the ppc machine which is making it
transmit the wrong data across the network. To check it, please run
on the ppc host
tcpdump -w distcc.pcap 'tcp port 2622'
and compile a file. Then stop tcpdump and post the capture file to
me, or have a look at it in ethereal if you like. I suspect we will
see garbage in the DOTI field because sendfile isn't working
properly. What kernel are you running there? Do you have a known
good one you could try?
--
Martin
More information about the distcc
mailing list