在实际的项目中遇到内存不够的情况下,这个时候我们可以使用内存压缩,通过牺牲一部分flash 空间来换取更大的内存使用。
修改方式:
内核
打开swap ,zsmalloc, zram, zram_lz4
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="localhost"
-# CONFIG_SWAP is not set
CONFIG_SYSVIPC=y
CONFIG_FHANDLE=y
CONFIG_NO_HZ=y
@@ -45,6 +44,7 @@ CONFIG_HZ_1000=y
# CONFIG_BOUNCE is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
CONFIG_CMA=y
+CONFIG_ZSMALLOC=y
# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
# CONFIG_ARM64_HW_AFDBM is not set
# CONFIG_ARM64_PAN is not set
@@ -89,7 +89,8 @@ CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_ALLOW_DEV_COREDUMP is not set
CONFIG_DMA_CMA=y
CONFIG_CMA_SIZE_MBYTES=5
-# CONFIG_BLK_DEV is not set
+CONFIG_ZRAM=y
+CONFIG_ZRAM_LZ4_COMPRESS=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_SG=y
文件系统
busybox 使能 mkswap swapon
启动脚本
#!/bin/sh
ZRAM_DEVICE=/dev/zram0
ZRAM_SIZE_PERCENT=100
ZRAM_ALGORITHM=lz4
[ -f /etc/zram.conf ] && ./etc/zram.conf || true
memtotal=$(grep MemTotal /proc/meminfo | awk ' { print $2 } ')
memzram=$(($memtotal*${ZRAM_SIZE_PERCENT}/100))
start() {
echo '%s zramctl: ' "$1"
echo ${ZRAM_ALGORITHM} > /sys/block/zram0/comp_algorithm
echo ${memzram}KB > /sys/block/zram0/disksize
mkswap -L "zram-swap" /dev/zram0
swapon /dev/zram0
[ $? = 0 ] && echo "OK" || echo "FAIL"
}
case "$1" in
start)
start "Running";;
restart|reload)
start "Rerunning";;
stop)
:;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac