提交 f6f0523a 编写于 作者: T Tang Yizhou 提交者: Yang Yingliang

share_pool: Calculate sp_alloc() size for a task

ascend inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I4EUVI
CVE: NA

-------------------------------------------------
Add a new column SP_RES in /proc/sharepool/proc_stat which means sp_alloc
size for a task. It contains other sp_alloc memories applied by the tasks
in the same sp_group.
Signed-off-by: NTang Yizhou <tangyizhou@huawei.com>
Reviewed-by: NDing Tianhong <dingtianhong@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Reviewed-by: NWeilong Chen <chenweilong@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 20af468f
...@@ -82,6 +82,8 @@ struct sp_group { ...@@ -82,6 +82,8 @@ struct sp_group {
atomic64_t alloc_nsize; atomic64_t alloc_nsize;
/* total size of all sp_area from sp_alloc hugepage */ /* total size of all sp_area from sp_alloc hugepage */
atomic64_t alloc_hsize; atomic64_t alloc_hsize;
/* total size of all sp_area from ap_alloc */
atomic64_t alloc_size;
/* we define the creator process of a sp_group as owner */ /* we define the creator process of a sp_group as owner */
struct task_struct *owner; struct task_struct *owner;
/* is_alive == false means it's being destroyed */ /* is_alive == false means it's being destroyed */
......
...@@ -373,6 +373,7 @@ static struct sp_group *find_or_alloc_sp_group(int spg_id) ...@@ -373,6 +373,7 @@ static struct sp_group *find_or_alloc_sp_group(int spg_id)
atomic64_set(&spg->size, 0); atomic64_set(&spg->size, 0);
atomic64_set(&spg->alloc_nsize, 0); atomic64_set(&spg->alloc_nsize, 0);
atomic64_set(&spg->alloc_hsize, 0); atomic64_set(&spg->alloc_hsize, 0);
atomic64_set(&spg->alloc_size, 0);
spg->is_alive = true; spg->is_alive = true;
spg->hugepage_failures = 0; spg->hugepage_failures = 0;
spg->dvpp_multi_spaces = false; spg->dvpp_multi_spaces = false;
...@@ -939,6 +940,7 @@ static struct sp_area *sp_alloc_area(unsigned long size, unsigned long flags, ...@@ -939,6 +940,7 @@ static struct sp_area *sp_alloc_area(unsigned long size, unsigned long flags,
atomic64_add(size, &spg->alloc_hsize); atomic64_add(size, &spg->alloc_hsize);
else else
atomic64_add(size, &spg->alloc_nsize); atomic64_add(size, &spg->alloc_nsize);
atomic64_add(size, &spg->alloc_size);
} }
atomic_inc(&spg_stat.spa_total_num); atomic_inc(&spg_stat.spa_total_num);
atomic64_add(size, &spg_stat.spa_total_size); atomic64_add(size, &spg_stat.spa_total_size);
...@@ -1023,6 +1025,7 @@ static void sp_free_area(struct sp_area *spa) ...@@ -1023,6 +1025,7 @@ static void sp_free_area(struct sp_area *spa)
atomic64_sub(spa->real_size, &spa->spg->alloc_hsize); atomic64_sub(spa->real_size, &spa->spg->alloc_hsize);
else else
atomic64_sub(spa->real_size, &spa->spg->alloc_nsize); atomic64_sub(spa->real_size, &spa->spg->alloc_nsize);
atomic64_sub(spa->real_size, &spa->spg->alloc_size);
} }
atomic_dec(&spg_stat.spa_total_num); atomic_dec(&spg_stat.spa_total_num);
atomic64_sub(spa->real_size, &spg_stat.spa_total_size); atomic64_sub(spa->real_size, &spg_stat.spa_total_size);
...@@ -2561,9 +2564,10 @@ static int idr_spg_stat_cb(int id, void *p, void *data) ...@@ -2561,9 +2564,10 @@ static int idr_spg_stat_cb(int id, void *p, void *data)
struct sp_group *spg = p; struct sp_group *spg = p;
struct seq_file *seq = data; struct seq_file *seq = data;
seq_printf(seq, "Group %6d size: %ld KB, spa num: %d, normal alloc: %ld KB, " seq_printf(seq, "Group %6d size: %ld KB, spa num: %d, total alloc: %ld KB, "
"huge alloc: %ld KB\n", "normal alloc: %ld KB, huge alloc: %ld KB\n",
id, byte2kb(atomic64_read(&spg->size)), atomic_read(&spg->spa_num), id, byte2kb(atomic64_read(&spg->size)), atomic_read(&spg->spa_num),
byte2kb(atomic64_read(&spg->alloc_size)),
byte2kb(atomic64_read(&spg->alloc_nsize)), byte2kb(atomic64_read(&spg->alloc_nsize)),
byte2kb(atomic64_read(&spg->alloc_hsize))); byte2kb(atomic64_read(&spg->alloc_hsize)));
...@@ -2602,10 +2606,12 @@ static int idr_proc_stat_cb(int id, void *p, void *data) ...@@ -2602,10 +2606,12 @@ static int idr_proc_stat_cb(int id, void *p, void *data)
unsigned long anon, file, shmem, total_rss; unsigned long anon, file, shmem, total_rss;
/* /*
* non_sp_res: resident memory size excluding share pool memory * non_sp_res: resident memory size excluding share pool memory
* sp_res: resident memory size of share pool, including normal
* page and hugepage memory
* non_sp_shm: resident shared memory size size excluding share pool * non_sp_shm: resident shared memory size size excluding share pool
* memory * memory
*/ */
long sp_alloc_nsize, non_sp_res, non_sp_shm; long sp_alloc_nsize, non_sp_res, sp_res, non_sp_shm;
mutex_lock(&sp_mutex); mutex_lock(&sp_mutex);
if (!mmget_not_zero(mm)) if (!mmget_not_zero(mm))
...@@ -2618,9 +2624,11 @@ static int idr_proc_stat_cb(int id, void *p, void *data) ...@@ -2618,9 +2624,11 @@ static int idr_proc_stat_cb(int id, void *p, void *data)
if (!spg_valid(spg)) { if (!spg_valid(spg)) {
spg_id = 0; spg_id = 0;
sp_alloc_nsize = 0; sp_alloc_nsize = 0;
sp_res = 0;
} else { } else {
spg_id = spg->id; spg_id = spg->id;
sp_alloc_nsize = byte2kb(atomic64_read(&spg->alloc_nsize)); sp_alloc_nsize = byte2kb(atomic64_read(&spg->alloc_nsize));
sp_res = byte2kb(atomic64_read(&spg->alloc_size));
} }
anon = get_mm_counter(mm, MM_ANONPAGES); anon = get_mm_counter(mm, MM_ANONPAGES);
...@@ -2636,8 +2644,8 @@ static int idr_proc_stat_cb(int id, void *p, void *data) ...@@ -2636,8 +2644,8 @@ static int idr_proc_stat_cb(int id, void *p, void *data)
seq_printf(seq, "%-8c ", '-'); seq_printf(seq, "%-8c ", '-');
else else
seq_printf(seq, "%-8d ", spg_id); seq_printf(seq, "%-8d ", spg_id);
seq_printf(seq, "%-9ld %-9ld %-10ld %-8ld %-7ld %-7ld %-10ld\n", seq_printf(seq, "%-9ld %-9ld %-9ld %-10ld %-8ld %-7ld %-7ld %-10ld\n",
byte2kb(stat->alloc_size), byte2kb(stat->k2u_size), byte2kb(stat->alloc_size), byte2kb(stat->k2u_size), sp_res,
non_sp_res, page2kb(mm->total_vm), page2kb(total_rss), non_sp_res, page2kb(mm->total_vm), page2kb(total_rss),
page2kb(shmem), non_sp_shm); page2kb(shmem), non_sp_shm);
mmput(mm); mmput(mm);
...@@ -2653,9 +2661,9 @@ static int proc_stat_show(struct seq_file *seq, void *offset) ...@@ -2653,9 +2661,9 @@ static int proc_stat_show(struct seq_file *seq, void *offset)
spg_overview_show(seq); spg_overview_show(seq);
spa_overview_show(seq); spa_overview_show(seq);
/* print the file header */ /* print the file header */
seq_printf(seq, "%-8s %-8s %-9s %-9s %-10s %-8s %-7s %-7s %-10s\n", seq_printf(seq, "%-8s %-8s %-9s %-9s %-9s %-10s %-8s %-7s %-7s %-10s\n",
"PID", "Group_ID", "SP_ALLOC", "SP_K2U", "Non-SP_RES", "PID", "Group_ID", "SP_ALLOC", "SP_K2U", "SP_RES",
"VIRT", "RES", "Shm", "Non-SP_Shm"); "Non-SP_RES", "VIRT", "RES", "Shm", "Non-SP_Shm");
/* print kthread buff_module_guard_work */ /* print kthread buff_module_guard_work */
seq_printf(seq, "%-8s %-8s %-9ld %-9ld\n", seq_printf(seq, "%-8s %-8s %-9ld %-9ld\n",
"guard", "-", byte2kb(kthread_stat.alloc_size), "guard", "-", byte2kb(kthread_stat.alloc_size),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册