浏览代码

kex: use the new pkg update stats event callback

- print total size and total free fragments for each process
- should solve the issue when values of pkg stats were innacurate
Daniel-Constantin Mierla 11 年之前
父节点
当前提交
8b1cef2c88
共有 1 个文件被更改,包括 23 次插入24 次删除
  1. 23 24
      modules/kex/pkg_stats.c

+ 23 - 24
modules/kex/pkg_stats.c

@@ -46,9 +46,11 @@
 typedef struct pkg_proc_stats {
 	int rank;
 	unsigned int pid;
-	unsigned int used;
-	unsigned int available;
-	unsigned int real_used;
+	unsigned long used;
+	unsigned long available;
+	unsigned long real_used;
+	unsigned long total_frags;
+	unsigned long total_size;
 } pkg_proc_stats_t;
 
 /**
@@ -87,6 +89,7 @@ int pkg_proc_stats_init(void)
 int pkg_proc_stats_myinit(int rank)
 {
 	struct mem_info info;
+	LM_INFO("+++++++++++++ %d (%d) [%d]\n", rank, (int)my_pid(), process_no);
 	if(_pkg_proc_stats_list==NULL)
 		return -1;
 	if(process_no>=_pkg_proc_stats_no)
@@ -96,8 +99,11 @@ int pkg_proc_stats_myinit(int rank)
 
 	/* init pkg usage values */
 	pkg_info(&info);
+	_pkg_proc_stats_list[process_no].available = info.free;
 	_pkg_proc_stats_list[process_no].used = info.used;
 	_pkg_proc_stats_list[process_no].real_used = info.real_used;
+	_pkg_proc_stats_list[process_no].total_size = info.total_size;
+	_pkg_proc_stats_list[process_no].total_frags = info.total_frags;
 	return 0;
 }
 
@@ -118,37 +124,28 @@ int pkg_proc_stats_destroy(void)
 /**
  *
  */
-static int pkg_proc_update_used(void *data)
+static int pkg_proc_update_stats(void *data)
 {
-	if(_pkg_proc_stats_list==NULL)
+	struct mem_info info;
+	if(unlikely(_pkg_proc_stats_list==NULL))
 		return -1;
-	if(process_no>=_pkg_proc_stats_no)
+	if(unlikely(process_no>=_pkg_proc_stats_no))
 		return -1;
-	_pkg_proc_stats_list[process_no].used = (unsigned int)(long)data;
+	pkg_info(&info);
+	_pkg_proc_stats_list[process_no].available = info.free;
+	_pkg_proc_stats_list[process_no].used = info.used;
+	_pkg_proc_stats_list[process_no].real_used = info.real_used;
+	_pkg_proc_stats_list[process_no].total_frags = info.total_frags;
 	return 0;
 }
 
-/**
- *
- */
-static int pkg_proc_update_real_used(void *data)
-{
-	if(_pkg_proc_stats_list==NULL)
-		return -1;
-	if(process_no>=_pkg_proc_stats_no)
-		return -1;
-	_pkg_proc_stats_list[process_no].real_used = (unsigned int)(long)data;
-	_pkg_proc_stats_list[process_no].available = pkg_available();
-	return 0;
-}
 
 /**
  *
  */
 int register_pkg_proc_stats(void)
 {
-	sr_event_register_cb(SREV_PKG_SET_USED, pkg_proc_update_used);
-	sr_event_register_cb(SREV_PKG_SET_REAL_USED, pkg_proc_update_real_used);
+	sr_event_register_cb(SREV_PKG_UPDATE_STATS, pkg_proc_update_stats);
 	return 0;
 }
 
@@ -238,13 +235,15 @@ static void rpc_pkg_stats(rpc_t* rpc, void* ctx)
 				rpc->fault(ctx, 500, "Internal error creating rpc");
 				return;
 			}
-			if(rpc->struct_add(th, "dddddd",
+			if(rpc->struct_add(th, "dddddddd",
 							"entry",     i,
 							"pid",       _pkg_proc_stats_list[i].pid,
 							"rank",      _pkg_proc_stats_list[i].rank,
 							"used",      _pkg_proc_stats_list[i].used,
 							"free",      _pkg_proc_stats_list[i].available,
-							"real_used", _pkg_proc_stats_list[i].real_used
+							"real_used", _pkg_proc_stats_list[i].real_used,
+							"total_size",  _pkg_proc_stats_list[i].total_size,
+							"total_frags", _pkg_proc_stats_list[i].total_frags
 						)<0)
 			{
 				rpc->fault(ctx, 500, "Internal error creating rpc");