mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 21:32:06 +07:00
a372acfac5
On a live running system (VoIP gateway for Air Trafic Control), over a 10 minutes period (with 277s idle), we get 87 millions DTLB misses and approximatly 35 secondes are spent in DTLB handler. This represents 5.8% of the overall time and even 10.8% of the non-idle time. Among those 87 millions DTLB misses, 15% are on user addresses and 85% are on kernel addresses. And within the kernel addresses, 93% are on addresses from the linear address space and only 7% are on addresses from the virtual address space. MPC8xx has no BATs but it has 8Mb page size. This patch implements mapping of kernel RAM using 8Mb pages, on the same model as what is done on the 40x. In 4k pages mode, each PGD entry maps a 4Mb area: we map every two entries to the same 8Mb physical page. In each second entry, we add 4Mb to the page physical address to ease life of the FixupDAR routine. This is just ignored by HW. In 16k pages mode, each PGD entry maps a 64Mb area: each PGD entry will point to the first page of the area. The DTLB handler adds the 3 bits from EPN to map the correct page. With this patch applied, we now get only 13 millions TLB misses during the 10 minutes period. The idle time has increased to 313s and the overall time spent in DTLB miss handler is 6.3s, which represents 1% of the overall time and 2.2% of non-idle time. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Scott Wood <oss@buserror.net>
44 lines
1.6 KiB
Makefile
44 lines
1.6 KiB
Makefile
#
|
|
# Makefile for the linux ppc-specific parts of the memory manager.
|
|
#
|
|
|
|
subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
|
|
|
|
ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
|
|
|
|
obj-y := fault.o mem.o pgtable.o mmap.o \
|
|
init_$(CONFIG_WORD_SIZE).o \
|
|
pgtable_$(CONFIG_WORD_SIZE).o
|
|
obj-$(CONFIG_PPC_MMU_NOHASH) += mmu_context_nohash.o tlb_nohash.o \
|
|
tlb_nohash_low.o
|
|
obj-$(CONFIG_PPC_BOOK3E) += tlb_low_$(CONFIG_WORD_SIZE)e.o
|
|
hash64-$(CONFIG_PPC_NATIVE) := hash_native_64.o
|
|
obj-$(CONFIG_PPC_STD_MMU_64) += hash_utils_64.o slb_low.o slb.o $(hash64-y)
|
|
obj-$(CONFIG_PPC_STD_MMU_32) += ppc_mmu_32.o hash_low_32.o
|
|
obj-$(CONFIG_PPC_STD_MMU) += tlb_hash$(CONFIG_WORD_SIZE).o \
|
|
mmu_context_hash$(CONFIG_WORD_SIZE).o
|
|
ifeq ($(CONFIG_PPC_STD_MMU_64),y)
|
|
obj-$(CONFIG_PPC_4K_PAGES) += hash64_4k.o
|
|
obj-$(CONFIG_PPC_64K_PAGES) += hash64_64k.o
|
|
endif
|
|
obj-$(CONFIG_PPC_ICSWX) += icswx.o
|
|
obj-$(CONFIG_PPC_ICSWX_PID) += icswx_pid.o
|
|
obj-$(CONFIG_40x) += 40x_mmu.o
|
|
obj-$(CONFIG_44x) += 44x_mmu.o
|
|
obj-$(CONFIG_PPC_8xx) += 8xx_mmu.o
|
|
obj-$(CONFIG_PPC_FSL_BOOK3E) += fsl_booke_mmu.o
|
|
obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o
|
|
obj-$(CONFIG_PPC_SPLPAR) += vphn.o
|
|
obj-$(CONFIG_PPC_MM_SLICES) += slice.o
|
|
obj-y += hugetlbpage.o
|
|
ifeq ($(CONFIG_HUGETLB_PAGE),y)
|
|
obj-$(CONFIG_PPC_STD_MMU_64) += hugetlbpage-hash64.o
|
|
obj-$(CONFIG_PPC_BOOK3E_MMU) += hugetlbpage-book3e.o
|
|
endif
|
|
obj-$(CONFIG_TRANSPARENT_HUGEPAGE) += hugepage-hash64.o
|
|
obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o
|
|
obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o
|
|
obj-$(CONFIG_HIGHMEM) += highmem.o
|
|
obj-$(CONFIG_PPC_COPRO_BASE) += copro_fault.o
|
|
obj-$(CONFIG_SPAPR_TCE_IOMMU) += mmu_context_iommu.o
|