char comm[TS_COMM_LEN];
struct taskstats prev;
struct taskstats curr;
+ struct proc_map_info map_info;
u_int64_t prev_total_time;
double cpu_period;
return -EINVAL;
}
- curr = &ctx->curr;
-
switch (attr->id) {
case PROCESS_ATTR_MEM_VIRT:
+ curr = &ctx->curr;
*mem = (curr->virtmem * 1024 * 1024) / curr->ac_stime;
break;
case PROCESS_ATTR_MEM_RSS:
+ curr = &ctx->curr;
*mem = (curr->coremem * 1024 * 1024) / curr->ac_stime;
break;
case PROCESS_ATTR_MEM_RSS_PERCENT:
{
double *percent = (double *)data;
+ curr = &ctx->curr;
*percent = (curr->coremem * 1024 * 1024) / curr->ac_stime;
*percent /= ctx->total_memory * 100.0;
break;
}
+ case PROCESS_ATTR_MEM_PSS:
+ *mem = (u_int64_t)ctx->map_info.pss * 1024;
+ break;
+ case PROCESS_ATTR_MEM_SWAP:
+ *mem = (u_int64_t)ctx->map_info.swap * 1024;
+ break;
+ case PROCESS_ATTR_MEM_SWAP_PSS:
+ *mem = (u_int64_t)ctx->map_info.swap_pss * 1024;
+ break;
default:
return -EINVAL;
}
.get = process_get_context_data,
.is_supported = resource_attr_supported_always,
},
+ }, {
+ .name = "PROCESS_ATTR_MEM_PSS",
+ .id = PROCESS_ATTR_MEM_PSS,
+ .type = DATA_TYPE_UINT64,
+ .ops = {
+ .get = process_get_mem_attrs,
+ .is_supported = resource_attr_supported_always,
+ },
+ }, {
+ .name = "PROCESS_ATTR_MEM_SWAP",
+ .id = PROCESS_ATTR_MEM_SWAP,
+ .type = DATA_TYPE_UINT64,
+ .ops = {
+ .get = process_get_mem_attrs,
+ .is_supported = resource_attr_supported_always,
+ },
+ }, {
+ .name = "PROCESS_ATTR_MEM_SWAP_PSS",
+ .id = PROCESS_ATTR_MEM_SWAP_PSS,
+ .type = DATA_TYPE_UINT64,
+ .ops = {
+ .get = process_get_mem_attrs,
+ .is_supported = resource_attr_supported_always,
+ },
},
};
if (ret < 0)
return ret;
+ ret = kernel_get_thread_group_map_info(&ctx->map_info, ctx->tgid);
+ if (ret < 0)
+ return ret;
+
memcpy(ctx->comm, ctx->curr.ac_comm, strlen(ctx->curr.ac_comm) + 1);
ctx->pgid = -1;
if (ret < 0)
return ret;
+ ret = kernel_get_thread_group_map_info(&ctx->map_info, ctx->tgid);
+ if (ret < 0)
+ return ret;
+
online = kernel_get_online_cpu_num();
total_time = get_total_cpu_time();