aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_hl_timer.c
AgeCommit message (Collapse)Author
2019-02-05erts: Refactor rbt _yielding to use reductionsLukas Larsson
All of the Red-Black Tree _yielding functions have been updated to work with reductions returned by the called function instead of yielding on each element.
2019-02-01fix: erts: Remove dead ERTS_MAGIC_REF_BIF_TIMERS codeLukas Larsson
2019-02-01erts: Remove dead ERTS_MAGIC_REF_BIF_TIMERS codeLukas Larsson
Using magic refs for big timers caused too large a stress on the off_heap GC implementation to be viable, so it was never enable. The code is now broken because of other changes to we might as well remove it.
2018-12-03erts: Optimize driver_set_timer(0) to fire at onceLukas Larsson
By optimizing driver_set_timer for 0 we can use it instead of select to do a yield in the driver. Use full for delay_send in the inet driver. OTP-15472
2018-03-21Implementation of true asynchronous signaling between processesRickard Green
Communication between Erlang processes has conceptually always been performed through asynchronous signaling. The runtime system implementation has however previously preformed most operation synchronously. In a system with only one true thread of execution, this is not problematic (often the opposite). In a system with multiple threads of execution (as current runtime system implementation with SMP support) it becomes problematic. This since it often involves locking of structures when updating them which in turn cause resource contention. Utilizing true asynchronous communication often avoids these resource contention issues. The case that triggered this change was contention on the link lock due to frequent updates of the monitor trees during communication with a frequently used server. The signal order delivery guarantees of the language makes it hard to change the implementation of only some signals to use true asynchronous signaling. Therefore the implementations of (almost) all signals have been changed. Currently the following signals have been implemented as true asynchronous signals: - Message signals - Exit signals - Monitor signals - Demonitor signals - Monitor triggered signals (DOWN, CHANGE, etc) - Link signals - Unlink signals - Group leader signals All of the above already defined as asynchronous signals in the language. The implementation of messages signals was quite asynchronous to begin with, but had quite strict delivery constraints due to the ordering guarantees of signals between a pair of processes. The previously used message queue partitioned into two halves has been replaced by a more general signal queue partitioned into three parts that service all kinds of signals. More details regarding the signal queue can be found in comments in the erl_proc_sig_queue.h file. The monitor and link implementations have also been completely replaced in order to fit the new asynchronous signaling implementation as good as possible. More details regarding the new monitor and link implementations can be found in the erl_monitor_link.h file.
2017-08-24Merge branch 'maint'Rickard Green
* maint: Fix BIF timer race between timeout and auto cleanup Conflicts: erts/emulator/beam/erl_hl_timer.c
2017-08-24Merge branch 'rickard/btm-auto-cleanup-bug/OTP-14554' into maintRickard Green
* rickard/btm-auto-cleanup-bug/OTP-14554: Fix BIF timer race between timeout and auto cleanup
2017-08-24Merge branch 'maint'Rickard Green
* maint: Fix scheduler id field in timers Conflicts: erts/emulator/beam/erl_hl_timer.c
2017-08-24Merge branch 'rickard/timer-sid-bug/OTP-14548' into maintRickard Green
* rickard/timer-sid-bug/OTP-14548: Fix scheduler id field in timers Conflicts: erts/emulator/beam/erl_hl_timer.c
2017-08-23Fix BIF timer race between timeout and auto cleanupRickard Green
2017-08-23Fix scheduler id field in timersRickard Green
2017-07-17erts: Replace usage of all erts_smp prefixes to just ertsLukas Larsson
2017-07-17erts: Cleanup removal of non-smp emulatorsLukas Larsson
2017-07-17erts: Remove ERTS_SMP and USE_THREAD definesLukas Larsson
This refactor was done using the unifdef tool like this: for file in $(find erts/ -name *.[ch]); do unifdef -t -f defile -o $file $file; done where defile contained: #define ERTS_SMP 1 #define USE_THREADS 1 #define DDLL_SMP 1 #define ERTS_HAVE_SMP_EMU 1 #define SMP 1 #define ERL_BITS_REENTRANT 1 #define ERTS_USE_ASYNC_READY_Q 1 #define FDBLOCK 1 #undef ERTS_POLL_NEED_ASYNC_INTERRUPT_SUPPORT #define ERTS_POLL_ASYNC_INTERRUPT_SUPPORT 0 #define ERTS_POLL_USE_WAKEUP_PIPE 1 #define ERTS_POLL_USE_UPDATE_REQUESTS_QUEUE 1 #undef ERTS_HAVE_PLAIN_EMU #undef ERTS_SIGNAL_STATE
2017-05-04Update copyright yearRaimo Niskanen
2017-04-18Remove unnecessary cancel callback from timer-wheel timersRickard Green
2017-04-18Rearrange timer struct fields in order to simplifyRickard Green
2017-04-18Use timer wheel for short BIF timersRickard Green
2017-04-18Use magic refs for BIF timersRickard Green
2017-04-18Remove accessor BIF timer implementationRickard Green
2017-02-06Implement magic referencesRickard Green
Magic references are *intentionally* indistinguishable from ordinary references for the Erlang software. Magic references do not change the language, and are intended as a pure runtime internal optimization. An ordinary reference is typically used as a key in some table. A magic reference has a direct pointer to a reference counted magic binary. This makes it possible to implement various things without having to do lookups in a table, but instead access the data directly. Besides very fast lookups this can also improve scalability by removing a potentially contended table. A couple of examples of planned future usage of magic references are ETS table identifiers, and BIF timer identifiers. Besides future optimizations using magic references it should also be possible to replace the exposed magic binary cludge with magic references. That is, magic binaries that are exposed as empty binaries to the Erlang software.
2017-01-11Merge branch 'rickard/crashdump-timer-fix' into maintRickard Green
OTP-14133 * rickard/crashdump-timer-fix: Fix printout of timer data in crash dump
2016-12-28Fix crash due to GC of node entry on dirty schedulerRickard Green
The dirty scheduler failed to set a timer. Dispatch this job to an ordinary scheduler.
2016-12-19Fix printout of timer data in crash dumpRickard Green
2016-11-17erts: Refactor crash dumping with cbprintfSverker Eriksson
Instead of passing around a file descriptor use a function pointer to facilitate more advanced backend write logic such as size limitation or compression.
2016-08-11Merge branch 'rickard/proc-tmo-bug/OTP-13798' into maint-19Erlang/OTP
* rickard/proc-tmo-bug/OTP-13798: Fix race causing lost wakeup on receive-after timeout
2016-08-11Fix race causing lost wakeup on receive-after timeoutRickard Green
2016-05-11Add better support for communication with a process executing dirty NIFRickard Green
- Termination of a process... - Modify trace flags of process... - Process info on process... - Register/unregister of name on process... - Set group leader on process... ... while it is executing a dirty NIF.
2016-05-04erts: Add Sender in 'receive' trace matchspecSverker Eriksson
All 'EXIT' and monitor messages are sent from 'system' Timeouts are "sent" from 'clock_service'
2016-04-15erts: Implement tracer modulesLukas Larsson
Add the possibility to use modules as trace data receivers. The functions in the module have to be nifs as otherwise complex trace probes will be very hard to handle (complex means trace probes for ports for example). This commit changes the way that the ptab->tracer field works from always being an immediate, to now be NIL if no tracer is present or else be the tuple {TracerModule, TracerState} where TracerModule is an atom that is later used to lookup the appropriate tracer callbacks to call and TracerState is just passed to the tracer callback. The default process and port tracers have been rewritten to use the new API. This commit also changes the order which trace messages are delivered to the potential tracer process. Any enif_send done in a tracer module may be delayed indefinitely because of lock order issues. If a message is delayed any other trace message send from that process is also delayed so that order is preserved for each traced entity. This means that for some trace events (i.e. send/receive) the events may come in an unintuitive order (receive before send) to the trace receiver. Timestamps are taken when the trace message is generated so trace messages from differented processes may arrive with the timestamp out of order. Both the erlang:trace and seq_trace:set_system_tracer accept the new tracer module tracers and also the backwards compatible arguments. OTP-10267
2016-03-15update copyright-yearHenrik Nord
2016-01-22Merge branch 'maint'Rickard Green
* maint: Fix HL timer hard debug implementation Fix stack alignment problem in ethread test on arm Skip time_SUITE:timestamp on timewarp test
2015-12-30Fix HL timer hard debug implementationRickard Green
2015-12-29Fix asynchronous BIF timer cancellation message replyRickard Green
2015-11-12Fragmented young heap generation and off_heap_message_queue optionRickard Green
* The youngest generation of the heap can now consist of multiple blocks. Heap fragments and message fragments are added to the youngest generation when needed without triggering a GC. After a GC the youngest generation is contained in one single block. * The off_heap_message_queue process flag has been added. When enabled all message data in the queue is kept off heap. When a message is selected from the queue, the message fragment (or heap fragment) containing the actual message is attached to the youngest generation. Messages stored off heap is not part of GC.
2015-06-22Fix node/dist refc countRickard Green
2015-06-18Change license text to APLv2Bruce Yinhe
2015-06-09Callback timerRickard Green
2015-06-09Disable accessor timer optionRickard Green
2015-05-12Merge branch 'rickard/timer-optimization/OTP-12650'Rickard Green
* rickard/timer-optimization/OTP-12650: Timer fixes, documentation, and test cases Conflicts: erts/emulator/beam/erl_hl_timer.c
2015-05-12Timer fixes, documentation, and test casesRickard Green
2015-05-08Merge branch 'rickard/timer-optimization/OTP-12650'Rickard Green
* rickard/timer-optimization/OTP-12650: Optimized timer implementation Reusable red-black tree implementation Conflicts: erts/emulator/beam/erl_bif_timer.c
2015-05-08Optimized timer implementationRickard Green