aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
AgeCommit message (Collapse)Author
2017-10-02Merge branch 'maint'Rickard Green
* maint: Don't allow null in filenames
2017-10-02Merge branch 'lukas/erts/poll-thread/OTP-14346'Lukas Larsson
* lukas/erts/poll-thread/OTP-14346: (25 commits) erts: Trigger ready events when erts_io_control fails erts: enif_select steal test kernel: Rewrite gen_udp_SUITE:read_packet tc erts: disable kernel-poll on OS X vsn < 16 erts: Fix msacc testcase with new poll-thread erts: Add testcases to test IOp and IOt options erts: get_internal_state(check_io_debug) now prints to error_logger erts: Remove eager check io erts: Move all I/O polling to a seperate thread erts: Fix smp_select testcase to use ERL_DRV_USE erts: Fix msacc unmanaged state counter erts: Optimize port_task quick allocator erts: Add ERTS_THR_PREF_QUICK_ALLOC_IMPL erts: Update suspend of scheduler to handle multiple pollsets erts: Add multiple poll sets erts: Some code cleanup for gdb to work better erts: temp_alloc can no longer be disabled erts: Refactor check_io to use one static struct erts: Replace check_io spinlock with lock-less list insertion erts: Add number of enif_select's to check_io_debug ...
2017-10-02erts: Trigger ready events when erts_io_control failsLukas Larsson
2017-10-02erts: enif_select steal testDmytro Lytovchenko
2017-10-02erts: disable kernel-poll on OS X vsn < 16Lukas Larsson
kqueue is broken on earlier versions of OS X.
2017-10-02erts: Fix msacc testcase with new poll-threadLukas Larsson
2017-10-02erts: Add testcases to test IOp and IOt optionsLukas Larsson
2017-10-02erts: get_internal_state(check_io_debug) now prints to error_loggerLukas Larsson
2017-10-02erts: Remove eager check ioLukas Larsson
It is not longer relevant when using the poll thread
2017-10-02erts: Move all I/O polling to a seperate threadLukas Larsson
2017-10-02erts: Fix smp_select testcase to use ERL_DRV_USELukas Larsson
This is needed with the new poll-thread implementation as now closed fd's in the pollset will be triggered much faster than before.
2017-10-02erts: Fix msacc unmanaged state counterLukas Larsson
OTP-14652
2017-10-02erts: Optimize port_task quick allocatorSverker Eriksson
for non scheduler threads by using ERTS_THR_PREF_QUICK_ALLOC_IMPL.
2017-10-02erts: Add ERTS_THR_PREF_QUICK_ALLOC_IMPLSverker Eriksson
usable from any (managed?) thread.
2017-10-02erts: Update suspend of scheduler to handle multiple pollsetsRickard Green
2017-10-02erts: Add multiple poll setsSverker Eriksson
2017-10-02erts: Some code cleanup for gdb to work betterLukas Larsson
2017-10-02erts: temp_alloc can no longer be disabledLukas Larsson
temp_alloc is used in such a way that if it ever results in a malloc/free sequence it will slow down the system alot. So it will no longer be possible to disable it and it will not be disabled when using +Mea min. OTP-14651
2017-09-28Eliminate MY_IS_SSMALL()Björn Gustavsson
For a long time, there has been the two macros IS_SSMALL() and MY_IS_SSMALL() that do exactly the same thing. There should only be one, and it should be called IS_SSMALL(). However, we must decide which implementation to use. When MY_IS_SSMALL() was introduced a long time ago, it was the most efficient. In a modern C compiler, there might not be any difference. To find out, I used the following small C program to examine the code generation: #include <stdio.h> typedef unsigned int Uint32; typedef unsigned long Uint64; typedef long Sint; #define SWORD_CONSTANT(Const) Const##L #define SMALL_BITS (64-4) #define MAX_SMALL ((SWORD_CONSTANT(1) << (SMALL_BITS-1))-1) #define MIN_SMALL (-(SWORD_CONSTANT(1) << (SMALL_BITS-1))) #define MY_IS_SSMALL32(x) (((Uint32) ((((x)) >> (SMALL_BITS-1)) + 1)) < 2) #define MY_IS_SSMALL64(x) (((Uint64) ((((x)) >> (SMALL_BITS-1)) + 1)) < 2) #define MY_IS_SSMALL(x) (sizeof(x) == sizeof(Uint32) ? MY_IS_SSMALL32(x) : MY_IS_SSMALL64(x)) #define IS_SSMALL(x) (((x) >= MIN_SMALL) && ((x) <= MAX_SMALL)) void original(Sint n) { if (IS_SSMALL(n)) { printf("yes\n"); } } void enhanced(Sint n) { if (MY_IS_SSMALL(n)) { printf("yes\n"); } } gcc 7.2 produced the following code for the original() function: .LC0: .string "yes" original(long): movabs rax, 576460752303423488 add rdi, rax movabs rax, 1152921504606846975 cmp rdi, rax jbe .L4 rep ret .L4: mov edi, OFFSET FLAT:.LC0 jmp puts clang 5.0.0 produced the following code which is slightly better: original(long): movabs rax, 576460752303423488 add rax, rdi shr rax, 60 jne .LBB0_1 mov edi, .Lstr jmp puts # TAILCALL .LBB0_1: ret .Lstr: .asciz "yes" However, in the context of beam_emu.c, clang could produce similar to what gcc produced. gcc 7.2 produced the following code when MY_IS_SSMALL() was used: .LC0: .string "yes" enhanced(long): sar rdi, 59 add rdi, 1 cmp rdi, 1 jbe .L4 rep ret .L4: mov edi, OFFSET FLAT:.LC0 jmp puts clang produced similar code. This code seems to be the cheapest. There are four instructions, and there is no loading of huge integer constants.
2017-09-27Don't allow null in filenamesRickard Green
2017-09-27Merge branch 'lukas/erts/fix_threads_error_printout'Lukas Larsson
* lukas/erts/fix_threads_error_printout: erts: Print the error reason when threads fail to start
2017-09-27Merge branch 'kvakvs/zero-size-read_file/ERL-327/PR-1524/OTP-14637'Lukas Larsson
* kvakvs/zero-size-read_file/ERL-327/PR-1524/OTP-14637: erts: On zero-size files attempt to read until EOF
2017-09-27erts: On zero-size files attempt to read until EOFDmytro Lytovchenko
2017-09-25Merge pull request #1572 from gregors/update_docsRickard Green
fix off by one error in docs
2017-09-25Merge branch 'bjorn/speed-up-disassembler'Björn Gustavsson
* bjorn/speed-up-disassembler: Add testing of erts_debug:df() to the emulator smoke tests Speed up erts_debug:df()
2017-09-22Merge branch 'maint'John Högberg
2017-09-22Correctly append sub-binaries in iolist_to_iovecJohn Högberg
The byte_offset of sub-binaries wasn't taken into account for ProcBins, subtly ruining the results. The test suite didn't catch it since it didn't check for sub-binaries in particular, and only checked for equality between variations -- not whether the output was equal to the input.
2017-09-22Add testing of erts_debug:df() to the emulator smoke testsBjörn Gustavsson
It is too easy to break the disassembler. Make sure that we notice.
2017-09-21erts: Print the error reason when threads fail to startLukas Larsson
2017-09-18fix off by one error in docsGregory Ostermayr
2017-09-15Merge branch 'maint'Sverker Eriksson
2017-09-15Merge branch 'sverker/on_load-on_load-bug/OTP-14612' into maintSverker Eriksson
* sverker/on_load-on_load-bug/OTP-14612: erts: Fix 'on_load' tracing bug for modules with -on_load code_SUITE:on_load_trace_on_load
2017-09-15Merge branch 'bjorn/erts/pack-combined'Björn Gustavsson
* bjorn/erts/pack-combined: Pack combined instructions beam_makeops: Refactor code generation Correct disassembly of select instructions
2017-09-15erts: Refactor check_io to use one static structSverker Eriksson
that is shared between _kp and _nkp versions. Makes it easier to access in debugger.
2017-09-15erts: Replace check_io spinlock with lock-less list insertionSverker Eriksson
2017-09-15erts: Add number of enif_select's to check_io_debugSverker Eriksson
2017-09-15erts: Remove undocumented driver_eventSverker Eriksson
2017-09-15erts: Refactor move check_io interface from sys to check_ioSverker Eriksson
# Conflicts: # erts/emulator/beam/erl_process.c # erts/emulator/beam/sys.h # erts/emulator/sys/common/erl_check_io.c # erts/emulator/sys/common/erl_check_io.h # erts/emulator/sys/unix/sys.c
2017-09-15erts: Rename ErtsPollSet_ structS to not confuse gdbSverker Eriksson
by having different structs with same name.
2017-09-15erts: Increase number of check_io-fd-locksSverker Eriksson
and use correct cache alignment.
2017-09-15Merge branch 'lukas/erts/remove-dirty-scheduler-defines/OTP-14613'Lukas Larsson
* lukas/erts/remove-dirty-scheduler-defines/OTP-14613: erts: Remove possibility to disable dirty schedulers
2017-09-14Pack combined instructionsBjörn Gustavsson
2017-09-14beam_makeops: Refactor code generationBjörn Gustavsson
The refactoring will simplify packing of combined instructions.
2017-09-14Correct disassembly of select instructionsBjörn Gustavsson
Make sure to use the 'unpacked[-1]' when accessing the unpacked arguments.
2017-09-14Merge branch 'bjorn/erts/relative-jumps'Björn Gustavsson
* bjorn/erts/relative-jumps: Pack failure labels in i_select_val2 and i_select_tuple_arity2 Optimize i_select_tuple_arity2 and is_select_lins Rewrite select_val_bins so that its labels can be packed Pack sequences of trailing 'f' operands Implement packing of 'f' and 'j' Make sure that mask literals are 64 bits Use relative failure labels Add information about offset to common group start position Remove JUMP_OFFSET Refactor instructions to support relative jumps Introduce a new trace_jump/1 instruction for tracing Avoid using $Src more than once
2017-09-14Pack failure labels in i_select_val2 and i_select_tuple_arity2Björn Gustavsson
2017-09-14Optimize i_select_tuple_arity2 and is_select_linsBjörn Gustavsson
Don't save a pointer to the default failure label. That could relieve register pressure. Instead, if we'll need to signal an error in i_select_tuple_arity2, delay to the execution phase. That should be a clear win because i_select_tuple_arity2 very rarely fails because of the term being selected is not a tuple.
2017-09-14Rewrite select_val_bins so that its labels can be packedBjörn Gustavsson
2017-09-14Pack sequences of trailing 'f' operandsBjörn Gustavsson
Pack sequences of trailing 'f' operands for instructions such at jump_on_val or i_select_val_lins.
2017-09-14Implement packing of 'f' and 'j'Björn Gustavsson