Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp452660ybl; Sat, 18 Jan 2020 04:04:34 -0800 (PST) X-Google-Smtp-Source: APXvYqwDh4OwWbr9dL5RsdY9NJ3SvkXPqK3xvRH6sx0hrt362qJfvNUoVGcWQUqOhf4oX9QXQA26 X-Received: by 2002:aca:5487:: with SMTP id i129mr6573171oib.167.1579349074529; Sat, 18 Jan 2020 04:04:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579349074; cv=none; d=google.com; s=arc-20160816; b=q5itYawkMSB90ggADdl1b9wZi8V1V7cWUiRkc6YO8O7S9566EEMKayMOoWRhMwj1l2 9wBsYZviDeGsE1XDTpl4PdrwSpWKTffSSw6f8ELTAwUcyowx8nt5nciJh+0aupGxT1C9 RS8ywFupnRou11oALtUoXAMAydegigwWhudTevrONnq/CR3c0mwA2xhkPVJaUcl49otH yLfIMeY2p0nJHnOXRZQL24oduSE+WJYvtwFL8WUTA2sXokKXcCuVFO6Qktx1kiBxitRO z0BMMVBzqMZTHm4BtJQNj/bnRpihATPMlEsMf+PAUIWfN55LMgf+3YrUKTskLzsvTJcc 1j6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:date:from:dkim-signature; bh=VZj/+gTBYwih9w8p4CHvebReTfIMgw1NYGMhYLwgkjY=; b=HU3nMM0lbvmFCRMIdqI3AB8ZOGVG58U4ZKHH/uSqd+yCRvknxveyhNKTOZIGDTG4gK fLwwR63hzHiEVSlSw4PJXp4SucfQdjQnIuCHOWQKi5xCGUTLz+nWNIpcQ9mRnSEg+StI qbfQOufTaghID28a/bPvNmkQDt35yTxe9WHSaFinsaU58vnNatLEtNYh7xhi6u/4fp3k ddHBi4DRzisGmLjGiY3fWYTe5omfy2w5tA9VW4epzl3xiAjopiGf0tdzJ+HtaFGCQUNy 9uXhs066VCOHRI17Wjjbo+rqW4P/inqGU1fQKY7AZxJNyl0aqLdzE9pX1K7VYq0r8T/K fnKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Pqq9MNpc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r82si14051869oia.36.2020.01.18.04.04.21; Sat, 18 Jan 2020 04:04:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Pqq9MNpc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728855AbgARMBA (ORCPT + 99 others); Sat, 18 Jan 2020 07:01:00 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:45658 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727118AbgARMBA (ORCPT ); Sat, 18 Jan 2020 07:01:00 -0500 Received: by mail-lj1-f195.google.com with SMTP id j26so29150474ljc.12; Sat, 18 Jan 2020 04:00:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:date:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=VZj/+gTBYwih9w8p4CHvebReTfIMgw1NYGMhYLwgkjY=; b=Pqq9MNpc0mluCwwOKD2lqGkoDdsfpynn/xg1au7LAGAye67z/NsqeDuVDGrcgalaI+ 1OJYIYI/gtNkMK0cXvjAbF0QIEZgRsp6QxGRh6ZCTYAEvW2TFkFump0n2TCHIBrXfr/k EMfOxTDDaI0UZJHqQ1S+ONMQzww2ZXeLjJ0tnG5a9e2X7DJohIM1DcaF9jM6hgpBfwIl ROzG7rWE9ooOijOZ6yY0FnRajbAP0mt90NVoNkoD0LlBj2Gj8aA/AF2fYNTziMnVcrHH Li6pdXZr8DtBv4szeYINZobelo9rvUS7ac/qCHLI+VcilZnOh3LtdxxX2EmqJExrgQVz UrQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:date:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=VZj/+gTBYwih9w8p4CHvebReTfIMgw1NYGMhYLwgkjY=; b=LlAVNZ/+wSNPesJEakXNRg9RImGfYrjE3ffpt4aiJFkb+SbyXc6PQLzdxIVONiqs2l cncj7okWAu7nLfxIokkipRlKmNpsonOsv8Rl711Va+kJLjPJUXYk1gECRgcCNZ0oPtEw ZGni8xZOdPUJeRU8yV4QNiSN7yhZO8KvORMXEVJfKP1wtfV8Tt0QQ0yHm6NgZYQ7cqZR 1unlB+EBmmwK71UQqUBAB6ZyQ0FRpo7728NG+ipnHdJVLzpJ6+PcUat2esFqPotdSpgl 53O6oC7BrGRVAPiPZ3ghs706bHFcQ7hV8SP0z+fjsGKF4zDkEmUD30iY5lAsOpYL89IJ 9RnQ== X-Gm-Message-State: APjAAAU6uG3QGx7pSksSQ8YaE7JvhKVE0wz3LIXNjJt8kWF2qfgxnmid db5ptKylS4tzrHuVR1nQQurWSITMZ3E6bw== X-Received: by 2002:a2e:8053:: with SMTP id p19mr7936544ljg.263.1579348857779; Sat, 18 Jan 2020 04:00:57 -0800 (PST) Received: from pc636 (h5ef52e31.seluork.dyn.perspektivbredband.net. [94.245.46.49]) by smtp.gmail.com with ESMTPSA id m8sm13500659lfp.4.2020.01.18.04.00.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jan 2020 04:00:57 -0800 (PST) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Sat, 18 Jan 2020 13:00:49 +0100 To: "Joel Fernandes (Google)" Cc: linux-kernel@vger.kernel.org, urezki@gmail.com, Davidlohr Bueso , Josh Triplett , Lai Jiangshan , Mathieu Desnoyers , "Paul E. McKenney" , rcu@vger.kernel.org, Steven Rostedt Subject: Re: [PATCH 1/2] rcuperf: Add support to vary the slab object sizes Message-ID: <20200118120049.GA10134@pc636> References: <20200115224225.246061-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200115224225.246061-1-joel@joelfernandes.org> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, Joel. > This patch varies the allocated size of objects to be more realistic in > comparison to production workloads. > > Cc: urezki@gmail.com > Signed-off-by: Joel Fernandes (Google) > > --- > kernel/rcu/rcuperf.c | 48 +++++++++++++++++++++++++++++++++++++------- > 1 file changed, 41 insertions(+), 7 deletions(-) > > diff --git a/kernel/rcu/rcuperf.c b/kernel/rcu/rcuperf.c > index da94b89cd531..1fd0cc72022e 100644 > --- a/kernel/rcu/rcuperf.c > +++ b/kernel/rcu/rcuperf.c > @@ -87,6 +87,7 @@ torture_param(bool, shutdown, RCUPERF_SHUTDOWN, > torture_param(int, verbose, 1, "Enable verbose debugging printk()s"); > torture_param(int, writer_holdoff, 0, "Holdoff (us) between GPs, zero to disable"); > torture_param(int, kfree_rcu_test, 0, "Do we run a kfree_rcu() perf test?"); > +torture_param(bool, kfree_vary_obj_size, 0, "Vary the kfree_rcu object size"); > > static char *perf_type = "rcu"; > module_param(perf_type, charp, 0444); > @@ -599,17 +600,29 @@ static int kfree_nrealthreads; > static atomic_t n_kfree_perf_thread_started; > static atomic_t n_kfree_perf_thread_ended; > > -struct kfree_obj { > - char kfree_obj[8]; > - struct rcu_head rh; > -}; > +/* > + * Define a kfree_obj with size as the @size parameter + the size of rcu_head > + * (rcu_head is 16 bytes on 64-bit arch). > + */ > +#define DEFINE_KFREE_OBJ(size) \ > +struct kfree_obj_ ## size { \ > + char kfree_obj[size]; \ > + struct rcu_head rh; \ > +} > + > +/* This should goto the right sized slabs on both 32-bit and 64-bit arch */ > +DEFINE_KFREE_OBJ(16); // goes on kmalloc-32 slab > +DEFINE_KFREE_OBJ(32); // goes on kmalloc-64 slab > +DEFINE_KFREE_OBJ(64); // goes on kmalloc-96 slab > +DEFINE_KFREE_OBJ(96); // goes on kmalloc-128 slab > > static int > kfree_perf_thread(void *arg) > { > int i, loop = 0; > long me = (long)arg; > - struct kfree_obj *alloc_ptr; > + void *alloc_ptr; > + > u64 start_time, end_time; > > VERBOSE_PERFOUT_STRING("kfree_perf_thread task started"); > @@ -627,11 +640,32 @@ kfree_perf_thread(void *arg) > > do { > for (i = 0; i < kfree_alloc_num; i++) { > - alloc_ptr = kmalloc(sizeof(struct kfree_obj), GFP_KERNEL); > + int kfree_type = i % 4; > + > + // Allocate only kfree_obj_16 if rcuperf.kfree_vary_obj_size not passed. > + if (!kfree_vary_obj_size) > + kfree_type = 0; > + > + if (kfree_type == 0) > + alloc_ptr = kmalloc(sizeof(struct kfree_obj_16), GFP_KERNEL); > + else if (kfree_type == 1) > + alloc_ptr = kmalloc(sizeof(struct kfree_obj_32), GFP_KERNEL); > + else if (kfree_type == 2) > + alloc_ptr = kmalloc(sizeof(struct kfree_obj_64), GFP_KERNEL); > + else > + alloc_ptr = kmalloc(sizeof(struct kfree_obj_96), GFP_KERNEL); > + > if (!alloc_ptr) > return -ENOMEM; > > - kfree_rcu(alloc_ptr, rh); > + if (kfree_type == 0) > + kfree_rcu((struct kfree_obj_16 *)alloc_ptr, rh); > + else if (kfree_type == 1) > + kfree_rcu((struct kfree_obj_32 *)alloc_ptr, rh); > + else if (kfree_type == 2) > + kfree_rcu((struct kfree_obj_64 *)alloc_ptr, rh); > + else > + kfree_rcu((struct kfree_obj_96 *)alloc_ptr, rh); > } > > cond_resched(); > -- > 2.25.0.rc1.283.g88dfdc4193-goog > Good point and patch! Tested-by: Uladzislau Rezki (Sony) -- Vlad Rezki