[PATCH] ARM: DMA-mapping: mark all !DMA_TO_DEVICE pages in unmapping as clean

Ming Lei ming.lei at canonical.com
Sun May 12 21:56:31 EDT 2013


Hello,

On Fri, May 3, 2013 at 5:12 PM, Ming Lei <ming.lei at canonical.com> wrote:
> It is common for one sg to include many pages, so mark all these
> pages as clean to avoid unnecessary flushing on them in
> set_pte_at() or update_mmu_cache().
>
> The patch might improve loading performance of applciation code a bit.
>
> On the below test code to read file(~1GByte size) from usb mass storage
> disk to buffer created with mmap(PROT_READ | PROT_EXEC) on
> Pandaboard, average ~1% improvement can be observed with the patch on
> 10 times test.
>
>
> #define _GNU_SOURCE
>
> #include <fcntl.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <stdlib.h>
> #include <sys/mman.h>
> #include <sys/stat.h>
> #include <string.h>
> #include <assert.h>
>
> unsigned int sum = 0;
>
> static unsigned long tv_diff(struct timeval *tv1, struct timeval *tv2)
> {
>         return (tv2->tv_sec - tv1->tv_sec) * 1000000 +
>                 (tv2->tv_usec - tv1->tv_usec);
> }
>
> int main(int argc, char *argv[])
> {
>         char *mbuffer;
>         int fd;
>         int i;
>         unsigned long page_size, size;
>         struct stat stat;
>         struct timeval t1, t2;
>
>         page_size = getpagesize();
>         fd = open(argv[1], O_RDONLY);
>         assert(fd >= 0);
>
>         fstat(fd, &stat);
>         size = stat.st_size;
>         printf("%s: file %s, file size %lu, page size %lu\n", argv[0],
>                 read_filename, size, page_size);
>
>         gettimeofday(&t1, NULL);
>         mbuffer = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0);
>         for (i = 0 ; i < size ; i += page_size)
>                 sum += mbuffer[i];
>         munmap(mbuffer, page_size);
>         gettimeofday(&t2, NULL);
>         printf("\tread mmaped time: %luus\n", tv_diff(&t1, &t2));
>
>         close(fd);
> }
>
> Cc: Nicolas Pitre <nicolas.pitre at linaro.org>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Marek Szyprowski <m.szyprowski at samsung.com>
> Cc: Russell King <linux at arm.linux.org.uk>
> Signed-off-by: Ming Lei <ming.lei at canonical.com>

Gentle ping, :-)

Thanks,
--
Ming Lei



More information about the linux-arm-kernel mailing list