From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 9 Oct 2017 17:40:56 +0200 From: Jan Kara To: Waiman Long Cc: Alexander Viro , Jan Kara , Jeff Layton , "J. Bruce Fields" , Tejun Heo , Christoph Lameter , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Ingo Molnar , Peter Zijlstra , Andi Kleen , Dave Chinner , Boqun Feng , Davidlohr Bueso Subject: Re: [PATCH v7 4/6] lib/dlock-list: Make sibling CPUs share the same linked list Message-ID: <20171009154056.GP17917@quack2.suse.cz> References: <1507229008-20569-1-git-send-email-longman@redhat.com> <1507229008-20569-5-git-send-email-longman@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1507229008-20569-5-git-send-email-longman@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: On Thu 05-10-17 14:43:26, Waiman Long wrote: > The dlock list needs one list for each of the CPUs available. However, > for sibling CPUs, they are sharing the L2 and probably L1 caches > too. As a result, there is not much to gain in term of avoiding > cacheline contention while increasing the cacheline footprint of the > L1/L2 caches as separate lists may need to be in the cache. > > This patch makes all the sibling CPUs share the same list, thus > reducing the number of lists that need to be maintained in each > dlock list without having any noticeable impact on performance. It > also improves dlock list iteration performance as fewer lists need > to be iterated. > > Signed-off-by: Waiman Long ... > @@ -118,7 +156,7 @@ bool dlock_lists_empty(struct dlock_list_heads *dlist) > { > int idx; > > - for (idx = 0; idx < nr_cpu_ids; idx++) > + for (idx = 0; idx < nr_dlock_lists; idx++) > if (!list_empty(&dlist->heads[idx].list)) > return false; > return true; > @@ -207,7 +245,7 @@ struct dlock_list_node *__dlock_list_next_list(struct dlock_list_iter *iter) > /* > * Try next list > */ > - if (++iter->index >= nr_cpu_ids) > + if (++iter->index >= nr_dlock_lists) > return NULL; /* All the entries iterated */ > > if (list_empty(&iter->head[iter->index].list)) Why these two do not need a similar treatment as alloc_dlist_heads()? Honza -- Jan Kara SUSE Labs, CR