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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7B3D0C00A8F for ; Tue, 24 Oct 2023 08:34:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1A4776B01A7; Tue, 24 Oct 2023 04:34:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 12B406B01A8; Tue, 24 Oct 2023 04:34:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE68A6B01A9; Tue, 24 Oct 2023 04:34:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id DB42E6B01A7 for ; Tue, 24 Oct 2023 04:34:05 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id BC07FB6204 for ; Tue, 24 Oct 2023 08:34:05 +0000 (UTC) X-FDA: 81379692450.16.6297C06 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by imf09.hostedemail.com (Postfix) with ESMTP id EF2DA140008 for ; Tue, 24 Oct 2023 08:34:03 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Lwd93EhB; spf=pass (imf09.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.210.170 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1698136444; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dqxLSD3NSY9H2G/bHFoEqq0XRO6Fu01n0ZJ8sfPfXdw=; b=QwqsKLAiMvomAN0vTsqdIWiPf38jtNbDJ2kONRioKd787l7hJlbCs1PsVJguaQhFwxYWNh haKkLzjToLv1jeakrsS/Ho6tyb/TUcMK8PUqGkaAHGxzEzDV9piBakuQ+CC0KLNUz2bvBp bLxZzd+J0GWDY/a4izDNw6k9Z0JOVCg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1698136444; a=rsa-sha256; cv=none; b=sfu3nl2UlvKYF/HKceed4SenbXoA2XRwEIyekBBOidGXpcukogE0RSopq/7Y4D2V+7thJJ 0zSO3k6PWfilGRS4mZm0f1VbxhZEAUEGHMX3PftN9Qq9F8QMMGln1CU0tfmej/iyQXtbAy YXPU3ytAIXx+e5W9HDITM8YyrMBEVV0= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Lwd93EhB; spf=pass (imf09.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.210.170 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-6b3c2607d9bso3468859b3a.1 for ; Tue, 24 Oct 2023 01:34:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1698136443; x=1698741243; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dqxLSD3NSY9H2G/bHFoEqq0XRO6Fu01n0ZJ8sfPfXdw=; b=Lwd93EhBwTRM/N5sMbIpi9y6kTgVYv+9amz8yRDLdmhVxYHNgMwUoRfqd/5QYtRhud eE+LSNGE/ffYWh4ZXjRzai1EheZ+LbmgOUUnXB90ylzyMbW6WoM31i3a5ioV1TLz1JI4 HOG5S+Rehp9ZfFas+QpV/ROne/9nZxqforJADHu6mXOPZpeJrjm4pfQXglX+G1aiaGAS Y2ZKrT+bcM+OIXvpO6s8BSXDQ2dpX1MhVYX3GqRG1z+ScIarIiCFA462u9n21h0fVa6e zuWYdk8lSd/o79rmsB15ov9O2st0mWkeasPjitRR2tw5FMZo1LVDGLFh7WET9mTJ1tTq l+Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698136443; x=1698741243; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dqxLSD3NSY9H2G/bHFoEqq0XRO6Fu01n0ZJ8sfPfXdw=; b=F9+Jeg1GvikJAgXdSfPcHjguB6auHL2WKTW21podgzeJYDWbktz1Fjpru7GzHHqi9t TzYB9RFCXf7wOO0gew3eRO/uNb1gKrLtR56zCrTFChEzR30h5or3PlAH1oMx6uEj5cPg ielhgCsBob5g4Gx7z1v8Esp8Eh6Wam8AcaV6FOs5GUTflL74z0yijnNc3eJGSGmxfa4M GPhmo4dhTyrrw5p42/T7gp1YJMK7IGvRRJu6kfJ98xUMtOMizaXcGXeg1utVAobiM1Wg j3K6G2u7ahHvyqbQOlw0k2EbL8V7EDPcu85b6Scu5sIy9sds+NH5RJH3Bf5Qr021DKdl x2IA== X-Gm-Message-State: AOJu0Yy2quyt7WJr9rcB2UNIMfkZKXWOFRv+asVrqV8YHstU4wIJWfR9 oxygDlzv8QRJ3VX4BX7RWqX1RA== X-Google-Smtp-Source: AGHT+IF1zVX8K4BNNs+Nh2lZHYWJzbNrBQiw86QsHKAu8PhANHP4KGmdCF4Yx599tMqieIVTxj5igQ== X-Received: by 2002:a05:6a21:7189:b0:17b:4b61:a907 with SMTP id wq9-20020a056a21718900b0017b4b61a907mr1679463pzb.50.1698136442907; Tue, 24 Oct 2023 01:34:02 -0700 (PDT) Received: from GL4FX4PXWL.bytedance.net ([203.208.167.147]) by smtp.gmail.com with ESMTPSA id y21-20020aa79af5000000b0068be348e35fsm7236977pfp.166.2023.10.24.01.33.56 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 24 Oct 2023 01:34:02 -0700 (PDT) From: Peng Zhang To: Liam.Howlett@oracle.com, corbet@lwn.net, akpm@linux-foundation.org, willy@infradead.org, brauner@kernel.org, surenb@google.com, michael.christie@oracle.com, mjguzik@gmail.com, mathieu.desnoyers@efficios.com, npiggin@gmail.com, peterz@infradead.org, oliver.sang@intel.com, mst@redhat.com Cc: zhangpeng.00@bytedance.com, maple-tree@lists.infradead.org, linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v6 08/10] maple_tree: Update check_forking() and bench_forking() Date: Tue, 24 Oct 2023 16:32:56 +0800 Message-Id: <20231024083258.65750-9-zhangpeng.00@bytedance.com> X-Mailer: git-send-email 2.39.3 (Apple Git-145) In-Reply-To: <20231024083258.65750-1-zhangpeng.00@bytedance.com> References: <20231024083258.65750-1-zhangpeng.00@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: EF2DA140008 X-Rspam-User: X-Stat-Signature: j5bjc837fbm8f59pqfrcrbjzts3rqzj6 X-Rspamd-Server: rspam03 X-HE-Tag: 1698136443-959779 X-HE-Meta: U2FsdGVkX1/Gp2dF/cFLRTtIQPf+27vN7+uWfrqN7jn3aIRdjrxP76Px0MwJiXSFECFcvwN/vZn5Oijp5Aw+5+7wXhAKTfuvtWPzWFecc7NX8RoNbayZevP+42wbFPJnsQ7uIzbv/MDLlhcK73hScIAdwoHX9YCcA3DB1XAEbj8V5p5exf6JG1cvxRVJGh1ARspWRIi8YkaOZWRO+7+c6SB/pZFt0ccia1IDkr8YeZHuqd53wqAiRqEe8W/vdLFnle21uVVqBu5BIYYEz28LeYFblJzIqs9sgs0wVpmpFoSzfuqre/HHcYNP7mMEn0gp4t5KzgRRUWLsIejmUcuIUA5Ss+g5tEK+//1IjyuW/UOsweD+7mwkYjcRBul7IQb8F1PStKOfP2HDeF3XHI/Kszctu5oiScfp41p7Wl2ZXviAKYfCyJZ+U8xkn4m0vjtha6snbX/yZmfUi7g+CGK21UDtBLgw9BQM7QZ3JEkk3wS6MIKqfNOgVMOpwSkzrhe4ob93YR89eIFnkdHgmZe6Y59kwejuAmikkgHlViWUYkoJegbYOqHhtDN0opQyst0JnyhyIk1iIOTCafl7LcDF1wK7k92yxUcgaTr5Nh1o/CXQD4UI1I3Ty+TYhn8E6VapksFsy+v2JxyqGVfyXaRk5iHsJ/RiH8qoIMvOd4gGdBNlxza/Q3vQrlcdROkhJpbJwbHgWaYDLXTSs+8QBwIcmejTwnm78Em+u5I0IG0UwJk6UKpoeFmh0Jvwj1GYToMfL5ivde2fh5GsaxmzeUrtaYmYLw8HT4uSRjyitfO5wD5Mj7S+4iFJNx4RAORz9v+pmzl2e+c99IqiWdDZRgkDLCp3tm5z6ASRt21zVMQ9vc1pVly2yX6KdegJmOF8d8BgufjB07f/k1Pp2ORpA07ldzlVx5lQYFsXWT9CCxvRwa9oW+kwL1KJtgQwmdI10rfUNjn7RVbECVov3EJObas jmdk72OT O3dnQc6nQXU+d+B5YatMR3ZE65chANGdD1e41NZmUB50Rgff4iudZfjVV9Jfnl5G/P0+RYBZcxRkBMVFnGKaAPX69C3+TSsnrXzuZDUqMU0W4pOp6FGBbjtR9i/q6/WMWTTGWlT9w8Rto4Iqtn9FPTRR8d46jkIWxOFYcpJbYfexE8cN+Dq2t/x3DkRk23ayfU4JPI31MMqZ5m9KQJyGMv4dsfVFMqq/tmVMDuH8iUlVsCiRWflFC8PkrFkbql/VC+bDGvpiIFa/gOVUSpNPBTTij0m5WLEM4aqGl6TKqPV36g0mUNmkgRz7eITFwJUe2pgRlYT+XCwZ1ffLkNDFWR6poHPxD7gGhuxUkusdH2mL8GNlHjPOXVguskKkZ/EKLTyLdVPFh6dNbussE909D/51JqedHQsQA/emmQ/wz7wKH5h4EpkerWSOF+LHNnBGB7DQV1HdHtjsEkoqSQTwTl1+WSA== 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: List-Subscribe: List-Unsubscribe: Updated check_forking() and bench_forking() to use __mt_dup() to duplicate maple tree. Signed-off-by: Peng Zhang --- lib/test_maple_tree.c | 117 ++++++++++++++++++------------------ tools/include/linux/rwsem.h | 4 ++ 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/lib/test_maple_tree.c b/lib/test_maple_tree.c index de470950714f..3e4597fb49d3 100644 --- a/lib/test_maple_tree.c +++ b/lib/test_maple_tree.c @@ -1834,47 +1834,48 @@ static noinline void __init bench_mas_prev(struct maple_tree *mt) } #endif /* check_forking - simulate the kernel forking sequence with the tree. */ -static noinline void __init check_forking(struct maple_tree *mt) +static noinline void __init check_forking(void) { - - struct maple_tree newmt; - int i, nr_entries = 134; + struct maple_tree mt, newmt; + int i, nr_entries = 134, ret; void *val; - MA_STATE(mas, mt, 0, 0); - MA_STATE(newmas, mt, 0, 0); - struct rw_semaphore newmt_lock; + MA_STATE(mas, &mt, 0, 0); + MA_STATE(newmas, &newmt, 0, 0); + struct rw_semaphore mt_lock, newmt_lock; + init_rwsem(&mt_lock); init_rwsem(&newmt_lock); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); + mt_init_flags(&mt, MT_FLAGS_ALLOC_RANGE | MT_FLAGS_LOCK_EXTERN); + mt_set_external_lock(&mt, &mt_lock); - mt_set_non_kernel(99999); mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE | MT_FLAGS_LOCK_EXTERN); mt_set_external_lock(&newmt, &newmt_lock); - newmas.tree = &newmt; - mas_reset(&newmas); - mas_reset(&mas); - down_write(&newmt_lock); - mas.index = 0; - mas.last = 0; - if (mas_expected_entries(&newmas, nr_entries)) { + + down_write(&mt_lock); + for (i = 0; i <= nr_entries; i++) { + mas_set_range(&mas, i*10, i*10 + 5); + mas_store_gfp(&mas, xa_mk_value(i), GFP_KERNEL); + } + + down_write_nested(&newmt_lock, SINGLE_DEPTH_NESTING); + ret = __mt_dup(&mt, &newmt, GFP_KERNEL); + if (ret) { pr_err("OOM!"); BUG_ON(1); } - rcu_read_lock(); - mas_for_each(&mas, val, ULONG_MAX) { - newmas.index = mas.index; - newmas.last = mas.last; + + mas_set(&newmas, 0); + mas_for_each(&newmas, val, ULONG_MAX) mas_store(&newmas, val); - } - rcu_read_unlock(); + mas_destroy(&newmas); + mas_destroy(&mas); mt_validate(&newmt); - mt_set_non_kernel(0); __mt_destroy(&newmt); + __mt_destroy(&mt); up_write(&newmt_lock); + up_write(&mt_lock); } static noinline void __init check_iteration(struct maple_tree *mt) @@ -1977,49 +1978,51 @@ static noinline void __init check_mas_store_gfp(struct maple_tree *mt) } #if defined(BENCH_FORK) -static noinline void __init bench_forking(struct maple_tree *mt) +static noinline void __init bench_forking(void) { - - struct maple_tree newmt; - int i, nr_entries = 134, nr_fork = 80000; + struct maple_tree mt, newmt; + int i, nr_entries = 134, nr_fork = 80000, ret; void *val; - MA_STATE(mas, mt, 0, 0); - MA_STATE(newmas, mt, 0, 0); - struct rw_semaphore newmt_lock; + MA_STATE(mas, &mt, 0, 0); + MA_STATE(newmas, &newmt, 0, 0); + struct rw_semaphore mt_lock, newmt_lock; + init_rwsem(&mt_lock); init_rwsem(&newmt_lock); - mt_set_external_lock(&newmt, &newmt_lock); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); + mt_init_flags(&mt, MT_FLAGS_ALLOC_RANGE | MT_FLAGS_LOCK_EXTERN); + mt_set_external_lock(&mt, &mt_lock); + + down_write(&mt_lock); + for (i = 0; i <= nr_entries; i++) { + mas_set_range(&mas, i*10, i*10 + 5); + mas_store_gfp(&mas, xa_mk_value(i), GFP_KERNEL); + } for (i = 0; i < nr_fork; i++) { - mt_set_non_kernel(99999); - mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); - newmas.tree = &newmt; - mas_reset(&newmas); - mas_reset(&mas); - mas.index = 0; - mas.last = 0; - rcu_read_lock(); - down_write(&newmt_lock); - if (mas_expected_entries(&newmas, nr_entries)) { - printk("OOM!"); + mt_init_flags(&newmt, + MT_FLAGS_ALLOC_RANGE | MT_FLAGS_LOCK_EXTERN); + mt_set_external_lock(&newmt, &newmt_lock); + + down_write_nested(&newmt_lock, SINGLE_DEPTH_NESTING); + ret = __mt_dup(&mt, &newmt, GFP_KERNEL); + if (ret) { + pr_err("OOM!"); BUG_ON(1); } - mas_for_each(&mas, val, ULONG_MAX) { - newmas.index = mas.index; - newmas.last = mas.last; + + mas_set(&newmas, 0); + mas_for_each(&newmas, val, ULONG_MAX) mas_store(&newmas, val); - } + mas_destroy(&newmas); - rcu_read_unlock(); mt_validate(&newmt); - mt_set_non_kernel(0); __mt_destroy(&newmt); up_write(&newmt_lock); } + mas_destroy(&mas); + __mt_destroy(&mt); + up_write(&mt_lock); } #endif @@ -3615,9 +3618,7 @@ static int __init maple_tree_seed(void) #endif #if defined(BENCH_FORK) #define BENCH - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - bench_forking(&tree); - mtree_destroy(&tree); + bench_forking(); goto skip; #endif #if defined(BENCH_MT_FOR_EACH) @@ -3650,9 +3651,7 @@ static int __init maple_tree_seed(void) check_iteration(&tree); mtree_destroy(&tree); - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - check_forking(&tree); - mtree_destroy(&tree); + check_forking(); mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); check_mas_store_gfp(&tree); diff --git a/tools/include/linux/rwsem.h b/tools/include/linux/rwsem.h index 83971b3cbfce..f8bffd4a987c 100644 --- a/tools/include/linux/rwsem.h +++ b/tools/include/linux/rwsem.h @@ -37,4 +37,8 @@ static inline int up_write(struct rw_semaphore *sem) { return pthread_rwlock_unlock(&sem->lock); } + +#define down_read_nested(sem, subclass) down_read(sem) +#define down_write_nested(sem, subclass) down_write(sem) + #endif /* _TOOLS_RWSEM_H */ -- 2.20.1