From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755858AbcBCEkU (ORCPT ); Tue, 2 Feb 2016 23:40:20 -0500 Received: from mail-wm0-f52.google.com ([74.125.82.52]:37863 "EHLO mail-wm0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755852AbcBCEkS (ORCPT ); Tue, 2 Feb 2016 23:40:18 -0500 MIME-Version: 1.0 In-Reply-To: <569E5816.6000909@hpe.com> References: <1451549374-30875-1-git-send-email-ling.ma.program@gmail.com> <20160105211834.GR6344@twins.programming.kicks-ass.net> <20160105214227.3a2adcd2@lxorguk.ukuu.org.uk> <20160106081643.GS6344@twins.programming.kicks-ass.net> <20160106082106.GU6373@twins.programming.kicks-ass.net> <20160106112450.6c5ad08b@lxorguk.ukuu.org.uk> <20160112135016.247c6ca5@lxorguk.ukuu.org.uk> <569E5816.6000909@hpe.com> Date: Wed, 3 Feb 2016 12:40:17 +0800 Message-ID: Subject: Re: [RFC PATCH] alispinlock: acceleration from lock integration on multi-core platform From: Ling Ma To: Waiman Long Cc: One Thousand Gnomes , Peter Zijlstra , mingo@redhat.com, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, Ling Content-Type: multipart/mixed; boundary=047d7ba97222fbddfa052ad636c0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --047d7ba97222fbddfa052ad636c0 Content-Type: text/plain; charset=UTF-8 Longman, The attachment include user space code(thread.c), and kernel patch(ali_work_queue.patch) based on 4.3.0-rc4, we replaced all original spinlock (list_lock) in slab.h/c with the new mechanism. The thread.c in user space caused lots of hot kernel spinlock from __kmalloc and kfree, perf top -d1 shows ~25% before ali_work_queue.patch,after appending this patch , the synchronous operation consumption from __kmalloc and kfree is reduced from 25% to ~15% on Intel E5-2699V3 (we also observed the output from user space code (thread.c) is improved clearly) Peter, we will send the update version according to your comments. Thanks Ling 2016-01-19 23:36 GMT+08:00 Waiman Long : > On 01/19/2016 03:52 AM, Ling Ma wrote: >> >> Is it acceptable for performance improvement or more comments on this >> patch? >> >> Thanks >> Ling >> >> > > Your alispinlock patchset should also include a use case where the lock is > used by some code within the kernel with test that can show a performance > improvement so that the reviewers can independently try it out and play > around with it. The kernel community will not accept any patch without a use > case in the kernel. > > Your lock_test.tar file is not good enough as it is not a performance test > of the patch that you sent out. > > Cheers, > Longman --047d7ba97222fbddfa052ad636c0 Content-Type: application/x-bzip2; name="ali_work_queue.tar.bz2" Content-Disposition: attachment; filename="ali_work_queue.tar.bz2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ik6ch7q50 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 tbWa7W12yZm1gCH6f+LuSKcKEgdZ2TrA --047d7ba97222fbddfa052ad636c0--