u_int64_t mem_pss;
u_int64_t mem_swap;
u_int64_t mem_swap_pss;
+ u_int64_t mem_gpu;
} info;
u_int64_t prev_total_time;
};
case PROCESS_GROUP_ATTR_MEM_SWAP_PSS:
*mem = ctx->info.mem_swap_pss;
break;
+ case PROCESS_GROUP_ATTR_MEM_GPU:
+ *mem = ctx->info.mem_gpu;
+ break;
default:
return -EINVAL;
}
.get = process_group_get_mem,
.is_supported = resource_attr_supported_always,
},
+ }, {
+ .name = "PROCESS_GROUP_ATTR_MEM_GPU",
+ .id = PROCESS_GROUP_ATTR_MEM_GPU,
+ .type = DATA_TYPE_UINT64,
+ .ops = {
+ .get = process_group_get_mem,
+ .is_supported = resource_attr_supported_always,
+ },
},
};
return total_time;
}
-static int update_aggr_taskstats(struct process_group_context *ctx)
+static int update_aggr_taskstats(struct process_group_context *ctx, struct resource *res)
{
struct process_info_node *node;
struct taskstats *prev, *curr;
gpointer key, value;
pid_t pid;
int ret;
+ bool include_gpu_mem = is_resource_attr_interested(res, PROCESS_GROUP_ATTR_MEM_GPU);
memset(&ctx->info, 0, sizeof(ctx->info));
continue;
}
- ret = kernel_get_thread_group_map_info(&map_info, pid, false);
+ ret = kernel_get_thread_group_map_info(&map_info, pid, include_gpu_mem);
if (ret < 0) {
free(curr);
g_hash_table_iter_remove(&iter);
ctx->info.mem_swap += (u_int64_t)map_info.swap * 1024;
ctx->info.mem_swap_pss += (u_int64_t)map_info.swap_pss * 1024;
+ if (include_gpu_mem)
+ ctx->info.mem_gpu += (u_int64_t)map_info.gpu_mem * 1024;
+
free(prev);
node->prev = curr;
}
}
}
- ret = update_aggr_taskstats(ctx);
+ ret = update_aggr_taskstats(ctx, res);
if (ret < 0) {
ret = -EINVAL;
goto out_free_hash;