aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2017-06-01 16:26:11 +0200
committerSverker Eriksson <[email protected]>2017-10-18 19:00:13 +0200
commit840d8e21dd4833fc859998bb0e77b31f70b6ffd7 (patch)
tree5e966420af4cbd68c19364a904bf8cd607b21ffe
parentaa315e1cf1b79ab782e5b4c944595495ebf4e2f4 (diff)
downloadotp-840d8e21dd4833fc859998bb0e77b31f70b6ffd7.tar.gz
otp-840d8e21dd4833fc859998bb0e77b31f70b6ffd7.tar.bz2
otp-840d8e21dd4833fc859998bb0e77b31f70b6ffd7.zip
erts: Add statistics for cpoll fetch attempts
-rw-r--r--erts/emulator/beam/erl_alloc_util.c58
-rw-r--r--erts/emulator/beam/erl_alloc_util.h6
2 files changed, 61 insertions, 3 deletions
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 230ca6ccbb..c5b787bd8c 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -3306,6 +3306,7 @@ cpool_fetch(Allctr_t *allctr, UWord size)
if (--i <= 0) {
/* Move sentinel to continue next search from here */
relink_edl_before(dl, &allctr->cpool.pooled_list);
+ INC_CC(allctr->cpool.stat.fail_pooled);
return NULL;
}
}
@@ -3356,8 +3357,10 @@ cpool_fetch(Allctr_t *allctr, UWord size)
relink_edl_before(dl, &allctr->cpool.traitor_list);
if (i > 0)
break;
- else
+ else {
+ INC_CC(allctr->cpool.stat.fail_traitor);
return NULL;
+ }
}
}
@@ -3421,8 +3424,10 @@ cpool_fetch(Allctr_t *allctr, UWord size)
return crr;
}
}
- if (--i <= 0)
+ if (--i <= 0) {
+ INC_CC(allctr->cpool.stat.fail_shared);
return NULL;
+ }
}
check_dc_list:
@@ -3445,10 +3450,15 @@ check_dc_list:
return crr;
}
crr = crr->prev;
- if (--i <= 0)
+ if (--i <= 0) {
+ INC_CC(allctr->cpool.stat.fail_pend_dealloc);
return NULL;
+ }
}
+ if (i != ERTS_ALC_CPOOL_MAX_FETCH_INSPECT)
+ INC_CC(allctr->cpool.stat.fail);
+
return NULL;
}
@@ -3801,6 +3811,7 @@ create_carrier(Allctr_t *allctr, Uint umem_sz, UWord flags)
crr = cpool_fetch(allctr, blk_sz);
if (crr) {
STAT_MBC_CPOOL_FETCH(allctr, crr);
+ INC_CC(allctr->cpool.stat.fetch);
link_carrier(&allctr->mbc_list, crr);
(*allctr->add_mbc)(allctr, crr);
blk = (*allctr->get_free_block)(allctr, blk_sz, NULL, 0);
@@ -4252,6 +4263,12 @@ static struct {
Eterm mbcs;
#ifdef ERTS_SMP
Eterm mbcs_pool;
+ Eterm fetch;
+ Eterm fail_pooled;
+ Eterm fail_traitor;
+ Eterm fail_shared;
+ Eterm fail_pend_dealloc;
+ Eterm fail;
#endif
Eterm sbcs;
@@ -4342,6 +4359,12 @@ init_atoms(Allctr_t *allctr)
AM_INIT(mbcs);
#ifdef ERTS_SMP
AM_INIT(mbcs_pool);
+ AM_INIT(fetch);
+ AM_INIT(fail_pooled);
+ AM_INIT(fail_traitor);
+ AM_INIT(fail_shared);
+ AM_INIT(fail_pend_dealloc);
+ AM_INIT(fail);
#endif
AM_INIT(sbcs);
@@ -4627,6 +4650,32 @@ info_cpool(Allctr_t *allctr,
if (hpp || szp) {
res = NIL;
+
+ add_3tup(hpp, szp, &res, am.fail_pooled,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fail_pooled)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fail_pooled)));
+
+ add_3tup(hpp, szp, &res, am.fail_traitor,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fail_traitor)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fail_traitor)));
+
+ add_3tup(hpp, szp, &res, am.fail_shared,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fail_shared)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fail_shared)));
+
+ add_3tup(hpp, szp, &res, am.fail_pend_dealloc,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fail_pend_dealloc)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fail_pend_dealloc)));
+
+ add_3tup(hpp, szp, &res, am.fail,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fail)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fail)));
+
+ add_3tup(hpp, szp, &res, am.fetch,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fetch)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fetch)));
+
+
add_2tup(hpp, szp, &res,
am.carriers_size,
bld_unstable_uint(hpp, szp, csz));
@@ -4641,6 +4690,9 @@ info_cpool(Allctr_t *allctr,
add_2tup(hpp, szp, &res,
am.blocks,
bld_unstable_uint(hpp, szp, nob));
+ add_3tup(hpp, szp, &res, am.fetch,
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_GIGA_VAL(allctr->cpool.stat.fetch)),
+ bld_unstable_uint(hpp, szp, ERTS_ALC_CC_VAL(allctr->cpool.stat.fetch)));
}
return res;
diff --git a/erts/emulator/beam/erl_alloc_util.h b/erts/emulator/beam/erl_alloc_util.h
index 81180382af..2c0d7f7d75 100644
--- a/erts/emulator/beam/erl_alloc_util.h
+++ b/erts/emulator/beam/erl_alloc_util.h
@@ -574,6 +574,12 @@ struct Allctr_t_ {
erts_atomic_t no_blocks;
erts_atomic_t carriers_size;
erts_atomic_t no_carriers;
+ CallCounter_t fail_pooled;
+ CallCounter_t fail_traitor;
+ CallCounter_t fail_shared;
+ CallCounter_t fail_pend_dealloc;
+ CallCounter_t fail;
+ CallCounter_t fetch;
} stat;
} cpool;
#endif