From: Miao Xie <miaox@cn.fujitsu.com> To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Andrew Morton <akpm@linux-foundation.org>, "Theodore Ts'o" <tytso@mit.edu>, Andreas Dilger <adilger.kernel@dilg Cc: Linux Kernel <linux-kernel@vger.kernel.org>, Linux Btrfs <linux-btrfs@vger.kernel.org>, Linux Ext4 <linux-ext4@vger.kernel.org> Subject: [PATCH 3/3] x86_64/lib: improve the performance of memmove Date: Thu, 02 Sep 2010 13:46:25 +0800 [thread overview] Message-ID: <4C7F3A31.4070806@cn.fujitsu.com> (raw) This patch improved the performance of memmove on x86_64 by using mem_copy_bwd() instead of byte copy. But x86_64's memcpy is quite fast, so I didn't change it. I have tested this patchset by doing 500 bytes memory copy for 50000 times on my x86_64 box: memmove 2.6.36-rc1 2s 610445us 2.6.36-rc1 + patch 0s 257358us After appling this patchset, the performance of the file creation and deletion on some filesystem become better. I have tested it with the following benchmark tool on my x86_64 box. http://marc.info/?l=linux-btrfs&m=128212635122920&q=p3 Test steps: # ./creat_unlink 50000 The result(Total time): Ext4: 2.6.36-rc1 2.6.36-rc1 + patchset file creation 0.771240 0.698983 9.4%UP file deletion 0.459065 0.425530 7.3%UP Btrfs: 2.6.36-rc1 2.6.36-rc1 + patchset file creation 0.966807 0.947592 1.9%UP file deletion 1.355671 1.217787 10.2%UP Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> --- arch/x86/lib/memmove_64.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/lib/memmove_64.c b/arch/x86/lib/memmove_64.c index 0a33909..3640232 100644 --- a/arch/x86/lib/memmove_64.c +++ b/arch/x86/lib/memmove_64.c @@ -4,17 +4,17 @@ #define _STRING_C #include <linux/string.h> #include <linux/module.h> +#include <linux/memcopy.h> #undef memmove void *memmove(void *dest, const void *src, size_t count) { - if (dest < src) { + if (dest - src >= count) { /* *Unsigned* compare! */ return memcpy(dest, src, count); } else { - char *p = dest + count; - const char *s = src + count; - while (count--) - *--p = *--s; + unsigned long dstp = (unsigned long)dest; + unsigned long srcp = (unsigned long)src; + mem_copy_bwd(dstp, srcp, count); } return dest; } -- 1.7.0.1
WARNING: multiple messages have this Message-ID (diff)
From: Miao Xie <miaox@cn.fujitsu.com> To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Andrew Morton <akpm@linux-foundation.org>, "Theodore Ts'o" <tytso@mit.edu>, Andreas Dilger <adilger.kernel@dilger.ca>, Chris Mason <chris.mason@oracle.com>, Yan Zheng <zheng.yan@oracle.com> Cc: Linux Kernel <linux-kernel@vger.kernel.org>, Linux Btrfs <linux-btrfs@vger.kernel.org>, Linux Ext4 <linux-ext4@vger.kernel.org> Subject: [PATCH 3/3] x86_64/lib: improve the performance of memmove Date: Thu, 02 Sep 2010 13:46:25 +0800 [thread overview] Message-ID: <4C7F3A31.4070806@cn.fujitsu.com> (raw) This patch improved the performance of memmove on x86_64 by using mem_copy_bwd() instead of byte copy. But x86_64's memcpy is quite fast, so I didn't change it. I have tested this patchset by doing 500 bytes memory copy for 50000 times on my x86_64 box: memmove 2.6.36-rc1 2s 610445us 2.6.36-rc1 + patch 0s 257358us After appling this patchset, the performance of the file creation and deletion on some filesystem become better. I have tested it with the following benchmark tool on my x86_64 box. http://marc.info/?l=linux-btrfs&m=128212635122920&q=p3 Test steps: # ./creat_unlink 50000 The result(Total time): Ext4: 2.6.36-rc1 2.6.36-rc1 + patchset file creation 0.771240 0.698983 9.4%UP file deletion 0.459065 0.425530 7.3%UP Btrfs: 2.6.36-rc1 2.6.36-rc1 + patchset file creation 0.966807 0.947592 1.9%UP file deletion 1.355671 1.217787 10.2%UP Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> --- arch/x86/lib/memmove_64.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/lib/memmove_64.c b/arch/x86/lib/memmove_64.c index 0a33909..3640232 100644 --- a/arch/x86/lib/memmove_64.c +++ b/arch/x86/lib/memmove_64.c @@ -4,17 +4,17 @@ #define _STRING_C #include <linux/string.h> #include <linux/module.h> +#include <linux/memcopy.h> #undef memmove void *memmove(void *dest, const void *src, size_t count) { - if (dest < src) { + if (dest - src >= count) { /* *Unsigned* compare! */ return memcpy(dest, src, count); } else { - char *p = dest + count; - const char *s = src + count; - while (count--) - *--p = *--s; + unsigned long dstp = (unsigned long)dest; + unsigned long srcp = (unsigned long)src; + mem_copy_bwd(dstp, srcp, count); } return dest; } -- 1.7.0.1
next reply other threads:[~2010-09-02 5:46 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-09-02 5:46 Miao Xie [this message] 2010-09-02 5:46 ` [PATCH 3/3] x86_64/lib: improve the performance of memmove Miao Xie -- strict thread matches above, loose matches on Subject: below -- 2010-09-01 10:36 Miao Xie 2010-09-01 10:36 Miao Xie 2010-09-01 10:36 Miao Xie
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=4C7F3A31.4070806@cn.fujitsu.com \ --to=miaox@cn.fujitsu.com \ --cc=adilger.kernel@dilg \ --cc=akpm@linux-foundation.org \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=tytso@mit.edu \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.