From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6C0FC4338F for ; Thu, 29 Jul 2021 09:29:02 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 4F3C861052 for ; Thu, 29 Jul 2021 09:29:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 4F3C861052 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bytedance.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 01BA36B0070; Thu, 29 Jul 2021 05:29:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F0F9F6B0071; Thu, 29 Jul 2021 05:29:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DD6DB6B0072; Thu, 29 Jul 2021 05:29:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0200.hostedemail.com [216.40.44.200]) by kanga.kvack.org (Postfix) with ESMTP id C321B6B0070 for ; Thu, 29 Jul 2021 05:29:01 -0400 (EDT) Received: from smtpin19.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 7CDDD180374C3 for ; Thu, 29 Jul 2021 09:29:01 +0000 (UTC) X-FDA: 78415101282.19.21965E0 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by imf04.hostedemail.com (Postfix) with ESMTP id E1B8C500A7E6 for ; Thu, 29 Jul 2021 09:29:00 +0000 (UTC) Received: by mail-pj1-f49.google.com with SMTP id mt6so9468473pjb.1 for ; Thu, 29 Jul 2021 02:29:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2Su0VFVFTdWpdLAS734Wj7JN2joCnRImQkjmBeHRcGw=; b=Mm0bGYj6/zbXmOrHkAVjtM11qQ3M/chM0vse5Hslve/QWFmKyfyICYhWL3BT2hx/Jo lOGR9ZsMGew7INrypS3uKTBqAUxFZLAlgwJWVAy6MeLdws6WhQBqj5mtKaSq0iK/vyMB j0PQxCdHntIUxePG/8zJzVfWMGkAdNo6uIAkTeLUChMsobrUMrNxGS57Fj546MJq6Zln adJvdzIF3G5hlLC+fD1uEx56nURRO9YJdcs2v4uvphig6pyHSr3B/qUQGwNsHiAgqFUb 4FR42rMO6lpqG+xPLhSjtQH06l70y+kl3W4FEp/pKMwdDKZ1XmHobV7jT7YvdKC0oyBd P7gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2Su0VFVFTdWpdLAS734Wj7JN2joCnRImQkjmBeHRcGw=; b=PT/QtF3G7uEttRoGlTo4H1tqR+y8I+CW+jtAGLuV23CDXIaJHKcB+Wi6ch3nPAV54n yTnkBzjcAyJb1dahpZnKoaEwu9SjtQiaA2A9Wt4h056ODDHoQTg6ffx+iBaRDuaHX5qO iuCfGQBJP2mHcj2/iVT+Q4K2ugtshaN23TQSeVU6vWprHDKcyhv888p1BoFaT4Rdx68W mz1dxtIuAwDUAYofAG85RjM1Ulvs0Qq6r5wLHh7hfIEnMGKg76VKAWbN4bvRIo+YiSEf g/mwqrmWECjp5MKrd4DSQ5SXO8+MAtVy0b52AIoCczmvu0SuhxjzYRZ4+IqmgxJs86Lj PHnA== X-Gm-Message-State: AOAM5337hAa/oxm3tqn4KtrwowGklMsdHNbzO4+3hp1Nen81iJ+2A3gp 2LuUNKJuDXzHbM6acjh9lkwWdg== X-Google-Smtp-Source: ABdhPJzlw1r4Pigt4TQxXfj0XMmgGNpRfR9b/xT71Yrj9/h4lENPsF8b7WzA9XQCx49BV4sNearpNA== X-Received: by 2002:a17:90a:5101:: with SMTP id t1mr14152738pjh.107.1627550939931; Thu, 29 Jul 2021 02:28:59 -0700 (PDT) Received: from C02FT5A6MD6R.tiktokd.org ([139.177.225.241]) by smtp.gmail.com with ESMTPSA id b15sm2962031pgm.15.2021.07.29.02.28.56 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 29 Jul 2021 02:28:59 -0700 (PDT) From: Gang Li To: rostedt@goodmis.org Cc: mingo@redhat.com, akpm@linux-foundation.org, vbabka@suse.cz, axelrasmussen@google.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Gang Li Subject: [PATCH 3/3] mm: mmap_lock: add ip to mmap_lock tracepoints Date: Thu, 29 Jul 2021 17:28:53 +0800 Message-Id: <20210729092853.38242-1-ligang.bdlg@bytedance.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) MIME-Version: 1.0 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E1B8C500A7E6 Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=bytedance-com.20150623.gappssmtp.com header.s=20150623 header.b=Mm0bGYj6; dmarc=pass (policy=none) header.from=bytedance.com; spf=pass (imf04.hostedemail.com: domain of ligang.bdlg@bytedance.com designates 209.85.216.49 as permitted sender) smtp.mailfrom=ligang.bdlg@bytedance.com X-Stat-Signature: y6q8p5y455961kh5m9eioto74jjti3z9 X-HE-Tag: 1627550940-659834 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The mmap_lock is acquired on most (all?) mmap / munmap / page fault operations, so a multi-threaded process which does a lot of these can experience significant contention. Sometimes we want to know where the lock is hold. And it's hard to locate without collecting ip. Here's an example: TP_printk("ip=3D%pS",ip) Log looks like this: "ip=3Ddo_user_addr_fault+0x274/0x640" We can find out who cause the contention amd make some improvements for it. Signed-off-by: Gang Li --- include/trace/events/mmap_lock.h | 27 +++++++++++++++++---------- mm/mmap_lock.c | 6 +++--- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/trace/events/mmap_lock.h b/include/trace/events/mmap= _lock.h index b9dd66f9c226..8913a9f85894 100644 --- a/include/trace/events/mmap_lock.h +++ b/include/trace/events/mmap_lock.h @@ -15,35 +15,39 @@ extern void trace_mmap_lock_unreg(void); =20 DECLARE_EVENT_CLASS(mmap_lock, =20 - TP_PROTO(struct mm_struct *mm, const char *memcg_path, bool write), + TP_PROTO(struct mm_struct *mm, const char *memcg_path, bool write, + unsigned long ip), =20 - TP_ARGS(mm, memcg_path, write), + TP_ARGS(mm, memcg_path, write, ip), =20 TP_STRUCT__entry( __field(struct mm_struct *, mm) __string(memcg_path, memcg_path) __field(bool, write) + __field(void *, ip) ), =20 TP_fast_assign( __entry->mm =3D mm; __assign_str(memcg_path, memcg_path); __entry->write =3D write; + __entry->ip =3D (void *)ip; ), =20 TP_printk( - "mm=3D%p memcg_path=3D%s write=3D%s", + "mm=3D%p memcg_path=3D%s write=3D%s ip=3D%pS", __entry->mm, __get_str(memcg_path), - __entry->write ? "true" : "false" - ) + __entry->write ? "true" : "false", + __entry->ip + ) ); =20 #define DEFINE_MMAP_LOCK_EVENT(name) = \ DEFINE_EVENT_FN(mmap_lock, name, \ TP_PROTO(struct mm_struct *mm, const char *memcg_path, \ - bool write), \ - TP_ARGS(mm, memcg_path, write), \ + bool write, unsigned long ip), \ + TP_ARGS(mm, memcg_path, write, ip), \ trace_mmap_lock_reg, trace_mmap_lock_unreg) =20 DEFINE_MMAP_LOCK_EVENT(mmap_lock_start_locking); @@ -52,14 +56,15 @@ DEFINE_MMAP_LOCK_EVENT(mmap_lock_released); TRACE_EVENT_FN(mmap_lock_acquire_returned, =20 TP_PROTO(struct mm_struct *mm, const char *memcg_path, bool write, - bool success), + unsigned long ip, bool success), =20 - TP_ARGS(mm, memcg_path, write, success), + TP_ARGS(mm, memcg_path, write, ip, success), =20 TP_STRUCT__entry( __field(struct mm_struct *, mm) __string(memcg_path, memcg_path) __field(bool, write) + __field(void *, ip) __field(bool, success) ), =20 @@ -67,14 +72,16 @@ TRACE_EVENT_FN(mmap_lock_acquire_returned, __entry->mm =3D mm; __assign_str(memcg_path, memcg_path); __entry->write =3D write; + __entry->ip =3D (void *)ip; __entry->success =3D success; ), =20 TP_printk( - "mm=3D%p memcg_path=3D%s write=3D%s success=3D%s", + "mm=3D%p memcg_path=3D%s write=3D%s ip=3D%pS success=3D%s", __entry->mm, __get_str(memcg_path), __entry->write ? "true" : "false", + __entry->ip, __entry->success ? "true" : "false" ), =20 diff --git a/mm/mmap_lock.c b/mm/mmap_lock.c index 1854850b4b89..f1100eae6f2f 100644 --- a/mm/mmap_lock.c +++ b/mm/mmap_lock.c @@ -227,20 +227,20 @@ static const char *get_mm_memcg_path(struct mm_stru= ct *mm) =20 void __mmap_lock_do_trace_start_locking(struct mm_struct *mm, bool write= ) { - TRACE_MMAP_LOCK_EVENT(start_locking, mm, write); + TRACE_MMAP_LOCK_EVENT(start_locking, mm, write, _RET_IP_); } EXPORT_SYMBOL(__mmap_lock_do_trace_start_locking); =20 void __mmap_lock_do_trace_acquire_returned(struct mm_struct *mm, bool wr= ite, bool success) { - TRACE_MMAP_LOCK_EVENT(acquire_returned, mm, write, success); + TRACE_MMAP_LOCK_EVENT(acquire_returned, mm, write, _RET_IP_, success); } EXPORT_SYMBOL(__mmap_lock_do_trace_acquire_returned); =20 void __mmap_lock_do_trace_released(struct mm_struct *mm, bool write) { - TRACE_MMAP_LOCK_EVENT(released, mm, write); + TRACE_MMAP_LOCK_EVENT(released, mm, write, _RET_IP_); } EXPORT_SYMBOL(__mmap_lock_do_trace_released); #endif /* CONFIG_TRACING */ --=20 2.20.1