Hi. I am watching rust compile itself from sources and with VERBOSE=1 I can see the current command is, for example:
CFG_LLVM_LINKAGE_FILE=/home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/rt/llvmdeps.rs LD_LIBRARY_PATH=/home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/stage0/lib:$LD_LIBRARY_PATH x86_64-unknown-linux-gnu/stage0/bin/rustc --cfg stage0 -O --cfg rtopt -C prefer-dynamic -C no-stack-check --target=x86_64-unknown-linux-gnu -W warnings -L "x86_64-unknown-linux-gnu/rt" -L native="/home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/llvm/Release/lib" --out-dir x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/lib -C extra-filename=-bb943c5a src/librustc_platform_intrinsics/lib.rs
Watching with top I can see it uses no more than 100% CPU on a 4 core system which indicates to me it's using only one core(one thread I mean) otherwise it would go up to 400%
Or maybe only this stage0 rust is single-threaded? EDIT: stage1 too.
Note that I didn't pass -j4
to make because it fails to build because it gets ahead of itself at some point ...
The Rust compiler is mostly single-threaded, but has support for parallel codegen, which can be enabled by passing the -Ccodegen-units=N
command (where N
is the number of thread/codegen units you want). You can enable this for the bootstrap by using make RUSTFLAGS="-Ccodegen-units=N"
.
make -j4
should work perfectly fine, can you try again with a fresh master and after make clean
? If it still doesn't work, you can open an issue.
1 Like
Thank you!
I reported it here `make` and `make -j4` have different behavior in compiling · Issue #14461 · rust-lang/rust · GitHub 9 days ago (with an edit of right now)
Should I really open a new issue? (that one is closed, but seems to be related enough given its title)
It fails even before it finishes compiling llvm. I was using make all
but simply make
has the same outcome:
/bin/sh: x86_64-unknown-linux-gnu/stage2/bin/rustdoc: No such file or directory
/home/zazdxscf/build/1nonpkgs/rust/rust/mk/docs.mk:138: recipe for target 'doc/grammar.html' failed
make: *** [doc/grammar.html] Error 127
make: *** Waiting for unfinished jobs....
Unfortunately by adding -Ccodegen-units=4 will core dump.
$ ./configure --prefix=/home/zazdxscf/build/1nonpkgs/rust/usr/local --disable-rpath --enable-manage-submodules --disable-clang --enable-ccache --enable-dist-host-only --disable-valgrind --disable-helgrind --disable-valgrind-rpass --python=/usr/bin/python2 --enable-optimize --enable-optimize-cxx --enable-optimize-llvm --enable-debug --disable-debuginfo --enable-debug-assertions --enable-debuginfo-tests --enable-llvm-assertions --enable-debug-jemalloc --disable-local-rust --release-channel=dev --host=x86_64-unknown-linux-gnu --target=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu
...
$ time make -j1 -- VERBOSE=1 NO_REBUILD=1 TIME_PASSES=1 TIME_LLVM_PASSES=1 'RUSTFLAGS=--verbose -Z verbose -Z print-link-args -Z print-llvm-passes -Z verbose -C debug-assertions=y -Ccodegen-units=4' RUST_BACKTRACE=1
...
cfg: version 1.5.0-dev (9a855668f 2015-10-23)
cfg: build triple x86_64-unknown-linux-gnu
cfg: host triples x86_64-unknown-linux-gnu
cfg: target triples x86_64-unknown-linux-gnu
cfg: enabling debug assertions (CFG_ENABLE_DEBUG_ASSERTIONS)
cfg: host for x86_64-unknown-linux-gnu is x86_64
cfg: os for x86_64-unknown-linux-gnu is unknown-linux-gnu
cfg: good valgrind for x86_64-unknown-linux-gnu is 1
cfg: using CC=ccache gcc (CFG_CC)
cfg: disabling valgrind run-pass tests
touch /home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/llvm/llvm-auto-clean-stamp.start_time
make clean-llvmx86_64-unknown-linux-gnu
make[1]: Entering directory '/home/zazdxscf/build/1nonpkgs/rust/rust'
...
cp x86_64-unknown-linux-gnu/rt/libcompiler-rt.a x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler-rt.a
MATCHES=""; if [ -n "$MATCHES" ] ; then echo "warning: removing previous" \'libcore-*.so\' "libraries:" $MATCHES; rm $MATCHES ; fi
MATCHES=""; if [ -n "$MATCHES" ] ; then echo "warning: removing previous" \'libcore-*.rlib\' "libraries:" $MATCHES; rm $MATCHES ; fi
CFG_LLVM_LINKAGE_FILE=/home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/rt/llvmdeps.rs LD_LIBRARY_PATH=/home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/stage0/lib:$LD_LIBRARY_PATH x86_64-unknown-linux-gnu/stage0/bin/rustc --cfg stage0 --verbose -Z verbose -Z print-link-args -Z print-llvm-passes -Z verbose -C debug-assertions=y -Ccodegen-units=4 -O --cfg rtopt -C debug-assertions=on -Z time-passes -Z time-llvm-passes -C prefer-dynamic -C no-stack-check --target=x86_64-unknown-linux-gnu -W warnings -L "x86_64-unknown-linux-gnu/rt" -L native="/home/zazdxscf/build/1nonpkgs/rust/rust/x86_64-unknown-linux-gnu/llvm/Release+Asserts/lib" --out-dir x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/lib -C extra-filename=-bb943c5a src/libcore/lib.rs
time: 0.229; rss: 44MB parsing
time: 0.077; rss: 45MB configuration 1
time: 0.000; rss: 45MB recursion limit
time: 0.006; rss: 45MB gated macro checking
time: 0.000; rss: 45MB crate injection
time: 0.003; rss: 45MB macro loading
time: 0.000; rss: 45MB plugin loading
time: 0.000; rss: 45MB plugin registration
time: 1.428; rss: 73MB expansion
time: 0.026; rss: 73MB complete gated feature checking 1
time: 0.296; rss: 73MB configuration 2
time: 0.149; rss: 73MB maybe building test harness
time: 0.000; rss: 73MB prelude injection
time: 0.013; rss: 73MB checking that all macro invocations are gone
time: 0.027; rss: 73MB complete gated feature checking 2
time: 0.167; rss: 79MB assigning node ids and indexing ast
time: 0.013; rss: 79MB external crate/lib resolution
time: 0.029; rss: 79MB language item collection
time: 0.260; rss: 97MB resolution
time: 0.024; rss: 94MB lifetime resolution
time: 0.000; rss: 94MB looking for entry point
time: 0.014; rss: 94MB looking for plugin registrar
time: 0.101; rss: 105MB region resolution
time: 0.013; rss: 105MB loop checking
time: 0.013; rss: 105MB static item recursion checking
time: 0.213; rss: 112MB type collecting
time: 0.028; rss: 112MB variance inference
time: 2.148; rss: 123MB coherence checking
time: 16.765; rss: 169MB type checking
time: 1.222; rss: 170MB const checking
time: 0.132; rss: 170MB privacy checking
time: 0.015; rss: 170MB stability index
time: 0.096; rss: 170MB intrinsic checking
time: 0.024; rss: 170MB effect checking
time: 0.349; rss: 170MB match checking
time: 0.056; rss: 170MB liveness checking
time: 2.390; rss: 170MB borrow checking
time: 1.210; rss: 171MB rvalue checking
time: 0.083; rss: 171MB reachability checking
time: 0.091; rss: 172MB death checking
time: 0.077; rss: 172MB stability checking
time: 0.000; rss: 172MB unused lib feature checking
src/libcore/lib.rs:82:12: 82:29 warning: unused or unknown feature, #[warn(unused_features)] on by default
src/libcore/lib.rs:82 #![feature(unwind_attributes)]
^~~~~~~~~~~~~~~~~
src/libcore/ptr.rs:21:11: 21:24 warning: unused import, #[warn(unused_imports)] on by default
src/libcore/ptr.rs:21 use ops::{CoerceUnsized, Deref};
^~~~~~~~~~~~~
src/libcore/ptr.rs:25:52: 25:58 warning: unused import, #[warn(unused_imports)] on by default
src/libcore/ptr.rs:25 use marker::{Copy, PhantomData, Send, Sized, Sync, Unsize};
^~~~~~
src/libcore/panicking.rs:65:9: 65:18 warning: unused attribute, #[warn(unused_attributes)] on by default
src/libcore/panicking.rs:65 #[unwind]
^~~~~~~~~
time: 1.525; rss: 172MB lint checking
time: 0.000; rss: 172MB resolving dependency formats
time: 6.468; rss: 301MB translation
Pass Arguments: -tti -targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -verify -simplifycfg -domtree -sroa -early-cse -lower-expect
Target Transform Information
Target Library Information
No Alias Analysis (always returns 'may' alias)
Type-Based Alias Analysis
Scoped NoAlias Alias AnalysisPass Arguments: -tti -targetlibinfo -no-aa -tbaa -
scoped-noalias -Assumption Cache Tracker
assumption-cache-trackerBasic Alias Analysis (stateless AA impl)Pass Arguments: -tti -targetlibinfo
- FunctionPass Manager
basicaa - Module Verifierno-aa -verify - -simplifycfgtbaa -domtree -scoped-noalias -sroa -assumption-cache-tracker - -early-csebasicaa - -lower-expectverify
-simplifycfgTarget Transform Information
-domtree -Target Library Informationsroa -
early-cse -lower-expect
Target Transform Information
Target Library InformationPass Arguments: -ttiNo Alias Analysis (always returns 'may' alias)
Simplify the CFG
No Alias Analysis (always returns 'may' alias)
Type-Based Alias Analysis
Scoped NoAlias Alias Analysis
Assumption Cache Tracker
Basic Alias Analysis (stateless AA impl)
FunctionPass Manager
Module Verifier
Simplify the CFG
Dominator Tree Construction
SROA
Early CSE
Lower 'expect' Intrinsics
-
Dominator Tree Construction
SROA
Early CSE
Lower 'expect' Intrinsics
targetlibinfo -Type-Based Alias Analysisno-aa -tbaa -
Scoped NoAlias Alias Analysis
Assumption Cache Tracker
Basic Alias Analysis (stateless AA impl)
FunctionPass Manager
Module Verifier
Simplify the CFG
Dominator Tree Construction
SROA
Early CSE
Lower 'expect' Intrinsics
scoped-noalias -assumption-cache-tracker -basicaa -verify -simplifycfg -domtree -sroa -early-cse -lower-expect
Target Transform Information
Target Library Information
No Alias Analysis (always returns 'may' alias)
Type-Based Alias Analysis
Scoped NoAlias Alias Analysis
Assumption Cache Tracker
Basic Alias Analysis (stateless AA impl)
FunctionPass Manager
Module Verifier
Simplify the CFG
Dominator Tree Construction
SROA
Early CSE
Lower 'expect' Intrinsics
rustc: malloc.c:2921: __libc_malloc: Assertion `!victim || ((((mchunkptr)((char*)(victim) - 2*(sizeof(size_t)))))->size & 0x2) || ar_ptr == (((((mchunkptr)((char*)(victim) - 2*(sizeof(size_t)))))->size & 0x4) ? ((heap_info *) ((unsigned long) (((mchunkptr)((char*)(victim) - 2*(sizeof(size_t))))) & ~((2 * (4 * 1024 * 1024 * sizeof(long))) - 1)))->ar_ptr : &main_arena)' failed.
/home/zazdxscf/build/1nonpkgs/rust/rust/mk/target.mk:164: recipe for target 'x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/lib/stamp.core' failed
make: *** [x86_64-unknown-linux-gnu/stage0/lib/rustlib/x86_64-unknown-linux-gnu/lib/stamp.core] Aborted (core dumped)
real 5m4.755s
user 8m9.393s
sys 4m20.027s
Works fine without it...
Why are you passing so many flags to configure? Can you follow the build instructions directly? (ie. just do ./configure
, make -j4
after installing everything needed)
If that doesn't work, I'd open an issue so more people see it.
1 Like
It works.
It fails only when I pass NO_REBUILD=1
to make
! So both -j4
and NO_REBUILD=1
are required to fail like that.