Yes, I have tried both pump and regular mode, and both behave the same way.<br><br>A lot of the projects that I will be compiling include boost, and I believe that the pump fails on those, and falls back to regular mode. <br>
<br>-Jeff<br><br><div class="gmail_quote">On Tue, Jun 29, 2010 at 10:48 AM, Fergus Henderson <span dir="ltr">&lt;<a href="mailto:fergus@google.com">fergus@google.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<p>Did you try using pump mode?<br>
That should give you a better build speed-up and may also avoid this issue.</p><div><div></div><div class="h5">
<p>On Jun 29, 2010 6:32 AM, &quot;Jeff Kilpatrick&quot; &lt;<a href="mailto:kilpatrick.jeff@gmail.com" target="_blank">kilpatrick.jeff@gmail.com</a>&gt; wrote:<br type="attribution">&gt; Oops, my original response went directly to Ihar, rather than to the list.<br>

&gt; <br>&gt; ----<br>&gt; <br>&gt; <br>&gt; <br>&gt; Thank you for your response.<br>&gt; <br>&gt; We do have a tool internally that could &#39;scrub&#39; the object file of its<br>&gt; dynamic symbols, and could be adapted for this purpose. However, I&#39;m<br>

&gt; hesitant to modify anything with the .o and .so with an external tool, as in<br>&gt; some cases, it may be hiding a legitimate issue. Once an exception makes it<br>&gt; into the code, its tempting to continue adding exceptions to fix issues.<br>

&gt; Before you know it, you have 600 branches with unique &#39;fixes&#39; to them :)<br>&gt; <br>&gt; Once we get a consistent checksum on the .o and .so files, they&#39;ll be<br>&gt; packaged into a .iso, which will also need to be repeatable. This can be<br>

&gt; challenging as well, since attributes on the files can affect the final<br>&gt; checksum.<br>&gt; <br>&gt; -Jeff<br>&gt; <br>&gt; <br>&gt; On Tue, Jun 29, 2010 at 6:58 AM, Ihar `Philips` Filipau &lt;<br>&gt; <a href="mailto:thephilips@gmail.com" target="_blank">thephilips@gmail.com</a>&gt; wrote:<br>

&gt; <br>&gt;&gt; Hi Jeff!<br>&gt;&gt;<br>&gt;&gt; You can try to collect the check-sum only for the ELF segments which are<br>&gt;&gt; actually derived from the the source code, omitting the segments with the<br>&gt;&gt; extra compiler&#39;s info. I do not know any ready tool for the purpose, but<br>

&gt;&gt; coding something like this - print on stdout all segments except the<br>&gt;&gt; black-listed - shouldn&#39;t be too complicated.<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; On Tue, Jun 29, 2010 at 11:41 AM, Jeff Kilpatrick &lt;<br>

&gt;&gt; <a href="mailto:kilpatrick.jeff@gmail.com" target="_blank">kilpatrick.jeff@gmail.com</a>&gt; wrote:<br>&gt;&gt;<br>&gt;&gt;&gt; Thank you for your response.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Yes, this is the only difference in the object file. We&#39;ve taken great<br>

&gt;&gt;&gt; pains over the last few years, removing anything that would cause checksums<br>&gt;&gt;&gt; to mismatch.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; I will do some research myself, and talk to a few developers to see if<br>

&gt;&gt;&gt; they can help me.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Thanks<br>&gt;&gt;&gt; -Jeff<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; On Tue, Jun 29, 2010 at 1:32 AM, Martin Pool &lt;<a href="mailto:mbp@sourcefrog.net" target="_blank">mbp@sourcefrog.net</a>&gt; wrote:<br>

&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; On 29 June 2010 13:02, Jeff Kilpatrick &lt;<a href="mailto:kilpatrick.jeff@gmail.com" target="_blank">kilpatrick.jeff@gmail.com</a>&gt;<br>&gt;&gt;&gt;&gt; wrote:<br>&gt;&gt;&gt;&gt; &gt; Hello,<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; At my work, we&#39;ve just begun to investigate how much of an impact that<br>&gt;&gt;&gt;&gt; &gt; distcc will have on our builds.<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; We typically perform 200 builds a week, ranging from a thousand lines<br>

&gt;&gt;&gt;&gt; of<br>&gt;&gt;&gt;&gt; &gt; code, up to 600,000 lines of code each. Our back end build scripts are<br>&gt;&gt;&gt;&gt; based<br>&gt;&gt;&gt;&gt; &gt; on python, and use Linux make to build. We are running VMWare images on<br>

&gt;&gt;&gt;&gt; a<br>&gt;&gt;&gt;&gt; &gt; blade cluster, and each of our three new build servers have 20Ghz<br>&gt;&gt;&gt;&gt; processing<br>&gt;&gt;&gt;&gt; &gt; power, with 4G of RAM. Our primary build environments are loop back<br>

&gt;&gt;&gt;&gt; ISOs,<br>&gt;&gt;&gt;&gt; &gt; from a central CIFS server, and are unioned together with unionfs. Our<br>&gt;&gt;&gt;&gt; &gt; source code is then copied into this environment, and we proceed with<br>&gt;&gt;&gt;&gt; our<br>

&gt;&gt;&gt;&gt; &gt; build, using chroot to enter our build environment. Our &#39;distcc&#39;<br>&gt;&gt;&gt;&gt; machines<br>&gt;&gt;&gt;&gt; &gt; use the same loop back system, with only our OS and distcc being<br>&gt;&gt;&gt;&gt; accessible.<br>

&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; That&#39;s pretty cool.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; &gt; One of the most important things for our builds, due to the market that<br>&gt;&gt;&gt;&gt; we<br>&gt;&gt;&gt;&gt; &gt; are in, is that our builds must be reproducible, with repeatable<br>

&gt;&gt;&gt;&gt; md5sums on<br>&gt;&gt;&gt;&gt; &gt; our shared objects, based on the same label and same dependencies. In<br>&gt;&gt;&gt;&gt; our<br>&gt;&gt;&gt;&gt; &gt; recent tests, we were able to take a particular build from 24 minutes<br>

&gt;&gt;&gt;&gt; to 14<br>&gt;&gt;&gt;&gt; &gt; minutes, then finally 5 minutes, using distcc and adjusting our VMs.<br>&gt;&gt;&gt;&gt; &gt; However, when performing an md5sum on our final shared objects / object<br>&gt;&gt;&gt;&gt; &gt; files, the checksums change every build. We dropped down to just using<br>

&gt;&gt;&gt;&gt; g++<br>&gt;&gt;&gt;&gt; &gt; to perform our linking, all locally, but our object files are still<br>&gt;&gt;&gt;&gt; &gt; mismatching.<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; In the object files&#39; `objdump -s` output, it appears that an entry is<br>

&gt;&gt;&gt;&gt; being<br>&gt;&gt;&gt;&gt; &gt; made into all our object files with the following syntax<br>&gt;&gt;&gt;&gt; &quot;distccd_XXXXX&quot;,<br>&gt;&gt;&gt;&gt; &gt; with XXXXX being a seemingly random combination of characters.<br>

&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Hi Jeff,<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; I think this is coming from gcc recording the input file name in the<br>&gt;&gt;&gt;&gt; object file.  distccd_xxxx.ii is the temporary file name used on the<br>

&gt;&gt;&gt;&gt; server.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; &gt; In the same object file, compiled locally without distcc, we get a<br>&gt;&gt;&gt;&gt; rather<br>&gt;&gt;&gt;&gt; &gt; generic &lt;built-in&gt; placeholder.<br>

&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; I think this means it&#39;s coming from the builtin preprocessor.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; I probably won&#39;t have time to work on this myself but if you have a<br>&gt;&gt;&gt;&gt; programmer interested in it there are two possible avenues:<br>

&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; - make gcc read from a file called &lt;built-in&gt; in a temporary subdirectory<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; - find some way to stop it recording the compiler input file name<br>

&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Is that the only difference in the object files?  It&#39;s pretty common<br>&gt;&gt;&gt;&gt; for compilers to also record something about the time the compilation<br>&gt;&gt;&gt;&gt; was run or for source files to build this in, which would mean they<br>

&gt;&gt;&gt;&gt; change every time.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; I&#39;ve reviewed the source code for distcc, and seen a few references to<br>&gt;&gt;&gt;&gt; this<br>&gt;&gt;&gt;&gt; &gt; distccd_xxxxx. Unfortunately, I&#39;m not a programmer, and thus am at a<br>

&gt;&gt;&gt;&gt; loss on<br>&gt;&gt;&gt;&gt; &gt; how to further troubleshoot this, or even if its possible to get<br>&gt;&gt;&gt;&gt; consistent<br>&gt;&gt;&gt;&gt; &gt; checksums with distcc.<br>&gt;&gt;&gt;&gt; &gt;<br>

&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; Versions<br>&gt;&gt;&gt;&gt; &gt; =======<br>&gt;&gt;&gt;&gt; &gt; g++ (Gentoo 4.3.2-r4 p1.8, pie-10.1.5) 4.3.2<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; distcc 3.1 i686-pc-linux-gnu<br>

&gt;&gt;&gt;&gt; &gt;   (protocols 1, 2 and 3) (default port 3632)<br>&gt;&gt;&gt;&gt; &gt;   built Mar 29 2010 10:55:35<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; Kernel: 2.6.9-89.ELsmp<br>&gt;&gt;&gt;&gt; &gt;<br>

&gt;&gt;&gt;&gt; &gt; Command being issued:<br>&gt;&gt;&gt;&gt; &gt;       DISTCC_VERBOSE=1 make -j24 CXX=&quot;distcc&quot;<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; Here&#39;s the partial output of objdump -s:<br>

&gt;&gt;&gt;&gt; &gt;  04f0 00030000 5f6d6f76 655f636f 6e737472  ...._move_constr<br>&gt;&gt;&gt;&gt; &gt;  0500 7563745f 66776b2e 68000300 00474454  uct_fwk.h....GDT<br>&gt;&gt;&gt;&gt; &gt;  0510 79706573 2e68000a 00007365 72646566  ypes.h....serdef<br>

&gt;&gt;&gt;&gt; &gt;  0520 732e6800 01000073 75666669 782e6870  s.h....suffix.hp<br>&gt;&gt;&gt;&gt; &gt;  0530 70000b00 00646973 74636364 5f616333  p....distccd_ac3<br>&gt;&gt;&gt;&gt; &gt;  0540 31633936 612e6969 000c0000 61646c5f  1c96a.ii....adl_<br>

&gt;&gt;&gt;&gt; &gt;  0550 62617272 6965722e 68707000 0d000062  barrier.hpp....b<br>&gt;&gt;&gt;&gt; &gt;  0560 6f6f6c5f 6677642e 68707000 0e000069  ool_fwd.hpp....i<br>&gt;&gt;&gt;&gt; &gt;  0570 6e746567 72616c5f 635f7461 672e6870  ntegral_c_tag.hp<br>

&gt;&gt;&gt;&gt; &gt;  0580 70000e00 00766f69 645f6677 642e6870  p....void_fwd.hp<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; Thank you for reviewing my issue.<br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; -Jeff<br>

&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt; &gt; __<br>&gt;&gt;&gt;&gt; &gt; distcc mailing list            <a href="http://distcc.samba.org/" target="_blank">http://distcc.samba.org/</a><br>&gt;&gt;&gt;&gt; &gt; To unsubscribe or change options:<br>

&gt;&gt;&gt;&gt; &gt; <a href="https://lists.samba.org/mailman/listinfo/distcc" target="_blank">https://lists.samba.org/mailman/listinfo/distcc</a><br>&gt;&gt;&gt;&gt; &gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt; Martin<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; __<br>&gt;&gt;&gt; distcc mailing list            <a href="http://distcc.samba.org/" target="_blank">http://distcc.samba.org/</a><br>
&gt;&gt;&gt; To unsubscribe or change options:<br>
&gt;&gt;&gt; <a href="https://lists.samba.org/mailman/listinfo/distcc" target="_blank">https://lists.samba.org/mailman/listinfo/distcc</a><br>&gt;&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; --<br>&gt;&gt; Don&#39;t walk behind me, I may not lead.<br>

&gt;&gt; Don&#39;t walk in front of me, I may not follow.<br>&gt;&gt; Just walk beside me and be my friend.<br>&gt;&gt;    -- Albert Camus (attributed to)<br>&gt;&gt;<br></p>
</div></div></blockquote></div><br>