File 3522-erts-Skip-main-carrier-for-ets_alloc-instance-0.patch of Package erlang
From 8517467d2b984a5e36f87f648b1fd26b8f1b9efc Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Mon, 19 Apr 2021 11:57:36 +0200
Subject: [PATCH 2/3] erts: Skip main carrier for ets_alloc instance 0
Don't think instance 0 of ets_alloc is ever used,
at least ets_SUITE never used it.
---
erts/emulator/beam/erl_alloc.c | 1 +
erts/emulator/beam/erl_alloc_util.c | 2 +-
erts/emulator/beam/erl_alloc_util.h | 3 +++
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index f88a1adaff..2cea68a817 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -404,6 +404,7 @@ set_default_ets_alloc_opts(struct au_init *ip)
ip->init.util.name_prefix = "ets_";
ip->init.util.alloc_no = ERTS_ALC_A_ETS;
ip->init.util.cp = ERTS_ALC_A_ETS;
+ ip->init.util.mmbc0 = 0;
#ifndef SMALL_MEMORY
ip->init.util.mmbcs = 128*1024; /* Main carrier size */
#else
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 06edf60857..ac3e9fe967 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -6915,7 +6915,7 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init)
}
#endif
- if (allctr->main_carrier_size) {
+ if (allctr->main_carrier_size && (allctr->ix != 0 || init->mmbc0)) {
Block_t *blk;
blk = create_carrier(allctr,
diff --git a/erts/emulator/beam/erl_alloc_util.h b/erts/emulator/beam/erl_alloc_util.h
index 402c57fa3e..359457913c 100644
--- a/erts/emulator/beam/erl_alloc_util.h
+++ b/erts/emulator/beam/erl_alloc_util.h
@@ -54,6 +54,7 @@ typedef struct {
int ramv;
int atags;
int cp;
+ int mmbc0; /* create main mbc for instance 0 */
UWord sbct;
UWord asbcst;
UWord rsbcst;
@@ -113,6 +114,7 @@ typedef struct {
0, /* (bool) ramv: realloc always moves */\
0, /* (bool) atags: tagged allocations */\
-1, /* (ix) cp: carrier pool */\
+ 1, /* (bool) mmbc0: main mbc in instance 0 */\
512*1024, /* (bytes) sbct: sbc threshold */\
2*1024*2024, /* (amount) asbcst: abs sbc shrink threshold */\
20, /* (%) rsbcst: rel sbc shrink threshold */\
@@ -152,6 +154,7 @@ typedef struct {
0, /* (bool) ramv: realloc always moves */\
0, /* (bool) atags: tagged allocations */\
-1, /* (ix) cp: carrier pool */\
+ 1, /* (bool) mmbc0: main mbc in instance 0 */\
64*1024, /* (bytes) sbct: sbc threshold */\
2*1024*2024, /* (amount) asbcst: abs sbc shrink threshold */\
20, /* (%) rsbcst: rel sbc shrink threshold */\
--
2.26.2