aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam
AgeCommit message (Collapse)Author
2010-08-10Rewrite ethread libraryRickard Green
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.
2010-06-14OTP-8710 Fix emulator crash caused by setting CPU topologyRickard Green
A user defined CPU topology set via a call to <seealso marker="erlang#system_flag_cpu_topology">erlang:system_flag(cpu_topology, CPUTopology)</seealso> was not properly verified, and could in worst case cause an emulator crash. The emulator crash could only occur when a user defined CPU topology already existed and was redefined.
2010-06-08Merge branch 'bg/nif_error' into devErlang/OTP
* commit 'bg/nif_error': crypto: Add type specs for all documented functions crypto: Use erlang:nif_error/1 to squelch false Dialyzer warnings Add erlang:nif_error/1,2
2010-06-08Merge branch 'pg/fix_erts_bld_string_n' into devErlang/OTP
* pg/fix_erts_bld_string_n: Fix erts_bld_string_n (called by enif_make_string and erlang:decode_packet/3) to work with 8 bits characters OTP-8685 pg/fix_erts_bld_string_n Fix bug causing erlang:decode_packet and enif_make_string to generate faulty strings with negative character values for ascii values larger than 127. (Thanks to Paul Guyot)
2010-06-07Fix erts_bld_string_n (called by enif_make_string and ↵Paul Guyot
erlang:decode_packet/3) to work with 8 bits characters
2010-06-07Merge OTP-8681Björn-Egil Dahlberg
2010-06-03Fix ops.tab to include i_return_time_traceBjörn-Egil Dahlberg
Without the instruction defined in ops the interpreter will not compile when using NO_JUMPTABLE.
2010-06-03Fix bp_hash_put to do hash value after rehashBjörn-Egil Dahlberg
If a rehash was done the old hash value was used. This was incorrect.
2010-06-03Fix assertion in trace_pattern for bifsBjörn-Egil Dahlberg
2010-06-03Teach erlang:system_info/1 to list snifsBjörn-Egil Dahlberg
erlang:system_info(snifs) lists all static native implemented functions. The function presents the lists with three tuple values containing MFAs [{Module, Function, Arity}, ...].
2010-06-03Teach call time trace patterns to include bifsBjörn-Egil Dahlberg
2010-06-03Fix BeamInstr code array in export.hBjörn-Egil Dahlberg
2010-06-03Teach call count tracing to use atomicsBjörn-Egil Dahlberg
Call count previously used a global lock for accessing and writing its counter in the breakpoint. This is now changed to atomics instead. The change will let call count tracing and cprof to scale better when increasing the number of schedulers.
2010-06-03Add a scheduler array for BpData at BeamInstr[-4]Björn-Egil Dahlberg
To solve the issue of multiple schedulers constantly updating the head pointer to the bp data wheel, each scheduler now has its own entrypoint to the wheel. This head pointer can be updated without a locking being taken. Previously there were no lock ...
2010-06-03Add search keys in breakpoints and a searchfunctionBjörn-Egil Dahlberg
2010-06-03Fix BeamInstr for call_timeBjörn-Egil Dahlberg
2010-06-03Teach call_time trace to use intruction pointersBjörn-Egil Dahlberg
call_time trace will use instruction pointers instead of breakpoint data pointers. More costly lookup but the bdt structure might be deallocated, we do not want that. Remove unnecessary pattern lock.
2010-06-03Add return_time trace and PSD deletionsBjörn-Egil Dahlberg
2010-06-03Remove trailing character in beam_bif_loadBjörn-Egil Dahlberg
2010-06-03Fix set_function_break to use correct breakpointBjörn-Egil Dahlberg
op_i_time_breakpoint is now used
2010-06-03Add processes hashes for call time breakpointsBjörn-Egil Dahlberg
Call time breakpoint tracing traces per call trace per process. - Add hashes to support the extra dimension. - Teach trace_info/2 to handle the extra information dimension.
2010-06-03Fix lock-checking for PSD call_time breakpointsBjörn-Egil Dahlberg
2010-06-03Call time breakpoint tracing frameworkBjörn-Egil Dahlberg
Initial commit with a new breakpoint instruction and PSD areas for temporary time storage during tracing.
2010-06-03OTP-8675 Fix erroneous return value from erlang:system_info(multi_scheduling)Rickard Green
erlang:system_info(multi_scheduling) sometimes erroneously returned enabled when it should have returned blocked.
2010-06-03OTP-8673 Adjust alignment of scheduler data and run queuesRickard Green
Alignment of scheduler data and run queues were adjusted.
2010-06-03OTP-8666 Enable automatic binding of schedulers when possibleRickard Green
The runtime system will by default bind schedulers to logical processors using the default_bind bind type if the amount of schedulers are at least equal to the amount of logical processors configured, binding of schedulers is supported, and a CPU topology is available at startup. NOTE: If the Erlang runtime system is the only operating system process that binds threads to logical processors, this improves the performance of the runtime system. However, if other operating system processes (as for example another Erlang runtime system) also bind threads to logical processors, there might be a performance penalty instead. If this is the case you, are are advised to unbind the schedulers using the <seealso marker="erl#+sbt">+sbtu</seealso> command line argument, or by invoking <seealso marker="erlang#system_flag_scheduler_bind_type">erlang:system_flag(schedule r_bind_type, unbound)</seealso>.
2010-06-03OTP-8555 Send message from NIFSverker Eriksson
New NIF features: Send messages from a NIF, or from thread created by NIF, to any local process (enif_send) Store terms between NIF calls (enif_alloc_env, enif_make_copy) Create binary terms with user defined memory management (enif_make_resource_binary)
2010-06-03Merge branch 'pan/unregister_error' into devErlang/OTP
* pan/unregister_error: Add possibly missing process lock before unregistering oneself Keep process lock over trace of unregister OTP-8663 Unregister may crash VM Extreme combinations of register/unregister in a highly parallell SMP application could crash the VM. The error is corrected.
2010-06-01OTP-8612 Fix potential premature destruction of port locksRickard Green
Port locks could be prematurely destroyed.
2010-06-01OTP-8658 Add missing memory barriers in erts_poll()Rickard Green
Missing memory barriers in erts_poll() could cause the runtime system to hang indefinitely.
2010-06-01Remove unsupported erlang:blocking_read_file/1Björn Gustavsson
This BIF was only used by the now broken SAE support.
2010-06-01Remove stray SAE supportBjörn Gustavsson
The experimental Standalone Erlang (SAE) support based on Joe Armstrong's work has long been broken. Remove the remaining code and Makefile rules.
2010-06-01Add possibly missing process lock before unregistering oneselfPatrik Nyblom
2010-06-01Keep process lock over trace of unregisterPatrik Nyblom
2010-05-31Add erlang:nif_error/1,2Björn Gustavsson
A stub function that is supposed to be replaced by a NIF usually calls erlang:error/1 to cause an exception if the NIF library is not loaded. For example: foo() -> erlang:error(nif_not_loaded). The problem is that although erlang:error/1 will normally never be called, Dialyzer will think that any call to the function will fail and thus generate false warnings. Adding a spec for the function will not help because Dialyzer will not believe the spec. Add erlang:nif_error/1,2 that work exactly like erlang:error/1,2. Define the return types for both BIFs to be t_any(). erlang:nif_error is used like this: -spec foo() -> binary(). foo() -> erlang:nif_error(nif_not_loaded). (The -spec is optional but highly recommended, since Dialyzer otherwise has no chance to figure out the types.)
2010-05-27Merge branch 'ta/extend-nif-api' into devErlang/OTP
* ta/extend-nif-api: erl_nif: add make_atom_len, make_existing_atom_len and make_string_len erl_nif: add enif_get_atom_length and enif_get_list_length erl_nif: add enif_is_list and enif_is_tuple OTP-8640 ta/extend-nif-api New NIF API functions: enif_make_atom_len, enif_make_existing_atom_len, enif_make_string_len, enif_get_atom_length, enif_get_list_length, enif_is_list, enif_is_tuple (by Tuncer Ayaz)
2010-05-24Merge branch 'fm/file-operations' into devErlang/OTP
* fm/file-operations: Update preloaded modules Add file:advise/4 - a wrapper to the POSIX syscall posix_fadvise Add file:datasync/1 for syncing file contents only sys.h: Correct the get_int64() macro OTP-8637 fm/file-operations The functions file:advise/4 and file:datasync/1 have been added. (Thanks to Filipe David Manana.)
2010-05-24erl_nif: add make_atom_len, make_existing_atom_len and make_string_lenTuncer Ayaz
Add new NIF API functions - enif_make_atom_len - enif_make_existing_atom_len - enif_make_string_len These are basically the same as enif_make_atom, enif_make_existing_atom and enif_make_string except that the new functions require a length parameter instead of a null-terminated C-string. Signed-off-by: Tuncer Ayaz <[email protected]>
2010-05-24erl_nif: add enif_get_atom_length and enif_get_list_lengthTuncer Ayaz
Add new NIF API functions - enif_get_atom_length - enif_get_list_length Signed-off-by: Tuncer Ayaz <[email protected]>
2010-05-24erl_nif: add enif_is_list and enif_is_tupleTuncer Ayaz
Add new NIF API functions - enif_is_list - enif_is_tuple Signed-off-by: Tuncer Ayaz <[email protected]>
2010-05-21Merge branch 'bg/compiler-cover-and-clean' into devErlang/OTP
* bg/compiler-cover-and-clean: v3_life: Remove clause that cannot match in match_fail/3 v3_life tests: Cover exception handling code in v3_life:function/1 beam_type: Remove redundant clause v3_core tests: Cover make_bool_switch_guard/5 v3_core tests: Cover handling of pattern aliases v3_core: Remove a clause in is_simple/1 that cannot match v3_core: Remove unused support for generating compilation errors Remove stray support for the put_literal/2 instruction Remove stray support for the bs_bits_to_bytes2/2 instruction Remove the bs_bits_to_bytes/3 instruction Cover handling of 'math' BIFs beam_bool: Remove a clause in live_regs/1 that cannot match beam_bool: Cover handling of bs_context_to_binary in initialized_regs/2 beam_bool: Remove a clause in initialized_regs/2 that cannot match beam_block: Remove a clause that will never be executed erts: Stop supporting non-literal empty tuples compile: Remove code that is only executed on Solaris Do not cover-analyze core_scan core_SUITE_data: Don't ignore *.core files in this directory OTP-8636 bg/compiler-cover-and-clean
2010-05-21Correct typos in EEP-0031 implementationTuncer Ayaz
Signed-off-by: Tuncer Ayaz <[email protected]>
2010-05-20sys.h: Correct the get_int64() macroBjörn Gustavsson
The get_int64() macro has never been used (it was probably added for completeness at the same time that put_int64() was added), but it was not actually used and therefore it does not actually work.
2010-05-20Remove stray support for the put_literal/2 instructionBjörn Gustavsson
put_literal/2 was an experimental instruction added in R11 to support literals, but before the R12 release support for literals was implemented for all instruction, making the put_literal/2 instruction redundant. Although the beam_disasm module supports dissambley of instructions in older releases, there is no reason to have it support experimental instructions.
2010-05-20Remove the bs_bits_to_bytes/3 instructionBjörn Gustavsson
The last compiler to generate code that uses the bs_bits_to_bytes/3 instruction was the R11 compiler. Since we don't support loading R11 *.beam files in R14, removing the remaining support for the instruction.
2010-05-20erts: Stop supporting non-literal empty tuplesBjörn Gustavsson
Since R12B, empty tuples are literals. Thus the compiler will no longer generate the instruction: put_tuple 0 Destination for creating an empty tuple. It is now time to stop supporting that instruction in the run-time system. While we are at it, correct a typo.
2010-05-20Merge branch 'pan/otp_8217_binary' into devErlang/OTP
* pan/otp_8217_binary: Add documentation for binary module Add more tests and make some go easier on small systems Correct Boyer More and trapping for longest_common_suffix Add longer timetrap to testcases and add binary to app file Add guard BIFs binary_part/2,3 Add binary:{encode,decode}_unsigned({1,2} Add referenced_byte_size/1 Add binary:list_to_bin/1 and binary:copy/1,2 Add bin_to_list/{1,2,3} Add binary:longest_common_prefix/longest_common_suffix Add binary:part to erl_bif_binary.c Move binary module bif's to erl_bif_binary.c Count reductions for process even when not trapping Add random compare testcase Teach BIF's binary:match/matches interrupting/restarting Teach binary.c the semantics to take longest instead of shortest match Initial commit of the binary EEP OTP-8217 Implement EEP31 The module binary from EEP31 (and EEP9) is implemented.
2010-05-17Add documentation for binary modulePatrik Nyblom
Correct behaviour of copy/2 witn 0 copies.
2010-05-17Add more tests and make some go easier on small systemsPatrik Nyblom
Even more tests added to cover more error cases, some tests made easier on systems with small memories and timeouts made longer due to timetraps on solaris daily builds.
2010-05-17Correct Boyer More and trapping for longest_common_suffixPatrik Nyblom
Add testcases and clean up to get better code coverage.