Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
msm: memutils: memcpy, memmove, copy_page optimization
Preload farther to take advantage of the memory bus, and assume 64-byte cache lines. Unroll some pairs of ldm/stm as well, for unexplainable reasons. Future enhancements should include, - #define for how far to preload, possibly defined separately for memcpy, copy_*_user - Tuning for misaligned buffers - Tuning for memmove - Tuning for small buffers - Understanding mechanism behind ldm/stm unroll causing some gains in copy_to_user BASELINE (msm8960pro): ====================================================================== memcpy 1000MB at 5MB : took 808850 usec, bandwidth 1236.236 MB/s copy_to_user 1000MB at 5MB : took 810071 usec, bandwidth 1234.234 MB/s copy_from_user 1000MB at 5M: took 942926 usec, bandwidth 1060.060 MB/s memmove 1000GB at 5MB : took 848588 usec, bandwidth 1178.178 MB/s copy_to_user 1000GB at 4kB : took 847916 usec, bandwidth 1179.179 MB/s copy_from_user 1000GB at 4k: took 935113 usec, bandwidth 1069.069 MB/s copy_page 1000GB at 4kB : took 779459 usec, bandwidth 1282.282 MB/s THIS PATCH: ====================================================================== memcpy 1000MB at 5MB : took 346223 usec, bandwidth 2888.888 MB/s copy_to_user 1000MB at 5MB : took 348084 usec, bandwidth 2872.872 MB/s copy_from_user 1000MB at 5M: took 348176 usec, bandwidth 2872.872 MB/s memmove 1000GB at 5MB : took 348267 usec, bandwidth 2871.871 MB/s copy_to_user 1000GB at 4kB : took 377018 usec, bandwidth 2652.652 MB/s copy_from_user 1000GB at 4k: took 371829 usec, bandwidth 2689.689 MB/s copy_page 1000GB at 4kB : took 383763 usec, bandwidth 2605.605 MB/s Signed-off-by: Chris Fries <[email protected]> Reviewed-by: Christopher Fries <[email protected]> Reviewed-by: Yi-Wei Zhao <[email protected]> Signed-off-by: scott <[email protected]> Conflicts: arch/arm/mach-msm/Kconfig arch/arm/mach-msm/Makefile Signed-off-by: franciscofranco <[email protected]> Conflicts: arch/arm/mach-msm/Makefile Conflicts: arch/arm/lib/Makefile arch/arm/mach-msm/Kconfig arch/arm/mach-msm/Makefile
- Loading branch information