Commit e6284969 authored by Isaac J. Manjarres's avatar Isaac J. Manjarres Committed by Todd Kjos
Browse files

ANDROID: arm64: cache: Lower ARCH_DMA_MINALIGN to 64 bytes

Currently, ARCH_DMA_MINALIGN is set to 128 bytes for ARM64, which
means that the minimum size for kmalloc objects is 128 bytes.
ARCH_DMA_MINALIGN is required to be 128 bytes to be able to use a
single kernel image to support non-coherent DMA on systems with
cachelines up to 128 bytes in size.

However, the current value of 128 bytes leads to a large amount of
wasted memory for slab allocations on systems that have 64 byte
cachelines and only need a minimum alignment of 64 bytes for
DMA buffers. If these systems are allowed to use a smaller
ARCH_DMA_MINALIGN value of 64, the memory footprint of slab
allocations can be reduced by redirecting some allocations from
the kmalloc-128 and kmalloc-256 caches to the kmalloc-64 and
kmalloc-192 slab caches.

The following output from the slabinfo tool from a device running
Linux 6.1-rc5 reveals that lowering ARCH_DMA_MINALIGN from 128 bytes
to 64 bytes reduces the memory footprint of slab allocations by
16.6 MB--almost 5%.

ARCH_DMA_MINALIGN == 128:

Name                   Objects Objsize           Space
kmalloc-128             236973     128           33.0M
kmalloc-rcl-128           5541     128          724.9K
kmalloc-cg-128           10367     128            1.5M
kmalloc-256              12986     256            3.5M
kmalloc-rcl-256            256     256           65.5K
kmalloc-cg-256             544     256          139.2K

Total:                  266667                   38.9M

ARCH_DMA_MINALIGN == 64:

Name                   Objects Objsize           Space
kmalloc-64              216525      64           14.9M
kmalloc-rcl-64            3663      64          249.8K
kmalloc-cg-64            10269      64          864.2K
kmalloc-128              22797     128            3.5M
kmalloc-rcl-128           2016     128          258.0K
kmalloc-cg-128             288     128           36.8K
kmalloc-192               5532     192            1.1M
kmalloc-rcl-192            147     192           28.6K
kmalloc-cg-192             462     192           90.1K
kmalloc-256               5110     256            1.3M
kmalloc-rcl-256              0     256              0K
kmalloc-cg-256             224     256           57.3K

Total:                  267033                   22.3M

Thus, given the amount of memory saved by lowering ARCH_DMA_MINALIGN,
and that we are not aware of systems that have 128 byte cachelines
that will launch with newer kernels, lower the value of
ARCH_DMA_MINALIGN to 64 bytes for ARM64.

This is meant to serve as an intermediate solution while the series
in [1] is finalized.

[1] https://lore.kernel.org/linux-iommu/20221106220143.2129263-1-catalin.marinas@arm.com/



Bug: 241844128
Bug: 267786731
Signed-off-by: default avatarIsaac J. Manjarres <isaacmanjarres@google.com>
Change-Id: Idde8d1c682865582382766acc0443dda1a8a4f12
parent aa23dbe7
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment