zram disksize 设置

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,因此根据这个来修改即可.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值