zram disksize 设置
小内存项目:1G,2G,3G RAM
zram disksize设置.
高通:
高通的设置比较简单:
相关代码:
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.直接设置参数:
/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,因此根据这个来修改即可.