linux/arch/arm
Thomas Petazzoni 9ff0bb5ba6 ARM: 8180/1: mm: implement no-highmem fast path in kmap_atomic_pfn()
Since CONFIG_HIGHMEM got enabled on ARMv5 Kirkwood, we have noticed a
very significant drop in networking performance. The test were
conducted on an OpenBlocks A7 board. Without this patch, the outgoing
performance measured with iperf are:

 - highmem OFF, TSO OFF   544 Mbit/s
 - highmem OFF, TSO ON	  942 Mbit/s
 - highmem ON,  TSO OFF   306 Mbit/s
 - highmem ON,  TSO ON    246 Mbit/s

On this Kirkwood platform, the L2 cache is a Feroceon cache, and with
this cache, all the range operations have to be done on virtual
addresses and not physical addresses. Therefore, whenever
CONFIG_HIGHMEM is enabled, the cache maintenance operations call
kmap_atomic_pfn() and kunmap_atomic().

However, kmap_atomic_pfn() does not implement the same fast path for
non-highmem pages as the one implemented in kmap_atomic(), and this is
one of the reason for the performance drop. While this patch does not
fully restore the performances, it clearly improves them a lot:

      	      	        without patch  with patch

 - highmem ON, TSO OFF   306 Mbit/s     387 Mbit/s
 - highmem ON, TSO ON    246 Mbit/s     434 Mbit/s

We're still far from the !CONFIG_HIGHMEM performances, but it does
improve a bit the situation.

Thanks a lot to Ezequiel Garcia and Gregory Clement for all the
testing work around this topic.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-10-29 17:22:07 +00:00
..
boot Merge tag 'qcom-dt-for-3.18-3' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom into fixes 2014-10-19 13:39:08 -07:00
common This is the bulk of GPIO changes for the v3.18 development 2014-10-09 14:58:15 -04:00
configs Samsung defconfig, actually exynos_defconig updates for v3.18 2014-10-14 23:32:31 -07:00
crypto
firmware
include ARM: enable bpf syscall 2014-10-29 00:18:20 +00:00
kernel ARM: enable bpf syscall 2014-10-29 00:18:20 +00:00
kvm Second batch of changes for KVM/{arm,arm64} for 3.18 2014-10-18 14:32:31 -07:00
lib ARM: 8137/1: fix get_user BE behavior for target variable with size of 8 bytes 2014-09-12 17:38:59 +01:00
mach-at91 Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-axxia
mach-bcm Merge tag 'bcm63138-v4' of http://github.com/brcm/linux into next/soc 2014-09-25 23:50:02 +02:00
mach-berlin
mach-clps711x ARM: SoC platform changes for 3.18 2014-10-08 17:13:04 -04:00
mach-cns3xxx CNS3xxx: Fix PCIe read size limit. 2014-09-25 23:35:01 +02:00
mach-davinci ARM: SoC DT updates for 3.18 2014-10-08 17:22:23 -04:00
mach-dove
mach-ebsa110 kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-efm32
mach-ep93xx kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-exynos Samsung fixes for v3.18 2014-10-14 23:31:13 -07:00
mach-footbridge kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-gemini
mach-highbank
mach-hisi ARM: hisi: depend on ARCH_MULTI_V7 2014-10-02 16:40:10 +02:00
mach-imx ACPI and power management updates for 3.18-rc1 2014-10-09 16:07:43 -04:00
mach-integrator PCI changes for the v3.18 merge window: 2014-10-09 15:03:49 -04:00
mach-iop13xx kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-iop32x kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-iop33x kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-ixp4xx
mach-keystone
mach-ks8695 kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-lpc32xx ARM: LPC32xx: Fix reset function 2014-09-10 17:25:14 +02:00
mach-mediatek
mach-meson ARM: meson: add basic support for MesonX SoCs 2014-09-25 17:34:42 +02:00
mach-mmp
mach-moxart
mach-msm
mach-mv78xx0
mach-mvebu cpufreq: cpu0: rename driver and internals to 'cpufreq_dt' 2014-10-03 15:37:54 +02:00
mach-mxs
mach-netx
mach-nomadik
mach-nspire
mach-omap1
mach-omap2 MTD updates for 3.18 2014-10-18 11:48:03 -07:00
mach-orion5x ARM: orion5x: Convert pr_warning to pr_warn 2014-09-13 21:29:21 +00:00
mach-picoxcell
mach-prima2
mach-pxa The clk tree changes for 3.18 are dominated by clock drivers. Mostly 2014-10-15 07:05:03 +02:00
mach-qcom
mach-realview
mach-rockchip
mach-rpc kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-s3c24xx Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-s3c64xx Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-s5pv210 Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-sa1100 Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-shmobile Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2014-10-14 09:39:08 +02:00
mach-socfpga
mach-spear
mach-sti
mach-sunxi ARM: sunxi: Remove sun4i reboot code from mach directory 2014-09-11 21:01:47 +02:00
mach-tegra
mach-u300 kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-ux500
mach-versatile
mach-vexpress
mach-vt8500 arm, vt8500, LLVMLlinux: Use mcr instead of mcr% for mach-vt8500 2014-09-26 01:49:03 +02:00
mach-w90x900
mach-zynq ACPI and power management updates for 3.18-rc1 2014-10-09 16:07:43 -04:00
mm ARM: 8180/1: mm: implement no-highmem fast path in kmap_atomic_pfn() 2014-10-29 17:22:07 +00:00
net net: bpf: arm: make hole-faulting more robust 2014-09-23 12:40:22 -04:00
nwfpe
oprofile
plat-iop kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
plat-omap Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
plat-orion dsa: Replace mii_bus with a generic host device 2014-09-15 17:24:20 -04:00
plat-pxa ARM: pxa: ssp: provide platform_device_id for PXA3xx 2014-09-19 01:56:02 +08:00
plat-samsung Samsung fixes for v3.18 2014-10-14 23:31:13 -07:00
plat-versatile
tools
vfp
xen xen/arm: remove mach_to_phys rbtree 2014-09-11 18:11:53 +00:00
Kconfig xen: features and fixes for 3.18-rc0 2014-10-11 20:29:01 -04:00
Kconfig-nommu
Kconfig.debug ARM: SoC platform changes for 3.18 2014-10-08 17:13:04 -04:00
Makefile Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00