威联通arm nas编译内核模块启用zram
前言
上个月给爸妈换了台电视,顺便买了台威联通的ts216。本来觉得arm nas功耗低,不跑啥应用的话,2g的RAM也够用了。没想到威联通的系统特别占用内存,随便开点东西就开始使用swap了,本来CPU就不快,加上IO的延迟,导致系统更慢了。
现在不少安卓手机都使用了zram,zram相当于是在内存里做swap,大概可以让内存拓展50%。所以就尝试把这个应用到nas上看看。
看了一下威联通内核并没有带zram模块,那么就要手动编译了。还好威联通的内核是有开源的。
编译内核模块
- 下载源码与工具链
威联通的内核开源代码在sourceforge,我下载了GPL_QuTS_Hero-5.0.1-20221111_Kernel.tar.gz。由于是arm的内核所以需要交叉编译,工具链也在sourceforge了。下载Cross Toolchain SDK (arm64).tar.gz即可。
- 解压与配置
解压内核源码与工具链。config可以从nas上拷一份,zram需要如下配置
1 | CONFIG_ZRAM=m |
不知道为啥iSCSI有啥问题可能要改成不编译
makefile修改 cflag_kernel_qnap.mk有一些参数
1 | CFLAGS_MODULE = -DTSX16 -DQNAP -DNAS_VIRTUAL -DNAS_VIRTUAL_EX -DQNAP_FNOTIFY -DQNAP_SEARCH_FILENAME_CASE_INSENSITIVE -DQNAP_HAL -DSUPPORT_VAAI -DQNAP_RICHACL -DQNAP_I2C_MV9235 -DSUPPORT_FAST_BLOCK_CLONE -DSUPPORT_LOGICAL_BLOCK_4KB_FROM_NAS_GUI -DSUPPORT_CONCURRENT_TASKS -DSUPPORT_SINGLE_INIT_LOGIN -DVIRTUAL_JBOD -DSUPPORT_VOLUME_BASED -DQTS_HA -DSUPPORT_TP -DNFS_VAAI -DNFS_VAAI_V3 -DNFS_VAAI_SUPPORT_ZFS -DQNAP_SNAPSHOT -DISCSI_MULTI_INIT_ACL -DUSE_BLKDEV_READPAGES -DUSE_BLKDEV_WRITEPAGES -DKSWAPD_FIX -DQNAP_KERNEL_STORAGE_V2 |
配置好后即可交叉编译
1 | make ARCH=arm64 CROSS_COMIPLE=../../../aarch64-QNAP-linux-gnu/bin/aarch64-QNAP-linux-gnu- -j8 modules V=1 |
如果没啥问题的话,即可生成zram.ko与zsmalloc.ko
启用内核模块
将编译好的zram.ko与zsmalloc.ko拷贝到nas上。
测试开启
1 | insmod /share/CACHEDEV1_DATA/zram/zsmalloc.ko |
查看到下面信息的时候zram就成功开启了
1 | cat /proc/swaps |
设置自启动
威联通arm的nas需要如下命令挂载/tmp/config,将启动脚本写入autorun.sh,这个也要在网页上配置。
1 | mount -t ext2 /dev/mmcblk0p5 /tmp/config |
这是我的autorun.sh配置,我把zram的优先级设为最高,还开启了原有的磁盘上的一个swap分区,以防zram也不够用。
1 | #!/bin/bash |
写完后需要umount
1 | umount /tmp/config |
内核模块下载
这个理论上内核是5.10的rk处理器的威联通nas都能用(ts216/ts416)
威联通arm nas编译内核模块启用zram
https://www.huihongcloud.com/2023/05/31/qnap/威联通arm nas启用zram/