Browse Source

checkpoint

debug-output
Antonio SJ Musumeci 2 years ago
parent
commit
84bdc8a21a
  1. 18
      libfuse/lib/fuse.c
  2. 30
      libfuse/lib/fuse_msgbuf.cpp
  3. 5
      libfuse/lib/fuse_msgbuf.hpp

18
libfuse/lib/fuse.c

@ -3730,6 +3730,11 @@ metrics_log_nodes_info(struct fuse *f_,
FILE *file_) FILE *file_)
{ {
char buf[1024]; char buf[1024];
uint64_t time_now;
uint64_t sizeof_node;
time_now = time(NULL);
sizeof_node = sizeof(struct node);
lfmp_lock(&f_->node_fmp); lfmp_lock(&f_->node_fmp);
snprintf(buf,sizeof(buf), snprintf(buf,sizeof(buf),
@ -3745,10 +3750,12 @@ metrics_log_nodes_info(struct fuse *f_,
"node memory pool usage ratio: %f\n" "node memory pool usage ratio: %f\n"
"node memory pool avail objs: %"PRIu64"\n" "node memory pool avail objs: %"PRIu64"\n"
"node memory pool total allocated memory: %"PRIu64"\n" "node memory pool total allocated memory: %"PRIu64"\n"
"msgbuf allocation count: %"PRIu64"\n"
"msgbuf total allocated memory: %"PRIu64"\n"
"\n" "\n"
, ,
(uint64_t)time(NULL),
(uint64_t)sizeof(struct node),
(uint64_t)time_now,
(uint64_t)sizeof_node,
(uint64_t)f_->id_table.size, (uint64_t)f_->id_table.size,
(uint64_t)f_->id_table.use, (uint64_t)f_->id_table.use,
(uint64_t)(f_->id_table.size * sizeof(struct node*)), (uint64_t)(f_->id_table.size * sizeof(struct node*)),
@ -3758,7 +3765,9 @@ metrics_log_nodes_info(struct fuse *f_,
(uint64_t)fmp_slab_count(&f_->node_fmp.fmp), (uint64_t)fmp_slab_count(&f_->node_fmp.fmp),
fmp_slab_usage_ratio(&f_->node_fmp.fmp), fmp_slab_usage_ratio(&f_->node_fmp.fmp),
(uint64_t)fmp_avail_objs(&f_->node_fmp.fmp), (uint64_t)fmp_avail_objs(&f_->node_fmp.fmp),
(uint64_t)fmp_total_allocated_memory(&f_->node_fmp.fmp)
(uint64_t)fmp_total_allocated_memory(&f_->node_fmp.fmp),
(uint64_t)msgbuf_alloc_count(),
(uint64_t)msgbuf_alloc_count() * msgbuf_get_bufsize()
); );
lfmp_unlock(&f_->node_fmp); lfmp_unlock(&f_->node_fmp);
@ -3818,7 +3827,10 @@ fuse_maintenance_loop(void *fuse_)
// Trigger a followup gc if this gc succeeds // Trigger a followup gc if this gc succeeds
if(!f->conf.nogc && gc) if(!f->conf.nogc && gc)
{
gc = lfmp_gc(&f->node_fmp); gc = lfmp_gc(&f->node_fmp);
msgbuf_gc();
}
if(g_LOG_METRICS) if(g_LOG_METRICS)
metrics_log_nodes_info_to_tmp_dir(f); metrics_log_nodes_info_to_tmp_dir(f);

30
libfuse/lib/fuse_msgbuf.cpp

@ -78,13 +78,11 @@ page_aligned_malloc(const uint64_t size_)
fuse_msgbuf_t* fuse_msgbuf_t*
msgbuf_alloc() msgbuf_alloc()
{ {
std::lock_guard<std::mutex> lck(g_MUTEX);
fuse_msgbuf_t *msgbuf; fuse_msgbuf_t *msgbuf;
g_MUTEX.lock();
if(g_MSGBUF_STACK.empty()) if(g_MSGBUF_STACK.empty())
{ {
g_MUTEX.unlock();
msgbuf = (fuse_msgbuf_t*)malloc(sizeof(fuse_msgbuf_t)); msgbuf = (fuse_msgbuf_t*)malloc(sizeof(fuse_msgbuf_t));
if(msgbuf == NULL) if(msgbuf == NULL)
return NULL; return NULL;
@ -102,7 +100,6 @@ msgbuf_alloc()
{ {
msgbuf = g_MSGBUF_STACK.top(); msgbuf = g_MSGBUF_STACK.top();
g_MSGBUF_STACK.pop(); g_MSGBUF_STACK.pop();
g_MUTEX.unlock();
} }
return msgbuf; return msgbuf;
@ -122,3 +119,28 @@ msgbuf_free(fuse_msgbuf_t *msgbuf_)
g_MSGBUF_STACK.push(msgbuf_); g_MSGBUF_STACK.push(msgbuf_);
} }
uint64_t
msgbuf_alloc_count()
{
std::lock_guard<std::mutex> lck(g_MUTEX);
return g_MSGBUF_STACK.size();
}
void
msgbuf_gc()
{
std::lock_guard<std::mutex> lck(g_MUTEX);
while(!g_MSGBUF_STACK.empty())
{
fuse_msgbuf_t *msgbuf;
msgbuf = g_MSGBUF_STACK.top();
g_MSGBUF_STACK.pop();
free(msgbuf->mem);
free(msgbuf);
}
}

5
libfuse/lib/fuse_msgbuf.hpp

@ -27,7 +27,10 @@ void msgbuf_set_bufsize(const uint32_t size);
uint32_t msgbuf_get_bufsize(); uint32_t msgbuf_get_bufsize();
fuse_msgbuf_t* msgbuf_alloc(); fuse_msgbuf_t* msgbuf_alloc();
fuse_msgbuf_t* msgbuf_alloc_memonly();
void msgbuf_free(fuse_msgbuf_t *msgbuf); void msgbuf_free(fuse_msgbuf_t *msgbuf);
void msgbuf_gc();
uint64_t msgbuf_alloc_count();
EXTERN_C_END EXTERN_C_END
Loading…
Cancel
Save