Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752838AbcL2OUP (ORCPT ); Thu, 29 Dec 2016 09:20:15 -0500 Received: from mail-lf0-f51.google.com ([209.85.215.51]:34255 "EHLO mail-lf0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752656AbcL2OUO (ORCPT ); Thu, 29 Dec 2016 09:20:14 -0500 From: Michal Nazarewicz To: Michal Hocko , Jaewon Kim Cc: gregkh@linuxfoundation.org, akpm@linux-foundation.org, labbott@redhat.com, m.szyprowski@samsung.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, jaewon31.kim@gmail.com Subject: Re: [PATCH] mm: cma: print allocation failure reason and bitmap status In-Reply-To: <20161229091449.GG29208@dhcp22.suse.cz> Organization: http://mina86.com/ References: <1482978482-14007-1-git-send-email-jaewon31.kim@samsung.com> <20161229091449.GG29208@dhcp22.suse.cz> User-Agent: Notmuch/0.19+53~g2e63a09 (http://notmuchmail.org) Emacs/26.0.50.2 (x86_64-unknown-linux-gnu) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAJFBMVEWbfGlUPDDHgE57V0jUupKjgIObY0PLrom9mH4dFRK4gmjPs41MxjOgAAACP0lEQVQ4T23Sv2vbQBQHcBk1xE6WyALX107VUEgmn6+ouUwpEQQ6uRjttkWP4CkBg2M0BQLBdPFZYPsyFYo7qEtKDQ7on+t7+nF2Ux8ahD587717OmNYrOvycHsZ+o2r051wHTHysAvGb8ygvgu4QWT0sCmkgZCIEnlV2X8BtyraazFGDuxhmKSQJMlwHQ7v5MHSNxmz78rfElwAa3ieVD9e+hBhjaPDDG6NgFo2f4wBMNIo5YmRtF0RyDgFjJjlMIWbnuM4x9MMfABGTlN4qgIQB4A1DEyA1BHWtfeWNUMwiVJKoqh97KrkOO+qzgluVYLvFCUKAX73nONeBr7BGMdM6Sg0kuep03VywLaIzRiVr+GAzKlpQIsAFnWAG2e6DT5WmWDiudZMIc6hYrMOmeMQK9WX0B+/RfjzL9DI7Y9/Iayn29Ci0r2i4f9gMimMSZLCDMalgQGU5hnUtqAN0OGvEmO1Wnl0C0wWSCEHnuHBqmygxdxA8oWXwbipoc1EoNR9DqOpBpOJrnr0criQab9ZT4LL+wI+K7GBQH30CrhUruilgP9DRTrhVWZCiAyILP+wiuLeCKGTD6r/nc8LOJcAwR6IBTUs+7CASw3QFZ0MdA2PI3zNziH4ZKVhXCRMBjeZ1DWMekKwDCASwExy+NQ86TaykaDAFHO4aP48y4fIcDM5yOG8GcTLbOyp8A8azjJI93JFd1EA6yN8sSxMQJWoABqniRZVykYgRXErzrdqExAoUrRb0xfRp8p2A/4XmfilTtkDZ4cAAAAASUVORK5CYII= X-Face: -TR8(rDTHy/(xl?SfWd1|3:TTgDIatE^t'vop%*gVg[kn$t{EpK(P"VQ=~T2#ysNmJKN$"yTRLB4YQs$4{[.]Fc1)*O]3+XO^oXM>Q#b^ix,O)Zbn)q[y06$`e3?C)`CwR9y5riE=fv^X@x$y?D:XO6L&x4f-}}I4=VRNwiA^t1-ZrVK^07.Pi/57c_du'& X-PGP: 50751FF4 X-PGP-FP: AC1F 5F5C D418 88F8 CC84 5858 2060 4012 5075 1FF4 X-Hashcash: 1:20:161229:linux-kernel@vger.kernel.org::svt9aEtyjFlFgjeQ:00000000000000000000000000000000008ft X-Hashcash: 1:20:161229:m.szyprowski@samsung.com::jNZt4QEcBIo6bILH:00000000000000000000000000000000000000/ka X-Hashcash: 1:20:161229:akpm@linux-foundation.org::XBLa82t0cpFPJ1ch:0000000000000000000000000000000000000ciT X-Hashcash: 1:20:161229:gregkh@linuxfoundation.org::PSAqP2nI8EBWdXf/:0000000000000000000000000000000000012/l X-Hashcash: 1:20:161229:jaewon31.kim@samsung.com::hrWwoJKQr0AkpnZg:00000000000000000000000000000000000001SEx X-Hashcash: 1:20:161229:jaewon31.kim@gmail.com::afgj1wDdhjyWjMlJ:0000000000000000000000000000000000000001jPA X-Hashcash: 1:20:161229:linux-mm@kvack.org::HMTDWAoH/jAeqxMU:00000000000000000000000000000000000000000003WZc X-Hashcash: 1:20:161229:mhocko@kernel.org::Bh/Prl0zsuq4OyVu:0000000000000000000000000000000000000000000058VN X-Hashcash: 1:20:161229:labbott@redhat.com::n0Pijx6SZCBVKN82:00000000000000000000000000000000000000000007thK Date: Thu, 29 Dec 2016 15:20:07 +0100 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id uBTEKLqb016401 Content-Length: 3080 Lines: 101 On Thu, Dec 29 2016, Michal Hocko wrote: > On Thu 29-12-16 11:28:02, Jaewon Kim wrote: >> There are many reasons of CMA allocation failure such as EBUSY, ENOMEM, EINTR. >> This patch prints the error value and bitmap status to know available pages >> regarding fragmentation. >> >> This is an ENOMEM example with this patch. >> [ 11.616321] [2: Binder:711_1: 740] cma: cma_alloc: alloc failed, req-size: 256 pages, ret: -12 > >> [ 11.616365] [2: Binder:711_1: 740] number of available pages: 4+7+7+8+38+166+127=>357 pages, total: 2048 pages > > Could you be more specific why this part is useful? > >> Signed-off-by: Jaewon Kim >> --- >> mm/cma.c | 29 ++++++++++++++++++++++++++++- >> 1 file changed, 28 insertions(+), 1 deletion(-) >> >> diff --git a/mm/cma.c b/mm/cma.c >> index c960459..535aa39 100644 >> --- a/mm/cma.c >> +++ b/mm/cma.c >> @@ -369,7 +369,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) >> unsigned long start = 0; >> unsigned long bitmap_maxno, bitmap_no, bitmap_count; >> struct page *page = NULL; >> - int ret; >> + int ret = -ENOMEM; >> >> if (!cma || !cma->count) >> return NULL; >> @@ -427,6 +427,33 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) >> trace_cma_alloc(pfn, page, count, align); >> >> pr_debug("%s(): returned %p\n", __func__, page); >> + >> + if (ret != 0) { >> + unsigned int nr, nr_total = 0; >> + unsigned long next_set_bit; >> + >> + pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n", >> + __func__, count, ret); >> + mutex_lock(&cma->lock); >> + printk("number of available pages: "); >> + start = 0; >> + for (;;) { >> + bitmap_no = find_next_zero_bit(cma->bitmap, cma->count, start); >> + next_set_bit = find_next_bit(cma->bitmap, cma->count, bitmap_no); >> + nr = next_set_bit - bitmap_no; >> + if (bitmap_no >= cma->count) >> + break; Put this just next to ‘bitmap_no = …’ line. No need to call find_next_bit if we’re gonna break anyway. >> + if (nr_total == 0) >> + printk("%u", nr); >> + else >> + printk("+%u", nr); Perhaps also include location of the hole? Something like: pr_cont("%s%u@%u", nr_total ? "+" : "", nr, bitmap_no); >> + nr_total += nr; >> + start = bitmap_no + nr; >> + } >> + printk("=>%u pages, total: %lu pages\n", nr_total, cma->count); >> + mutex_unlock(&cma->lock); >> + } >> + I wonder if this should be wrapped in #ifdef CMA_DEBUG … #endif On one hand it’s relatively expensive (even involving mutex locking) on the other it’s in allocation failure path. >> return page; >> } >> >> -- >> 1.9.1 >> >> -- >> To unsubscribe, send a message with 'unsubscribe linux-mm' in >> the body to majordomo@kvack.org. For more info on Linux MM, >> see: http://www.linux-mm.org/ . >> Don't email: email@kvack.org > > -- > Michal Hocko > SUSE Labs -- Best regards ミハウ “????????????????86” ナザレヴイツ «If at first you don’t succeed, give up skydiving»