Subject: [Linaro-mm-sig] [PATCHv16 0/9] Contiguous Memory Allocator

From: [email-masked] (Maxime Coquelin)
Date: Mon, 10 Oct 2011 14:07:31 +0200

On 10/06/2011 03:54 PM, Marek Szyprowski wrote:
> Welcome everyone again,
>
> Once again I decided to post an updated version of the Contiguous Memory
> Allocator patches.
>
> This version provides mainly a bugfix for a very rare issue that might
> have changed migration type of the CMA page blocks resulting in dropping
> CMA features from the affected page block and causing memory allocation
> to fail. Also the issue reported by Dave Hansen has been fixed.
>
> This version also introduces basic support for x86 architecture, what
> allows wide testing on KVM/QEMU emulators and all common x86 boxes. I
> hope this will result in wider testing, comments and easier merging to
> mainline.
>
> I've also dropped an examplary patch for s5p-fimc platform device
> private memory declaration and added the one from real life. CMA device
> private memory regions are defined for s5p-mfc device to let it allocate
> buffers from two memory banks.
>
> ARM integration code has not been changed since last version, it
> provides implementation of all the ideas that has been discussed during

Hello Marek,

     We are currently testing CMA (v16) on Snowball platform.
     This feature is very promising, thanks for pushing it!

     During our stress tests, we encountered some problems :

     1) Contiguous allocation lockup:
         When system RAM is full of Anon pages, if we try to allocate a 
contiguous buffer greater than the min_free value, we face a 
dma_alloc_from_contiguous lockup.
         The expected result would be dma_alloc_from_contiguous() to fail.
         The problem is reproduced systematically on our side.

     2) Contiguous allocation fail:
         We have developed a small driver and a shell script to 
allocate/release contiguous buffers.
         Sometimes, dma_alloc_from_contiguous() fails to allocate the 
contiguous buffer (about once every 30 runs).
         We have 270MB Memory passed to the kernel in our configuration, 
and the CMA pool is 90MB large.
         In this setup, the overall memory is either free or full of 
reclaimable pages.

     For now, we didn't had time to investigate further theses problems.
     Have you already faced this kind of issues?
     Could someone testing CMA on other boards confirm/infirm theses 
problems?

Best regards,
Maxime

> Patches in this patchset:
>
>    mm: move some functions from memory_hotplug.c to page_isolation.c
>    mm: alloc_contig_freed_pages() added
>
>      Code "stolen" from Kamezawa.  The first patch just moves code
>      around and the second provide function for "allocates" already
>      freed memory.
>
>    mm: alloc_contig_range() added
>
>      This is what Kamezawa asked: a function that tries to migrate all
>      pages from given range and then use alloc_contig_freed_pages()
>      (defined by the previous commit) to allocate those pages.
>
>    mm: MIGRATE_CMA migration type added
>    mm: MIGRATE_CMA isolation functions added
>
>      Introduction of the new migratetype and support for it in CMA.
>      MIGRATE_CMA works similar to ZONE_MOVABLE expect almost any
>      memory range can be marked as one.
>
>    mm: cma: Contiguous Memory Allocator added
>
>      The code CMA code. Manages CMA contexts and performs memory
>      allocations.
>
>    X86: integrate CMA with DMA-mapping subsystem
>    ARM: integrate CMA with dma-mapping subsystem
>
>      Main clients of CMA framework. CMA serves as a alloc_pages()
>      replacement.
>
>    ARM: Samsung: use CMA for 2 memory banks for s5p-mfc device
>
>      Use CMA device private memory regions instead of custom solution
>      based on memblock_reserve() + dma_declare_coherent().
>
>
> Patch summary:
>
> KAMEZAWA Hiroyuki (2):
>    mm: move some functions from memory_hotplug.c to page_isolation.c
>    mm: alloc_contig_freed_pages() added
>
> Marek Szyprowski (4):
>    drivers: add Contiguous Memory Allocator
>    ARM: integrate CMA with DMA-mapping subsystem
>    ARM: Samsung: use CMA for 2 memory banks for s5p-mfc device
>    X86: integrate CMA with DMA-mapping subsystem
>
> Michal Nazarewicz (3):
>    mm: alloc_contig_range() added
>    mm: MIGRATE_CMA migration type added
>    mm: MIGRATE_CMA isolation functions added
>
>   arch/Kconfig                          |    3 +
>   arch/arm/Kconfig                      |    2 +
>   arch/arm/include/asm/dma-contiguous.h |   16 ++
>   arch/arm/include/asm/mach/map.h       |    1 +
>   arch/arm/mm/dma-mapping.c             |  362 +++++++++++++++++++++++++------
>   arch/arm/mm/init.c                    |    8 +
>   arch/arm/mm/mm.h                      |    3 +
>   arch/arm/mm/mmu.c                     |   29 ++-
>   arch/arm/plat-s5p/dev-mfc.c           |   51 +----
>   arch/x86/Kconfig                      |    1 +
>   arch/x86/include/asm/dma-contiguous.h |   13 +
>   arch/x86/include/asm/dma-mapping.h    |    4 +
>   arch/x86/kernel/pci-dma.c             |   18 ++-
>   arch/x86/kernel/pci-nommu.c           |    8 +-
>   arch/x86/kernel/setup.c               |    2 +
>   drivers/base/Kconfig                  |   79 +++++++
>   drivers/base/Makefile                 |    1 +
>   drivers/base/dma-contiguous.c         |  386 +++++++++++++++++++++++++++++++++
>   include/asm-generic/dma-contiguous.h  |   27 +++
>   include/linux/device.h                |    4 +
>   include/linux/dma-contiguous.h        |  106 +++++++++
>   include/linux/mmzone.h                |   57 +++++-
>   include/linux/page-isolation.h        |   53 ++++-
>   mm/Kconfig                            |    8 +-
>   mm/compaction.c                       |   10 +
>   mm/memory_hotplug.c                   |  111 ----------
>   mm/page_alloc.c                       |  317 +++++++++++++++++++++++++--
>   mm/page_isolation.c                   |  131 +++++++++++-
>   28 files changed, 1522 insertions(+), 289 deletions(-)
>   create mode 100644 arch/arm/include/asm/dma-contiguous.h
>   create mode 100644 arch/x86/include/asm/dma-contiguous.h
>   create mode 100644 drivers/base/dma-contiguous.c
>   create mode 100644 include/asm-generic/dma-contiguous.h
>   create mode 100644 include/linux/dma-contiguous.h
>
> --
> 1.7.1.569.g6f426
>
>
> _______________________________________________
> Linaro-mm-sig mailing list
> Linaro-mm-sig at lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/linaro-mm-sig