aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/src/code.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2011-11-17 20:25:48 +0100
committerBjörn Gustavsson <[email protected]>2011-11-23 10:40:33 +0100
commitad2962278f347a5d0341c0d5d11cbb71c83eb35b (patch)
tree13a15497b3f109a395fbabd7aa81ceb287b10c23 /lib/kernel/src/code.erl
parentb3a8ad925c72bc77d3509ef8dce155d65dc1548b (diff)
downloadotp-ad2962278f347a5d0341c0d5d11cbb71c83eb35b.tar.gz
otp-ad2962278f347a5d0341c0d5d11cbb71c83eb35b.tar.bz2
otp-ad2962278f347a5d0341c0d5d11cbb71c83eb35b.zip
Avoid slow code loading of BEAM code in a hipe-enabled emulator
On my Linux computer, building the entire Erlang/OTP system with hipe disabled took about 8 minutes. With hipe enabled, but without any native code, the build took about 23 minutes, i.e. more than 3 times slower. (The computer has 4 cores, and I used 'make -j6'.) On my eight-core Mac (running 'make -j10') there was only a slight slowdown when hipe was enabled. The culprit is hipe_unified_loader:post_beam_load/1, which will be called every time a module is loaded (even if the module contains no native code). If post_beam_load/1 is called in a hipe-enabled emulator, it will block multi-scheduling, even if no work needs to be done. Apparently the cost for blocking multi-scheduling can vary greatly, depending on the operating system and system load. As a quick and conservative fix, don't call post_beam_load/1 unless some native code has been previously loaded.
Diffstat (limited to 'lib/kernel/src/code.erl')
0 files changed, 0 insertions, 0 deletions