Age | Commit message (Collapse) | Author |
|
* maint:
Fix etp-ets-tables
Fix node refc test for free processes hanging around
Enhanced node refc bookkeeping
Fix node container refc tests of ETS
Fix node refc test of external data
Node container refc test for persistent terms
Include persistent term storage in node/dist refc check
Fix node refc test for system message queue
|
|
|
|
* Only shrink when we can remove one segment and still remain
below 50% table load.
* Only shrink down to two table segments. It just leads to a lot of
potentially "unnecessary" rehashing to have a chance of getting rid
of the last extra segment before the last delete op. I don't think
it's worth it.
|
|
|
|
|
|
by only allocating one FixedDeletion with the new "all" flag
instead of one FixedDeletion per slot.
|
|
Separate pseudo-deleted-flag from the hash value.
|
|
by using a cooperative strategy that will make
any process accessing the table execute delelete_all_objects_continue
until the table is empty.
This is not an optimal solution as concurrent threads will still
block on the table lock, but at least thread progress is made.
|
|
|
|
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
|
|
The implementation is still hidden behind ERTS_ENABLE_LOCK_COUNT, and
all categories are still enabled by default, but the actual counting can be
toggled at will.
OTP-13170
|
|
|
|
|
|
from process psd through all owned/fixed tables.
As meta_pid_to{_fixed}_tab maps to slot in meta_main_tab
which is planned for destruction.
In this commit we no longer seize table lock while
freeing the table (free_table_cont) as it's not needed
and makes the code a bit simpler. Any concurrent operation
on the table will only access lock, owner and status
and then bail out.
|
|
|
|
by simply asking for the size of struct ext_segtab
|
|
due to the grow/shrink hysteresis of the meta tables
|
|
* Keep it simple(r)
* To prepare for both dynamic sized segments and segtabs
|
|
in tables without write_concurrency
and remove it totally #ifndef ERTS_SMP
|
|
This reverts commit f4bdac18cb9dd45185e911308a5ebd95ff10d7fd.
|
|
in tables without write_concurrency
and remove it totally #ifndef ERTS_SMP
|
|
|
|
|
|
OTP-12376
|
|
Effects if sizeof(erts_smp_rwmtx_t) > 64:
+ Better performance due to less false sharing
- Increased memory footprint per table
|
|
Make it possible to change the number of write_concurrency locks to use. This
is usefull to change when you for some reason want to use more/less locks
per write_concurrency ets table. eg. OSs with a limit on how many mutexes
can exist at once.
|
|
|
|
|
|
|
|
Add an extra pointer to start of segment with the active segment table
to get rid of PossiblyLost errors without the need of a too general
suppression that may hide real memory leaks in ETS.
|
|
|