diff mbox series

mm/cma: print total and used count in cma_alloc()

Message ID 20240926120049.321514-1-gxxa03070307@gmail.com (mailing list archive)
State New
Headers show
Series mm/cma: print total and used count in cma_alloc() | expand

Commit Message

Xiang Gao Sept. 26, 2024, noon UTC
From: gaoxiang17 <gaoxiang17@xiaomi.com>

before:
[   24.407814] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
[   24.413397] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
[   24.415886] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)

after:
[   24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0)
[   24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0)
[   24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0)

Signed-off-by: gaoxiang17 <gaoxiang17@xiaomi.com>
---
 mm/cma.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

Comments

Andrew Morton Sept. 26, 2024, 8:25 p.m. UTC | #1
On Thu, 26 Sep 2024 20:00:49 +0800 Xiang Gao <gxxa03070307@gmail.com> wrote:

> before:
> [   24.407814] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
> [   24.413397] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
> [   24.415886] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
> 
> after:
> [   24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0)
> [   24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0)
> [   24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0)

OK, thanks.  We should explain why we're making this change!  The
previous version of the patch had "To better understand cma area during
debugging", but that isn't very specific.

Please tell us the use case - why is this information helpful?  How is
it used?
David Hildenbrand Sept. 27, 2024, 12:30 p.m. UTC | #2
On 26.09.24 14:00, Xiang Gao wrote:
> From: gaoxiang17 <gaoxiang17@xiaomi.com>
> 
> before:
> [   24.407814] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
> [   24.413397] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
> [   24.415886] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0)
> 
> after:
> [   24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0)
> [   24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0)
> [   24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0)
> 
> Signed-off-by: gaoxiang17 <gaoxiang17@xiaomi.com>
> ---
>   mm/cma.c | 15 +++++++++++++--
>   1 file changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/mm/cma.c b/mm/cma.c
> index 2d9fae939283..fc35a86aa82f 100644
> --- a/mm/cma.c
> +++ b/mm/cma.c
> @@ -403,6 +403,17 @@ static void cma_debug_show_areas(struct cma *cma)
>   	spin_unlock_irq(&cma->lock);
>   }
>   
> +static unsigned long cma_get_used(struct cma *cma)

I would call it "cma_get_used_pages()"

> +{
> +	unsigned long used;
> +
> +	spin_lock_irq(&cma->lock);
> +	used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma));
> +	spin_unlock_irq(&cma->lock);
> +
> +	return used << cma->order_per_bit;
> +}
> +
>   static struct page *__cma_alloc(struct cma *cma, unsigned long count,
>   				unsigned int align, gfp_t gfp)
>   {
> @@ -420,8 +431,8 @@ static struct page *__cma_alloc(struct cma *cma, unsigned long count,
>   	if (!cma || !cma->count || !cma->bitmap)
>   		return page;
>   
> -	pr_debug("%s(cma %p, name: %s, count %lu, align %d)\n", __func__,
> -		(void *)cma, cma->name, count, align);
> +	pr_debug("%s(cma %p, name: %s, total count %lu, used count: %lu, request count %lu, align %d)\n", __func__,

I would suggest dropping the "count", or using "pages" instead. Also, 
inconsistent usage of ":".

Either:

pr_debug("%s(cma %p, name: %s, total: %lu, used: %lu, requested: %lu, ..."

or

pr_debug("%s(cma %p, name: %s, total pages: %lu, used pages: %lu, 
requested pages: %lu, ..."

> +		(void *)cma, cma->name, cma->count, cma_get_used(cma), count, align);
>   
>   	if (!count)
>   		return page;
高翔 Sept. 28, 2024, 1:04 a.m. UTC | #3
I see.  I think adding "pages" is better.

Do I need to send a new email with a new patch?
David Hildenbrand Sept. 28, 2024, 8:30 a.m. UTC | #4
On 28.09.24 03:04, 高翔 wrote:
> I see. I think adding "pages" is better.
 > > Do I need to send a new email with a new patch?

Yes. Also, please avoid top-posting.

For the new version, use versioning like "[PATCH v2]", which can be 
achieved using "git format-patch -1 -v2" for V2
高翔 Sept. 29, 2024, 2:52 a.m. UTC | #5
Ok, thanks.
diff mbox series

Patch

diff --git a/mm/cma.c b/mm/cma.c
index 2d9fae939283..fc35a86aa82f 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -403,6 +403,17 @@  static void cma_debug_show_areas(struct cma *cma)
 	spin_unlock_irq(&cma->lock);
 }
 
+static unsigned long cma_get_used(struct cma *cma)
+{
+	unsigned long used;
+
+	spin_lock_irq(&cma->lock);
+	used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma));
+	spin_unlock_irq(&cma->lock);
+
+	return used << cma->order_per_bit;
+}
+
 static struct page *__cma_alloc(struct cma *cma, unsigned long count,
 				unsigned int align, gfp_t gfp)
 {
@@ -420,8 +431,8 @@  static struct page *__cma_alloc(struct cma *cma, unsigned long count,
 	if (!cma || !cma->count || !cma->bitmap)
 		return page;
 
-	pr_debug("%s(cma %p, name: %s, count %lu, align %d)\n", __func__,
-		(void *)cma, cma->name, count, align);
+	pr_debug("%s(cma %p, name: %s, total count %lu, used count: %lu, request count %lu, align %d)\n", __func__,
+		(void *)cma, cma->name, cma->count, cma_get_used(cma), count, align);
 
 	if (!count)
 		return page;