Age | Commit message (Collapse) | Author |
|
* rickard/generic-thr-queue/OTP-9632:
Use generic lock-free queue for async threads
Use generic lock-free queue for misc aux work
Implement generic lock-free queue
|
|
* rickard/alloc-opt/OTP-7775:
Optimize memory allocation
Conflicts:
erts/aclocal.m4
erts/emulator/hipe/hipe_bif_list.m4
erts/preloaded/ebin/erl_prim_loader.beam
erts/preloaded/ebin/erlang.beam
erts/preloaded/ebin/init.beam
erts/preloaded/ebin/otp_ring0.beam
erts/preloaded/ebin/prim_file.beam
erts/preloaded/ebin/prim_inet.beam
erts/preloaded/ebin/prim_zip.beam
erts/preloaded/ebin/zlib.beam
|
|
The implementation of an ERTS internal, generic, many to one, lock-free
queue for communication between threads. The many to one scenario is
very common in ERTS, so it can be used in a lot of places in the future.
Changing to this queue from a lock based queue, however, often requires
some redesigning. This since we have often used the lock of the queue
to protect other information too.
|
|
A number of memory allocation optimizations have been implemented. Most
optimizations reduce contention caused by synchronization between
threads during allocation and deallocation of memory. Most notably:
* Synchronization of memory management in scheduler specific allocator
instances has been rewritten to use lock-free synchronization.
* Synchronization of memory management in scheduler specific
pre-allocators has been rewritten to use lock-free synchronization.
* The 'mseg_alloc' memory segment allocator now use scheduler specific
instances instead of one instance. Apart from reducing contention
this also ensures that memory allocators always create memory
segments on the local NUMA node on a NUMA system.
|
|
* dev:
erl_bif_types: Fix types for lists:key{search,find,member}/3
Fix build problems on MacOS 10.7 (Lion)
|
|
On MacOS 10.7 (Lion) with Xcode 4.1 installed, the default
C compiler is llvm-gcc-4.2. That compiler compiles beam_emu.c
incorrectly, resulting in an emulator that will not start.
The problem can be worked around by turning off all optimizations,
but that will significantly degrade the performance of the run-time
system. The problem can also be worked around manually like this:
CC=gcc-4.2 ./configure
To allow a working system to be built "out of the box", have
the configure script set up the emulator Makefile so that gcc-4.2
will be used to compile beam_emu.c if the default compiler is
llvm-based. All other C files will still be compiled with the
default compiler.
|
|
To avoid issues with parallel make and to slightly speed up the
build process, avoid a recursive make by replacing pcre/Makefile.in
with pcre/pcre.mk and including it from the main emulator Makefile.
|
|
|
|
|
|
|
|
|
|
|
|
Giving the beam_makeops script access to the external word
size (=the size of instruction words) will allow it to pack
more operands into a word for the 64 bits emulator.
|
|
|
|
|
|
* rickard/cpu-groups/OTP-8861:
Generalize reader groups
Move cpu topology functionality into erl_cpu_topology.[ch]
Do not use more reader groups for schedulers than schedulers
Conflicts:
erts/emulator/beam/erl_init.c
|
|
|
|
Make sure that an update to erts/emulator/tools/make_tables will
force all generated files to be re-generated.
|
|
Added erlang:system_info(build_type) which makes it
easier to chose drivers, NIF libraries, etc based
on build type of the runtime system.
|
|
elib_malloc is an alternate memory allocator that
is no longer possible to build.
|
|
* bjorn/remove-obsolete-driver-support/OTP-8758:
Remove obsolete/driver.h and the associated functionality
|
|
The obsolete/driver.h header file has been obsolete
since R8B.
Remove that file, along with obsolete thread APIs for
drivers in the emulator and the test cases.
|
|
Large parts of the ethread library have been rewritten. The
ethread library is an Erlang runtime system internal, portable
thread library used by the runtime system itself.
Most notable improvement is a reader optimized rwlock
implementation which dramatically improve the performance of
read-lock/read-unlock operations on multi processor systems by
avoiding ping-ponging of the rwlock cache lines. The reader
optimized rwlock implementation is used by miscellaneous
rwlocks in the runtime system that are known to be read-locked
frequently, and can be enabled on ETS tables by passing the
`{read_concurrency, true}' option upon table creation. See the
documentation of `ets:new/2' for more information.
The ethread library can now also use the libatomic_ops library
for atomic memory accesses. This makes it possible for the
Erlang runtime system to utilize optimized atomic operations
on more platforms than before. Use the
`--with-libatomic_ops=PATH' configure command line argument
when specifying where the libatomic_ops installation is
located. The libatomic_ops library can be downloaded from:
http://www.hpl.hp.com/research/linux/atomic_ops/
The changed API of the ethread library has also caused
modifications in the Erlang runtime system. Preparations for
the to come "delayed deallocation" feature has also been done
since it depends on the ethread library.
Note: When building for x86, the ethread library will now use
instructions that first appeared on the pentium 4 processor. If
you want the runtime system to be compatible with older
processors (back to 486) you need to pass the
`--enable-ethread-pre-pentium4-compatibility' configure command
line argument when configuring the system.
|
|
The experimental Standalone Erlang (SAE) support based on
Joe Armstrong's work has long been broken. Remove the remaining
code and Makefile rules.
|
|
|
|
|
|
|
|
* gc/hipe_darwin_amd64:
Fix hipe memory allocation problems on darwin/amd64
Porting x86 darwin fixes to amd64 darwin hipe asm/m4 code
Automatically enable hipe for darwin/amd64 builds
Allow configure to enable_hipe for darwin/amd64 builds
OTP-8416 HiPE now works in the 64-bit emulator on Mac OS X. (Thanks to
Geoff Cant.)
|
|
tile-cc 2.0.1.78377 when compiling the runtime system.
|
|
HiPE on amd64 needs to be able to allocate memory in the 0x20000000+
range so that compiled code will be addressable with 32bit pointers
(when sign extended). By default, when building 64bit executables on
OS X, PAGEZERO occupies the first 4GB of virtual memory. The PAGEZERO
segment cannot be mmap(ed) or vm_allocate(d) into.
To avoid this problem we use the -pagezero_size linker flag to reduce
the size of PAGEZERO and free up the 0x20000000+ space.
|
|
checking if CC equaled gcc. That is, the makefiles failed to
detect gcc C compilers with other command line names than gcc.
`configure' now substitute GCC into the makefiles. If CC is a gcc
C compiler, GCC will have the value yes. (Thanks to
Jean-S�bastien P�dron)
|
|
The Apple compiler creates DWARF debugging symbols in a bundle (ie. a
directory) named <name>.dSYM
In order for make clean to work correctly, the rm command needs -r
|
|
|