<th>ID</th>
<th>Name</th>
<th>References</th>
- <th>TotalUse</th>
<th>InUse</th>
<th>BlockSize</th>
<th>Pools</th>
<td>
<xsl:value-of select="references"/>
</td>
- <td>
- <xsl:value-of select="total"/>
- </td>
<td>
<xsl:value-of select="inuse"/>
</td>
fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)dns_db_hashsize(cache->db),
"cache database hash buckets");
- fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)isc_mem_total(cache->mctx),
- "cache tree memory total");
fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)isc_mem_inuse(cache->mctx),
"cache tree memory in use");
- fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)isc_mem_total(cache->hmctx),
- "cache heap memory total");
fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)isc_mem_inuse(cache->hmctx),
"cache heap memory in use");
}
dns_db_nodecount(cache->db, dns_dbtree_nsec), writer));
TRY0(renderstat("CacheBuckets", dns_db_hashsize(cache->db), writer));
- TRY0(renderstat("TreeMemTotal", isc_mem_total(cache->mctx), writer));
TRY0(renderstat("TreeMemInUse", isc_mem_inuse(cache->mctx), writer));
- TRY0(renderstat("HeapMemTotal", isc_mem_total(cache->hmctx), writer));
TRY0(renderstat("HeapMemInUse", isc_mem_inuse(cache->hmctx), writer));
error:
return (xmlrc);
CHECKMEM(obj);
json_object_object_add(cstats, "CacheBuckets", obj);
- obj = json_object_new_int64(isc_mem_total(cache->mctx));
- CHECKMEM(obj);
- json_object_object_add(cstats, "TreeMemTotal", obj);
-
obj = json_object_new_int64(isc_mem_inuse(cache->mctx));
CHECKMEM(obj);
json_object_object_add(cstats, "TreeMemInUse", obj);
- obj = json_object_new_int64(isc_mem_total(cache->hmctx));
- CHECKMEM(obj);
- json_object_object_add(cstats, "HeapMemTotal", obj);
-
obj = json_object_new_int64(isc_mem_inuse(cache->hmctx));
CHECKMEM(obj);
json_object_object_add(cstats, "HeapMemInUse", obj);
* allocated from the system but not yet used.
*/
-size_t
-isc_mem_total(isc_mem_t *mctx);
-/*%<
- * Get the total amount of memory in 'mctx', in bytes, including memory
- * not yet used.
- */
-
bool
isc_mem_isovermem(isc_mem_t *mctx);
/*%<
struct stats stats[STATS_BUCKETS + 1];
isc_refcount_t references;
char name[16];
- atomic_size_t total;
atomic_size_t inuse;
atomic_bool hi_called;
atomic_bool is_overmem;
mem_getstats(isc_mem_t *ctx, size_t size) {
struct stats *stats = stats_bucket(ctx, size);
- atomic_fetch_add_relaxed(&ctx->total, size);
atomic_fetch_add_release(&ctx->inuse, size);
atomic_fetch_add_relaxed(&stats->gets, 1);
isc_mutex_init(&ctx->lock);
isc_refcount_init(&ctx->references, 1);
- atomic_init(&ctx->total, 0);
atomic_init(&ctx->inuse, 0);
atomic_init(&ctx->hi_water, 0);
atomic_init(&ctx->lo_water, 0);
return (atomic_load_acquire(&ctx->inuse));
}
-size_t
-isc_mem_total(isc_mem_t *ctx) {
- REQUIRE(VALID_CONTEXT(ctx));
-
- return (atomic_load_acquire(&ctx->total));
-}
-
void
isc_mem_clearwater(isc_mem_t *mctx) {
isc_mem_setwater(mctx, NULL, NULL, 0, 0);
}
typedef struct summarystat {
- uint64_t total;
uint64_t inuse;
uint64_t contextsize;
} summarystat_t;
isc_refcount_current(&ctx->references)));
TRY0(xmlTextWriterEndElement(writer)); /* references */
- summary->total += isc_mem_total(ctx);
- TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "total"));
- TRY0(xmlTextWriterWriteFormatString(writer, "%" PRIu64 "",
- (uint64_t)isc_mem_total(ctx)));
- TRY0(xmlTextWriterEndElement(writer)); /* total */
-
summary->inuse += isc_mem_inuse(ctx);
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "inuse"));
TRY0(xmlTextWriterWriteFormatString(writer, "%" PRIu64 "",
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "summary"));
- TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "TotalUse"));
- TRY0(xmlTextWriterWriteFormatString(writer, "%" PRIu64 "",
- summary.total));
- TRY0(xmlTextWriterEndElement(writer)); /* TotalUse */
-
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "InUse"));
TRY0(xmlTextWriterWriteFormatString(writer, "%" PRIu64 "",
summary.inuse));
MCTXLOCK(ctx);
summary->contextsize += sizeof(*ctx);
- summary->total += isc_mem_total(ctx);
summary->inuse += isc_mem_inuse(ctx);
#if ISC_MEM_TRACKLINES
if (ctx->debuglist != NULL) {
CHECKMEM(obj);
json_object_object_add(ctxobj, "references", obj);
- obj = json_object_new_int64(isc_mem_total(ctx));
- CHECKMEM(obj);
- json_object_object_add(ctxobj, "total", obj);
-
obj = json_object_new_int64(isc_mem_inuse(ctx));
CHECKMEM(obj);
json_object_object_add(ctxobj, "inuse", obj);
}
UNLOCK(&contextslock);
- obj = json_object_new_int64(summary.total);
- CHECKMEM(obj);
- json_object_object_add(memobj, "TotalUse", obj);
-
obj = json_object_new_int64(summary.inuse);
CHECKMEM(obj);
json_object_object_add(memobj, "InUse", obj);
isc_mem_free(mctx, ptr);
}
-/* test TotalUse calculation */
-ISC_RUN_TEST_IMPL(isc_mem_total) {
- isc_mem_t *mctx2 = NULL;
- size_t before, after;
- ssize_t diff;
- int i;
-
- /* Local alloc, free */
- mctx2 = NULL;
- isc_mem_create(&mctx2);
-
- before = isc_mem_total(mctx2);
-
- for (i = 0; i < 100000; i++) {
- void *ptr;
-
- ptr = isc_mem_get(mctx2, 2048);
- isc_mem_put(mctx2, ptr, 2048);
- }
-
- after = isc_mem_total(mctx2);
- diff = after - before;
-
- assert_int_equal(diff, (2048) * 100000);
-
- /* ISC_MEMFLAG_INTERNAL */
-
- before = isc_mem_total(mctx);
-
- for (i = 0; i < 100000; i++) {
- void *ptr;
-
- ptr = isc_mem_get(mctx, 2048);
- isc_mem_put(mctx, ptr, 2048);
- }
-
- after = isc_mem_total(mctx);
- diff = after - before;
-
- assert_int_equal(diff, (2048) * 100000);
-
- isc_mem_destroy(&mctx2);
-}
-
/* test InUse calculation */
ISC_RUN_TEST_IMPL(isc_mem_inuse) {
isc_mem_t *mctx2 = NULL;
#endif /* defined(HAVE_MALLOC_NP_H) || defined(HAVE_JEMALLOC) */
ISC_TEST_ENTRY(isc_mem_get_zero)
ISC_TEST_ENTRY(isc_mem_allocate_zero)
-ISC_TEST_ENTRY(isc_mem_total)
ISC_TEST_ENTRY(isc_mem_inuse)
ISC_TEST_ENTRY(isc_mem_zeroget)
ISC_TEST_ENTRY(isc_mem_reget)