linux/arch/x86
Salman Qazi 30d697fa3a x86: fix performance regression in write() syscall
While the introduction of __copy_from_user_nocache (see commit:
0812a579c9) may have been an improvement
for sufficiently large writes, there is evidence to show that it is
deterimental for small writes.  Unixbench's fstime test gives the
following results for 256 byte writes with MAX_BLOCK of 2000:

    2.6.29-rc6 ( 5 samples, each in KB/sec ):
    283750, 295200, 294500, 293000, 293300

    2.6.29-rc6 + this patch (5 samples, each in KB/sec):
    313050, 3106750, 293350, 306300, 307900

    2.6.18
    395700, 342000, 399100, 366050, 359850

    See w_test() in src/fstime.c in unixbench version 4.1.0.  Basically, the above test
    consists of counting how much we can write in this manner:

    alarm(10);
    while (!sigalarm) {
            for (f_blocks = 0; f_blocks < 2000; ++f_blocks) {
                   write(f, buf, 256);
            }
            lseek(f, 0L, 0);
    }

Note, there are other components to the write syscall regression
that are not addressed here.

Signed-off-by: Salman Qazi <sqazi@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-02-24 17:16:36 +01:00
..
boot x86: compressed head_32 - use ENTRY,ENDPROC macros 2009-02-19 17:13:01 +01:00
configs Merge branches 'x86/acpi', 'x86/asm', 'x86/cpudetect', 'x86/crashdump', 'x86/debug', 'x86/defconfig', 'x86/doc', 'x86/header-fixes', 'x86/headers' and 'x86/minor-fixes' into x86/core 2009-02-13 09:46:36 +01:00
crypto crypto: crc32c-intel - Switch to shash 2008-12-25 11:01:37 +11:00
ia32 Merge branch 'linus' into x86/apic 2009-02-13 09:44:22 +01:00
include/asm x86: fix performance regression in write() syscall 2009-02-24 17:16:36 +01:00
kernel Merge branches 'x86/acpi', 'x86/apic', 'x86/cpudetect', 'x86/headers', 'x86/paravirt', 'x86/urgent' and 'x86/xen'; commit 'v2.6.29-rc5' into x86/core 2009-02-17 12:07:00 +01:00
kvm KVM: change KVM to use IOMMU API 2009-01-03 14:11:07 +01:00
lguest x86: make lazy %gs optional on x86_32 2009-02-10 00:42:00 +01:00
lib x86: use early clobbers in usercopy*.c 2009-01-21 09:43:17 +01:00
mach-voyager Merge commit 'remotes/tip/x86/paravirt' into x86/untangle2 2009-02-11 11:52:22 -08:00
math-emu x86: add %gs accessors for x86_32 2009-02-10 00:41:58 +01:00
mm Merge branch 'x86/untangle2' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen into x86/headers 2009-02-13 13:09:00 +01:00
oprofile Merge branch 'oprofile/ring_buffer' into oprofile/oprofile-for-tip 2009-01-08 14:27:34 +01:00
pci x86, numaq: cleanups 2009-02-05 22:30:14 +01:00
power x86, hibernate: fix breakage on x86_32 with CONFIG_NUMA set 2008-11-12 23:28:51 +01:00
vdso x86: no stack protector for vdso 2009-02-10 00:41:56 +01:00
video
xen Merge branches 'x86/acpi', 'x86/apic', 'x86/cpudetect', 'x86/headers', 'x86/paravirt', 'x86/urgent' and 'x86/xen'; commit 'v2.6.29-rc5' into x86/core 2009-02-17 12:07:00 +01:00
Kconfig Merge branch 'core/percpu' into x86/core 2009-02-13 09:45:09 +01:00
Kconfig.cpu Merge branch 'x86/urgent' into core/percpu 2009-02-10 00:41:02 +01:00
Kconfig.debug x86: clean up arch/x86/Kconfig* 2009-02-05 22:30:20 +01:00
Makefile Merge branch 'core/percpu' into x86/core 2009-02-13 09:45:09 +01:00
Makefile_32.cpu x86: merge winchip-2 and winchip-2a cpu choices 2008-10-13 10:22:48 +02:00