mm: vmstat: add cma statistics
Since CMA is used more widely, it's worth to have CMA allocation statistics into vmstat. With it, we could know how agressively system uses cma allocation and how often it fails. Link: https://lkml.kernel.org/r/20210302183346.3707237-1-minchan@kernel.org Signed-off-by: Minchan Kim <minchan@kernel.org> Reviewed-by: John Hubbard <jhubbard@nvidia.com> Cc: John Dias <joaodias@google.com> Cc: Suren Baghdasaryan <surenb@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
7ee820ee72
Коммит
bbb269206f
|
@ -70,6 +70,10 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
|
|||
#endif
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
|
||||
#endif
|
||||
#ifdef CONFIG_CMA
|
||||
CMA_ALLOC_SUCCESS,
|
||||
CMA_ALLOC_FAIL,
|
||||
#endif
|
||||
UNEVICTABLE_PGCULLED, /* culled to noreclaim list */
|
||||
UNEVICTABLE_PGSCANNED, /* scanned for reclaimability */
|
||||
|
|
12
mm/cma.c
12
mm/cma.c
|
@ -435,13 +435,13 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
|||
int ret = -ENOMEM;
|
||||
|
||||
if (!cma || !cma->count || !cma->bitmap)
|
||||
return NULL;
|
||||
goto out;
|
||||
|
||||
pr_debug("%s(cma %p, count %zu, align %d)\n", __func__, (void *)cma,
|
||||
count, align);
|
||||
|
||||
if (!count)
|
||||
return NULL;
|
||||
goto out;
|
||||
|
||||
mask = cma_bitmap_aligned_mask(cma, align);
|
||||
offset = cma_bitmap_aligned_offset(cma, align);
|
||||
|
@ -449,7 +449,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
|||
bitmap_count = cma_bitmap_pages_to_bits(cma, count);
|
||||
|
||||
if (bitmap_count > bitmap_maxno)
|
||||
return NULL;
|
||||
goto out;
|
||||
|
||||
for (;;) {
|
||||
spin_lock_irq(&cma->lock);
|
||||
|
@ -506,6 +506,12 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
|||
}
|
||||
|
||||
pr_debug("%s(): returned %p\n", __func__, page);
|
||||
out:
|
||||
if (page)
|
||||
count_vm_event(CMA_ALLOC_SUCCESS);
|
||||
else
|
||||
count_vm_event(CMA_ALLOC_FAIL);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
|
|
|
@ -1312,6 +1312,10 @@ const char * const vmstat_text[] = {
|
|||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
"htlb_buddy_alloc_success",
|
||||
"htlb_buddy_alloc_fail",
|
||||
#endif
|
||||
#ifdef CONFIG_CMA
|
||||
"cma_alloc_success",
|
||||
"cma_alloc_fail",
|
||||
#endif
|
||||
"unevictable_pgs_culled",
|
||||
"unevictable_pgs_scanned",
|
||||
|
|
Загрузка…
Ссылка в новой задаче