From nobody Fri May 8 09:57:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 21FC9C433EF for ; Fri, 6 May 2022 19:29:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1390848AbiEFTdP (ORCPT ); Fri, 6 May 2022 15:33:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236285AbiEFTdN (ORCPT ); Fri, 6 May 2022 15:33:13 -0400 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BF57F6D868 for ; Fri, 6 May 2022 12:29:28 -0700 (PDT) Received: by mail-lj1-x22c.google.com with SMTP id m23so10387642ljb.8 for ; Fri, 06 May 2022 12:29:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz-org.20210112.gappssmtp.com; s=20210112; h=message-id:date:mime-version:user-agent:from:subject:to:cc :references:content-language:in-reply-to:content-transfer-encoding; bh=KWAb658hWnEyrNgr/yyrfE4nucb98F+3qRmQt1CMXNA=; b=G/TjzTQMF1GsQTZOCwfujliBF5HfJ5GxX8JkT7vDeyvg5KUQUOMV7XEtC6MmaPQGPx vhCqL1NN0ajISS2f5/HLS0G4JOZ6J0ehLRpNWgpeo3/byghb7omWCXJKirrgPdRi4h+G elmvcOwiVB0KrZMyC6FV+JiyRVKQY667j3Vl70wZnt6RZJwD7IIHdFX0mrzOo/FuDgz5 /ViZkoq02gVCwy3ERveiYb6XZe0GEe1DdKy2aiPGKGAUo38kAuG+rBL50vxkpDyaMyos G9bVpgU0U8+7maS6R2RLUVPa1mK/ghZnh2yhqf+bP6IvFBrl9Ll2C1tJYNMQDzvMvr82 tMrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:cc:references:content-language:in-reply-to :content-transfer-encoding; bh=KWAb658hWnEyrNgr/yyrfE4nucb98F+3qRmQt1CMXNA=; b=NTTsTdmSl79WcN5XkXDeAvl+mz+ckwPQxzp7m66+zenaiDYUkRCCfRf29cJ2tsAece yWKErHvKmIWY1tSGgzNgJc41uisYEMUcpS6/tloI33sqfwod4k+VG90wGMJ/QcWdsXcg 6DfjQkwRUgyef5h/+eaCXf3/bNke/s9xafmuOMr7jA03HiervOkFF6RL173knwAE+6PV bMvE4HFPetPpWMztFZN65pouVKDfWzZ2VPwXgrqFnnlEBgxc4pAL8EKNXhXVDEmsXoJk 41EdNVKEQQS1UDrH0X9hAVU0o2ACqZVZcpqCQa0mF4n7VLNow6pQrPoNDlyoVPS/wplI FTXw== X-Gm-Message-State: AOAM533p3X3rnZTOpgduw6qjj43W6699wNGSzikLA8YTwNDcGTNfprnJ rAS7BFbUuqbTL3ANINrDPEAH4PFf+JUBc8Dz X-Google-Smtp-Source: ABdhPJyWWGiCkdIxMCIxqsLpBldxBZhSAlwBUjCRBsmjDFAzoM8XzNWYWeUahljwmbUXpjrOAeyuEg== X-Received: by 2002:a2e:a794:0:b0:250:5de1:1ec5 with SMTP id c20-20020a2ea794000000b002505de11ec5mr2859520ljf.270.1651865367120; Fri, 06 May 2022 12:29:27 -0700 (PDT) Received: from [192.168.1.65] ([46.188.121.177]) by smtp.gmail.com with ESMTPSA id u24-20020a196a18000000b0047255d21180sm791507lfu.175.2022.05.06.12.29.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 06 May 2022 12:29:26 -0700 (PDT) Message-ID: Date: Fri, 6 May 2022 22:29:25 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 From: Vasily Averin Subject: [PATCH v2] percpu: improve percpu_alloc_percpu event trace To: Shakeel Butt , Steven Rostedt , Ingo Molnar Cc: kernel@openvz.org, linux-kernel@vger.kernel.org, Roman Gushchin , Vlastimil Babka , Michal Hocko , cgroups@vger.kernel.org, Andrew Morton , Dennis Zhou , Tejun Heo , Christoph Lameter , linux-mm@kvack.org References: <2b388d09-940e-990f-1f8a-2fdaa9210fa0@openvz.org> Content-Language: en-US In-Reply-To: <2b388d09-940e-990f-1f8a-2fdaa9210fa0@openvz.org> Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Added call_site, bytes_alloc and gfp_flags fields to the output of the percpu_alloc_percpu ftrace event: mkdir-4393 [001] 169.334788: percpu_alloc_percpu: call_site=3Dmem_cgroup_css_alloc+0xa6 reserved=3D0 is_atomic=3D0 size=3D24= 08 align=3D8 base_addr=3D0xffffc7117fc00000 off=3D402176 ptr=3D0x3dc867a62300 bytes_al= loc=3D14448 gfp_flags=3DGFP_KERNEL_ACCOUNT This is required to track memcg-accounted percpu allocations. Signed-off-by: Vasily Averin Acked-by: Roman Gushchin --- v2: added call_site, improved patch description --- include/trace/events/percpu.h | 23 +++++++++++++++++------ mm/percpu-internal.h | 8 ++++---- mm/percpu.c | 5 +++-- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/include/trace/events/percpu.h b/include/trace/events/percpu.h index df112a64f6c9..e989cefc0def 100644 --- a/include/trace/events/percpu.h +++ b/include/trace/events/percpu.h @@ -6,15 +6,20 @@ #define _TRACE_PERCPU_H =20 #include +#include =20 TRACE_EVENT(percpu_alloc_percpu, =20 - TP_PROTO(bool reserved, bool is_atomic, size_t size, - size_t align, void *base_addr, int off, void __percpu *ptr), + TP_PROTO(unsigned long call_site, + bool reserved, bool is_atomic, size_t size, + size_t align, void *base_addr, int off, + void __percpu *ptr, size_t bytes_alloc, gfp_t gfp_flags), =20 - TP_ARGS(reserved, is_atomic, size, align, base_addr, off, ptr), + TP_ARGS(call_site, reserved, is_atomic, size, align, base_addr, off, + ptr, bytes_alloc, gfp_flags), =20 TP_STRUCT__entry( + __field( unsigned long, call_site ) __field( bool, reserved ) __field( bool, is_atomic ) __field( size_t, size ) @@ -22,9 +27,11 @@ TRACE_EVENT(percpu_alloc_percpu, __field( void *, base_addr ) __field( int, off ) __field( void __percpu *, ptr ) + __field( size_t, bytes_alloc ) + __field( gfp_t, gfp_flags ) ), - TP_fast_assign( + __entry->call_site =3D call_site; __entry->reserved =3D reserved; __entry->is_atomic =3D is_atomic; __entry->size =3D size; @@ -32,12 +39,16 @@ TRACE_EVENT(percpu_alloc_percpu, __entry->base_addr =3D base_addr; __entry->off =3D off; __entry->ptr =3D ptr; + __entry->bytes_alloc =3D bytes_alloc; + __entry->gfp_flags =3D gfp_flags; ), =20 - TP_printk("reserved=3D%d is_atomic=3D%d size=3D%zu align=3D%zu base_addr= =3D%p off=3D%d ptr=3D%p", + TP_printk("call_site=3D%pS reserved=3D%d is_atomic=3D%d size=3D%zu align= =3D%zu base_addr=3D%p off=3D%d ptr=3D%p bytes_alloc=3D%zu gfp_flags=3D%s", + (void *)__entry->call_site, __entry->reserved, __entry->is_atomic, __entry->size, __entry->align, - __entry->base_addr, __entry->off, __entry->ptr) + __entry->base_addr, __entry->off, __entry->ptr, + __entry->bytes_alloc, show_gfp_flags(__entry->gfp_flags)) ); =20 TRACE_EVENT(percpu_free_percpu, diff --git a/mm/percpu-internal.h b/mm/percpu-internal.h index 411d1593ef23..70b1ea23f4d2 100644 --- a/mm/percpu-internal.h +++ b/mm/percpu-internal.h @@ -113,7 +113,6 @@ static inline int pcpu_chunk_map_bits(struct pcpu_chunk= *chunk) return pcpu_nr_pages_to_map_bits(chunk->nr_pages); } =20 -#ifdef CONFIG_MEMCG_KMEM /** * pcpu_obj_full_size - helper to calculate size of each accounted object * @size: size of area to allocate in bytes @@ -123,13 +122,14 @@ static inline int pcpu_chunk_map_bits(struct pcpu_chu= nk *chunk) */ static inline size_t pcpu_obj_full_size(size_t size) { - size_t extra_size; + size_t extra_size =3D 0; =20 - extra_size =3D size / PCPU_MIN_ALLOC_SIZE * sizeof(struct obj_cgroup *); +#ifdef CONFIG_MEMCG_KMEM + extra_size +=3D size / PCPU_MIN_ALLOC_SIZE * sizeof(struct obj_cgroup *); +#endif =20 return size * num_possible_cpus() + extra_size; } -#endif /* CONFIG_MEMCG_KMEM */ =20 #ifdef CONFIG_PERCPU_STATS =20 diff --git a/mm/percpu.c b/mm/percpu.c index ea28db283044..3633eeefaa0d 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -1884,8 +1884,9 @@ static void __percpu *pcpu_alloc(size_t size, size_t = align, bool reserved, ptr =3D __addr_to_pcpu_ptr(chunk->base_addr + off); kmemleak_alloc_percpu(ptr, size, gfp); =20 - trace_percpu_alloc_percpu(reserved, is_atomic, size, align, - chunk->base_addr, off, ptr); + trace_percpu_alloc_percpu(_RET_IP_, reserved, is_atomic, size, align, + chunk->base_addr, off, ptr, + pcpu_obj_full_size(size), gfp); =20 pcpu_memcg_post_alloc_hook(objcg, chunk, off, size); =20 --=20 2.31.1