mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
feat(memory/IO) This update optimizes memory throughput and I/O performance across all ROCKNIX AArch64 targets by enabling File-System-backed Transparent Huge Pages (THP) and implementing a tiered hardware-aware tuning strategy.
With MGLRU and zRAM providing a safety net, enabling Large Page (2MB) support reduces TLB misses, allowing the CPU to prioritize emulation logic over memory address translation. Key Features Enabled File-System THP (CONFIG_READ_ONLY_THP_FOR_FS): Collapses read-only file mappings (game binaries/data) into huge pages to accelerate asset loading. Contiguous Page Table Entries (CONFIG_ARM64_CONTPTE): Allows the MMU to treat groups of pages as a single entry, increasing TLB efficiency on high-performance targets. Memory Compaction & Migration: Re-enabled infrastructure to shuffle physical RAM into contiguous blocks required for huge pages. Architecture-Specific Write Support (CONFIG_ARCH_WANT_PMD_MKWRITE): Ensures efficient huge page handling during high-performance memory writes. Tiered Userspace Management The rocknix-memory-manager applies specific logic at boot based on the SoC and RAM capacity: Flagship Mode (RK3588, SM8x, RK3399): Sets defrag to defer+madvise for proactive huge page creation. Sets vm.compaction_proactiveness to 40 to maintain a pool of contiguous blocks. Budget Mode (H700, RK3326): Sets defrag to defer only to prevent CPU "stalls" during gameplay. Sets vm.compaction_proactiveness to 10 to prioritize raw CPU availability. Texture Performance: Globally enables shmem_enabled=advise to benefit Vulkan and Wayland texture handling. Swappiness: Sets vm.swappiness to 100 when ZRAM is active to keep physical RAM unfragmented for huge page allocations. Safety Rationale MGLRU: Prevents "reclaim storms" during huge page allocation on 1GB devices. zRAM: Absorbs memory pressure via high-speed compressed swap. Read-Only Focus: FS-Backed THP targets low-risk mappings while providing high-impact gains for asset streaming.
This commit is contained in:
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -1020,7 +1020,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
|
||||
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_CAN_LINK_STATIC=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
@@ -962,7 +962,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y
|
||||
CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y
|
||||
|
||||
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -546,6 +546,7 @@ CONFIG_ARM64_SME=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
# CONFIG_RANDOMIZE_BASE is not set
|
||||
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
|
||||
CONFIG_ARM64_CONTPTE=y
|
||||
# end of Kernel Features
|
||||
|
||||
#
|
||||
@@ -722,6 +723,7 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMAP=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
|
||||
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
|
||||
CONFIG_ARCH_WANT_PMD_MKWRITE=y
|
||||
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
CONFIG_ARCH_WANTS_EXECMEM_LATE=y
|
||||
@@ -959,9 +961,11 @@ CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
CONFIG_SPLIT_PTE_PTLOCKS=y
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_SPLIT_PMD_PTLOCKS=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_COMPACTION=y
|
||||
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
# CONFIG_PAGE_REPORTING is not set
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_THP_MIGRATION=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_PCP_BATCH_SCALE_MAX=5
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
@@ -970,8 +974,19 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
|
||||
# CONFIG_MEMORY_FAILURE is not set
|
||||
CONFIG_ARCH_WANTS_THP_SWAP=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE is not set
|
||||
# CONFIG_PERSISTENT_HUGE_ZERO_FOLIO is not set
|
||||
CONFIG_MM_ID=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y
|
||||
CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
# CONFIG_CMA_SYSFS is not set
|
||||
|
||||
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -555,6 +555,7 @@ CONFIG_RANDOMIZE_BASE=y
|
||||
CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
|
||||
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
|
||||
CONFIG_STACKPROTECTOR_PER_TASK=y
|
||||
CONFIG_ARM64_CONTPTE=y
|
||||
# end of Kernel Features
|
||||
|
||||
#
|
||||
@@ -726,6 +727,7 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMAP=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
|
||||
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
|
||||
CONFIG_ARCH_WANT_PMD_MKWRITE=y
|
||||
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
CONFIG_ARCH_WANTS_EXECMEM_LATE=y
|
||||
@@ -935,9 +937,11 @@ CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
CONFIG_SPLIT_PTE_PTLOCKS=y
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_SPLIT_PMD_PTLOCKS=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_COMPACTION=y
|
||||
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
# CONFIG_PAGE_REPORTING is not set
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_THP_MIGRATION=y
|
||||
CONFIG_PCP_BATCH_SCALE_MAX=5
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_KSM=y
|
||||
@@ -945,8 +949,19 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
|
||||
# CONFIG_MEMORY_FAILURE is not set
|
||||
CONFIG_ARCH_WANTS_THP_SWAP=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE is not set
|
||||
# CONFIG_PERSISTENT_HUGE_ZERO_FOLIO is not set
|
||||
CONFIG_MM_ID=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y
|
||||
CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y
|
||||
# CONFIG_CMA is not set
|
||||
CONFIG_PAGE_BLOCK_MAX_ORDER=10
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
|
||||
@@ -902,10 +902,12 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
# CONFIG_COMPACTION is not set
|
||||
CONFIG_COMPACTION=y
|
||||
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
# CONFIG_PAGE_REPORTING is not set
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_THP_MIGRATION=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_MMU_NOTIFIER=y
|
||||
@@ -914,7 +916,11 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
|
||||
# CONFIG_MEMORY_FAILURE is not set
|
||||
CONFIG_ARCH_WANTS_THP_SWAP=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE is not set
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
CONFIG_THP_SWAP=y
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_INACTIVE is not set
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
|
||||
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -964,7 +964,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
|
||||
@@ -929,7 +929,7 @@ CONFIG_ZONE_DMA32=y
|
||||
CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y
|
||||
# CONFIG_PERCPU_STATS is not set
|
||||
# CONFIG_GUP_TEST is not set
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
CONFIG_ARCH_HAS_PTE_SPECIAL=y
|
||||
CONFIG_SECRETMEM=y
|
||||
# CONFIG_ANON_VMA_NAME is not set
|
||||
|
||||
@@ -11,8 +11,9 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=108800
|
||||
CONFIG_RUST_IS_AVAILABLE=y
|
||||
CONFIG_RUSTC_LLVM_VERSION=190107
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -25,8 +26,6 @@ CONFIG_RUSTC_HAS_SLICE_AS_FLATTENED=y
|
||||
CONFIG_RUSTC_HAS_COERCE_POINTEE=y
|
||||
CONFIG_RUSTC_HAS_SPAN_FILE=y
|
||||
CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES=y
|
||||
CONFIG_RUSTC_HAS_FILE_WITH_NUL=y
|
||||
CONFIG_RUSTC_HAS_FILE_AS_C_STR=y
|
||||
CONFIG_PAHOLE_VERSION=0
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_BUILDTIME_TABLE_SORT=y
|
||||
@@ -286,6 +285,7 @@ CONFIG_PERF_EVENTS=y
|
||||
|
||||
CONFIG_SYSTEM_DATA_VERIFICATION=y
|
||||
CONFIG_PROFILING=y
|
||||
# CONFIG_RUST is not set
|
||||
|
||||
#
|
||||
# Kexec and crash features
|
||||
@@ -1073,7 +1073,7 @@ CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_NEVER=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_WITHIN_SIZE is not set
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ADVISE is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
|
||||
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -1077,7 +1077,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
|
||||
@@ -11,8 +11,8 @@ CONFIG_AS_VERSION=24400
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24400
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109300
|
||||
CONFIG_RUSTC_LLVM_VERSION=210108
|
||||
CONFIG_RUSTC_VERSION=109200
|
||||
CONFIG_RUSTC_LLVM_VERSION=210103
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -1077,7 +1077,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
|
||||
CONFIG_THP_SWAP=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
CONFIG_READ_ONLY_THP_FOR_FS=y
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
CONFIG_PAGE_MAPCOUNT=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
|
||||
@@ -38,6 +38,11 @@ KSM_ENABLE="${KSM_ENABLE:-$DEFAULT_KSM_ENABLE}"
|
||||
|
||||
# --- 2. ENVIRONMENT & TIER DETECTION ---
|
||||
|
||||
# Source environment to ensure HW_DEVICE is available
|
||||
if [ -f /etc/profile ]; then
|
||||
. /etc/profile
|
||||
fi
|
||||
|
||||
# Global RAM calc (MB)
|
||||
TOTAL_MEM_KB=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
|
||||
TOTAL_MEM_MB=$((TOTAL_MEM_KB / 1024))
|
||||
@@ -60,10 +65,8 @@ fi
|
||||
# even with lower RAM.
|
||||
IS_HIGH_PERF_SOC=false
|
||||
|
||||
if [ -f /proc/device-tree/compatible ]; then
|
||||
if grep -qE "rk3588|sm8|s922x|g12b|rk3399" /proc/device-tree/compatible; then
|
||||
IS_HIGH_PERF_SOC=true
|
||||
fi
|
||||
if [[ "${HW_DEVICE,,}" =~ rk3588|sm8|s922x|g12b|rk3399 ]]; then
|
||||
IS_HIGH_PERF_SOC=true
|
||||
fi
|
||||
|
||||
# Basic mount check
|
||||
@@ -193,7 +196,8 @@ show_status() {
|
||||
# THP
|
||||
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
|
||||
local thp=$(grep -o '\[.*\]' /sys/kernel/mm/transparent_hugepage/enabled | tr -d '[]')
|
||||
printf " Huge Pages: %s\n" "$thp"
|
||||
local defrag=$(grep -o '\[.*\]' /sys/kernel/mm/transparent_hugepage/defrag | tr -d '[]')
|
||||
printf " Huge Pages: %s (Defrag: %s)\n" "$thp" "$defrag"
|
||||
else
|
||||
printf " Huge Pages: Absent\n"
|
||||
fi
|
||||
@@ -292,11 +296,12 @@ apply_vm_tuning() {
|
||||
# 2. Compaction Proactiveness
|
||||
local compaction_val=20
|
||||
if [[ "${VM_COMPACTION,,}" == "auto" ]]; then
|
||||
if [ "$IS_HIGH_RAM" = true ]; then
|
||||
compaction_val=50
|
||||
elif [ "$IS_LOW_RAM" = true ] && [ "$IS_HIGH_PERF_SOC" = true ]; then
|
||||
# Low RAM/High CPU can afford proactive compaction to help THP/allocs
|
||||
compaction_val=30
|
||||
if [ "$IS_HIGH_PERF_SOC" = true ]; then
|
||||
# High-end chips can afford background cleanup to keep THP ready.
|
||||
compaction_val=40
|
||||
elif [ "$IS_LOW_RAM" = true ]; then
|
||||
# Save CPU cycles on budget targets.
|
||||
compaction_val=10
|
||||
else
|
||||
compaction_val=20
|
||||
fi
|
||||
@@ -308,8 +313,29 @@ apply_vm_tuning() {
|
||||
fi
|
||||
|
||||
# 3. Transparent Huge Pages
|
||||
# Tiered THP Logic (FS MADVISE Synergy)
|
||||
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
|
||||
# Default to madvise for all to prevent bloat
|
||||
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
|
||||
|
||||
# Enable for Shared Memory (Crucial for Vulkan/Wayland textures)
|
||||
if [ -f /sys/kernel/mm/transparent_hugepage/shmem_enabled ]; then
|
||||
echo advise > /sys/kernel/mm/transparent_hugepage/shmem_enabled
|
||||
fi
|
||||
|
||||
# Budget vs Flagship Defrag Logic
|
||||
# On Budget devices (e.g. H700, RK3326), we use 'defer' so the system
|
||||
# never stalls while trying to find a contiguous 2MB block.
|
||||
if [ "$IS_LOW_RAM" = true ] && [ "$IS_HIGH_PERF_SOC" = false ]; then
|
||||
echo defer > /sys/kernel/mm/transparent_hugepage/defrag
|
||||
logger -t memory-manager "THP: Budget mode enabled (defrag=defer)"
|
||||
else
|
||||
# Flagship (RK3588, SM8x) or powerful Mid-range (RK3399)
|
||||
# Use defer+madvise to allow some synchronous compaction for
|
||||
# applications that explicitly think it is worth the performance.
|
||||
echo "defer+madvise" > /sys/kernel/mm/transparent_hugepage/defrag
|
||||
logger -t memory-manager "THP: Flagship mode enabled (defrag=defer+madvise)"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -322,6 +348,9 @@ apply_tuning() {
|
||||
setup_ksm
|
||||
|
||||
if [ "$ZRAM_SIZE_VAL" -gt 0 ]; then
|
||||
# With ZRAM + MGLRU + THP, high swappiness ensures the system swaps
|
||||
# anonymous memory into compressed RAM, keeping physical RAM "unfragmented"
|
||||
# for Huge Page allocations.
|
||||
sysctl -w vm.swappiness=100 >/dev/null
|
||||
sysctl -w vm.page-cluster=0 >/dev/null
|
||||
|
||||
|
||||
Reference in New Issue
Block a user