zram disksize 设置

tech2026-09-02  1

zram disksize 设置

小内存项目:1G,2G,3G RAM

zram disksize设置.

高通:

高通的设置比较简单:

相关代码:

init.qcom.post_boot.sh

if [ -f /sys/block/zram0/disksize ]; then if [ -f /sys/block/zram0/use_dedup ]; then echo 1 > /sys/block/zram0/use_dedup fi if [ $MemTotal -le524288 ]; then echo 402653184 > /sys/block/zram0/disksize elif [ $MemTotal -le1048576 ]; then echo 805306368 > /sys/block/zram0/disksize else echo$zRamSizeBytes > /sys/block/zram0/disksize fi

根据MEMTotal的大小,直接修改即可.

 

MTK:以最新的kernel-4.9分析,之前的kernel略有差异.

MTK有两个方式设置zram disksize.第一种直接设置参数,第二种设置比例.

1.直接设置参数:

fstab.enableswap

/dev/block/zram0noneswapdefaultszramsize=107374328

2.设置比例,

/dev/block/zram0noneswapdefaultszramsize=50%

这里的比例不是物理内存的比例,不是2G RAM中的50%,而是TotalRam中的比例(有些reserved memory 在系统开机完成后,会还给系统,导致开机后的memtotal的值,比计算zram 大小时memtotal的值会稍微大点_来自MTK的ALPS05132254 ).

这里的比例生效的位置:android/system/core/fs_mgr/fs_mgr_fstab.cpp

} elseif (StartsWith(flag, "zramsize=")) { if (!arg.empty() && arg.back() == '%') { arg.pop_back(); int val; if (ParseInt(arg, &val, 0, 100)) { entry->zram_size = CalculateZramSize(val); } else { LWARNING << "Warning: zramsize= flag malformed: " << arg; } } else { if (!ParseInt(arg, &entry->zram_size)) { LWARNING << "Warning: zramsize= flag malformed: " << arg; } }

考虑项目一般存在不同的RAM大小,写固定值不行,那么考虑写比例,但是这里的比例不是我们的期望值.

我们的期望值一般是物理内存的比例.因此这个比例值就失去了意义.

查看disksize最终设置的位置,

kernel-4.9/drivers/block/zram/zram_drv.c

disksize_store()-->set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);

最终调用set_capacity设置zram disksize.那么我们在这个位置做客制化

判断不同的ZRAM物理大小写入不同的zram disksize.

    disksize = memparse(buf, NULL);     if (!disksize)         return -EINVAL;  +       /*set zram size to half of totalRam  */  +       if (!totalram_pages)  +          return -EINVAL;  +       if(totalram_pages < 262144){// 1G RAM  +         disksize = 536870912;//512M  +       }else if(totalram_pages < 524288){// 2G RAM  +          disksize = 1073741824;//1G  +       }else if(totalram_pages < 786432){// 3G RAM  +          disksize = 1610612736;//1.5G  +       }  +       /* set zram size to half of totalRam  */     down_write(&zram->init_lock);     if (init_done(zram)) {         pr_info("Cannot change disksize for initialized device\n");         err = -EBUSY;         goto out_unlock;     }

这个修改的思路来自与MTK kernel-3.8

if (!disksize) { /* Give it a default disksize */1312disksize = default_disksize_perc_ram * ((totalram_pages << PAGE_SHIFT) / 100); /* Promote the default disksize if totalram_pages is smaller */1314if (totalram_pages < SUPPOSED_TOTALRAM) disksize += (disksize >> 1); } 可以看到这里使用了比例.而我们的需求是根据物理内存设置disksize,因此根据这个来修改即可.
最新回复(0)