Age | Commit message (Collapse) | Author |
|
* bjorn/beam-loader/OTP-9030: (43 commits)
c: Reduce memory footprint
erl_posix_msg: Reduce memory footprint
Introduce a few more variations of the move instructions
Combine a move + jump sequence into the move_jump instruction
Optimize and clean-up the exact equality/non-equality instructions
Optimize addition of a small integer to a variable
Introduce a special instruction for select_val with two values
Introduce a few more specialized put_list instructions
Eliminate the "put_list c n Dst" instructions
Eliminate the specific move_sd instruction
Eliminate use of GetArg1() in the badmatch and case_end instructions
Eliminate use of GetArg2() in the i_element instruction
Eliminate use of GetArg1() in the fast_element instruction
Eliminate use of GetArg1() in the jump_on_val* instructions
Eliminate use of GetArg1() in the select_val instruction
beam_emu: Eliminate sloppy use of tmp_arg1 and tmp_arg2
beam_emu: Don't inline helper functions into process_main()
beam_emu: Clean up calling of the error_handler module
Simplify a select_val instruction that selects only one value
Optimize creation of tuples
...
|
|
Introduce a new i_increment/4 to optimize the addition of
a register and a small integer. This instruction saves two
instruction words compared to the standard instructions
(an i_fetch/2 instruction followed by a i_plus/3 instruction)
and will also be slightly faster.
|
|
Instead of having one i_select_val_sfI instruction that uses
the GetArg1() macro to fetch the controlling expression, use
three separate instructions for each of the register types.
That will save one word when selecting on the {x,0} register.
It should also be slightly faster since a conditional branch
is eliminated.
Although it seems that the BEAM compiler will never generate
a constant controlling expression (even with optimizations
turned off), we still make sure that they will work by
evaluating the select_val instruction at load time.
Handle the select_tuple_arity instruction in the same way.
|
|
|
|
|
|
erts_debug:instructions/0 is useful for finding which specific
instructions that are not used at all.
|
|
* bjorn/bs-zero-width-bug/OTP-8997:
Fix type-checking of variable used in zero-width bit syntax construction
|
|
<<A:0>> will always produce an empty binary, regardless of the
type of A. The bug is in the run-time system. Fix it so that a
non-numeric value for A will cause a badarg exception.
Reported-by: Zvi
|
|
|
|
|
|
* rickard/rwmutex-bug/OTP-8925:
Miscellaneous rwmutex bug fixes and improvements
Don't use more reader groups than schedulers
New test suite containing stress tests of the rwmutex implementation
Conflicts:
erts/emulator/beam/erl_init.c
|
|
|
|
* sverker/unsafe_CancelIoEx/OTP-8937:
Let port_SUITE:close_deaf_port wait for OS procs
|
|
|
|
* sverker/unsafe_CancelIoEx/OTP-8937:
Improve test case port_SUITE:close_deaf_port
|
|
|
|
* sverker/unsafe_CancelIoEx/OTP-8937:
Remove use of unreliable CancelIoEx on Windows.
|
|
* sverker/crypto_aes_ctr_cmac/OTP-8752:
Fix nif_SUITE to not assume that it is the only one loading NIFs.
crypto CTR support
|
|
CancelIoEx has been seen to cause problems with some drivers.
Also improve fallback solution to reuse existing handle-closer-threads.
|
|
|
|
* pg/fix-system_info-cpu_topology-segfault:
Fix crash with erlang:system_info({cpu_topology,junk})
OTP-8914
|
|
* rickard/halfword-fix/OTP-8910:
Fix ERL_DRV_INT and ERL_DRV_UINT in halfword emulator
|
|
Id: OTP-8912
This patch creates a new family of flags with the "+z" prefix. It
further creates a new configuration option called "dbbl" (which is the
first letter of the name dist_buf_busy_limit). Example usage of this
flag would be "+zdbbl 1048576".
This patch creates an adjustable buffer limit for the amount of data
that may be buffered by the erlang distribution code (in dist.c
specifically). Before this patch, this hard-coded constant was used:
#define ERTS_DE_BUSY_LIMIT (128*1024)
When large binaries are transmitted between nodes (or simply a lot of
medium-sized binaries), it is very easy to hit the old 128KB limit.
Processes that use the erlang:system_monitor() BIF to monitor system
events can be spammed by {monitor, busy_dist_port, ...} message tuples
at rates of tens to even hundreds of messages/second.
A larger buffer limit will allow processes to buffer more outgoing
messages over the distribution. When the buffer limit has been
reached, sending processes will be suspended until the buffer size has
shrunk. The buffer limit is per distribution channel. A higher limit
will give lower latency and higher throughput at the expense of
higher memory usage.
A variation of this patch has been in commercial production use in at
least two companies that the author is aware of. Larger buffer values
can reduce the number of {monitor, busy_dist_port, ...} system
messages drastically, lower overall messaging latencies, and prevent
false timeouts and 'nodedown' messages in extremely busy Mnesia systems.
Test suite: there are two tests:
a. In erlexec_SUITE.erl to test basic set & get of the value
b. In distribution_SUITE.erl, to verify that setting +zdbbl very
low will actually change behavior.
|
|
|
|
There is a bug in system_info BIF causing a crash if
erts_get_cpu_topology_term fails. The fix comes with a non-regression
test.
|
|
|
|
The make_term_n function in nif_SUITE.c created resources that never
got released, creating valgrind memcheck Definitely Lost warnings.
|
|
|
|
* sverker/NIF-64bit-integers/OTP-8746:
Make windows 64bit types be declared more consistently
Teach Windows about the int64 functions
NIF doc official support note
NIF 64-bit integer support
|
|
* pan/local_univ_time_bsd/OTP-8580:
Teach erl_time_sup to handle timezones w/o DST on FreeBSD as on other platforms
|
|
* pan/list_to_float/OTP-7178:
Teach Unix sys_float.c to ignore underflow in list_to_float and return 0.0
|
|
* 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.
|
|
* rickard/ethread-rewrite/OTP-8544:
Rewrite ethread library
|
|
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.
|
|
|
|
* sverker/full_INTEGER_EXT/OTP-8540:
term_to_binary use all 32 bits of INTEGER_EXT
|
|
* sverker/driver_int64_bug/OTP-8716:
Fix bug that caused faulty 64-bit integers from drivers.
|
|
|
|
* se/http_response_empty_phrase:
{packet,http} allow empty response phrase
|
|
Earlier, external format INTEGER_EXT was only produced for 28-bit
signed integers. Now full 32-bit signed integers are produced as
INTEGER_EXT to avoid the more costly SMALL_BIG_EXT format. Both old
and new code can read 32-bit INTEGER_EXT.
Also fixed integer encoding bugs in erl_interface erl_encode/erl_decode.
(Thanks to Alexander Demidenko for reporting)
|
|
|
|
This change handles erlang:localtime_to_universaltime(...,true) in timezones
without DST in a consistent way over platforms. Specifically BSD did return
an (accurate) -1 from mktime, which blew things up. Now all platforms regard
no DST as a DST with delta zero. Linux, SunOS, MacOS etc already did this,
why the behaviour on BSD was updated to the slightly incorrect one instead
of breaking backward compatibility on most other platforms.
Before this change, erlang:localtime_to_universaltime({{2008, 8, 1},
{0, 0, 0}},true) would return {1969, 12, 31}, {23, 59, 59}} when
TZ=UTC on FreeBSD, now it mimics the behaviour of other systems and returns
{{2008, 8, 1},{0, 0, 0}}.
The problem was originally reported by Paul Guyot on erlang-bugs mailing list:
http://www.erlang.org/pipermail/erlang-bugs/2008-November/001077.html
This correction replaces earlier BSD specific open source patches for this
problem.
|
|
OTP-7178
|
|
Packet type 'http' for erlang:deocode:packet and gen_tcp allow a
response line with an empty phrase string, like
"HTTP/1.1 200\r\n".
Earlier, an empty phrase was only accepted if the status code
was followed by space or tab, like
"HTTP/1.1 200 \r\n".
|
|
The erlang:open_port spawn and spawn_executable directives can include
an {env, Env} directive to set up environment variables for the
spawned process. Variables can be unset with {"NameOfVariable",false}.
A bug in ert/emulator/sys/unix/sys.c could cause unset variables
to not be unset. This would typically happen if there where more
variables to be unset than there where already set variables in the
destination evironment.
Fix this problem for unix and add a new regression test for it to
the port test suite. Windows does not seem to have the same problem.
|
|
* bg/bif-types:
Add type information for erlang:garbage_collect_message_area/0
Add type information for erts_debug:* BIFs
Add type information for erlang:port_call/2
Add type information for erlang:display* BIFs
Add type information for the BIFs in the binary module
Introduce and use the t_endian() helper
Add type information for erlang:binary_part/2,3
Add type info for erlang:append/2 and erlang:subtract/2
Add type information for the erlang:adler32* BIFs
Add ppc64 return for erlang:system_info(hipe_architecture)
Test that all BIFs have known types
erl_types: Export is_erl_type/1
|
|
Add a test that will verify that BIFs have type information in
hiper/cerl/erl_bif_types.erl.
|
|
erlang:decode_packet/3) to work with 8 bits characters
|
|
* egil/call-time-trace-patterns:
Fix ops.tab to include i_return_time_trace
Let trace_call_time_SUITE scheduling test be more relaxed
Add documentation for call time breakpoints
Fix bp_hash_put to do hash value after rehash
Extend trace_call_time_SUITE with bif-tests
Fix assertion in trace_pattern for bifs
Teach erlang:system_info/1 to list snifs
Add bif tests to call time trace tests
Teach call time trace patterns to include bifs
Fix BeamInstr code array in export.h
Add trace call_time tests for nifs and bifs
Teach call count tracing to use atomics
Add first phase of trace call time test suite
Add a scheduler array for BpData at BeamInstr[-4]
Add search keys in breakpoints and a searchfunction
Fix BeamInstr for call_time
Teach call_time trace to use intruction pointers
Add return_time trace and PSD deletions
Remove trailing character in beam_bif_load
Fix set_function_break to use correct breakpoint
...
OTP-8677 egil/call-time-trace-patterns
|