we wont backport this to AA and probably not to BB until it is properly tested in CC
On 03/12/2014 04:55, Fernando Frediani wrote: > Hi all, > > It would be great if someone could port ZRAM to AA so it can be used on > 16MB devices too. > Despite the kernel version doesn't have it, it had several ports that > work on that version. > > By the way. As BB has it natively (I suppose), has anyone used BB with > ZRAM stably on 16MB devices (e.g: WRT54GL) ? > > Thanks > Regards, > Fernando > > > On 02/12/2014 11:16, John Crispin wrote: >> i just pushed a an alternate patch that fixes the problem. please test >> it and let me know the results >> >> John >> >> On 22/10/2014 09:20, Tomasz Wasiak wrote: >>> Devices with less memory are still common so why limit ZRAM usage >>> just to swap >>> when it could be very useful as for /tmp storage. >>> >>> This patch changes 3 things: >>> - sets default number of ZRAM devices to 2 (1st for /tmp, 2nd for >>> swap) >>> - adds ZRAM (default) support to procd's init (TMPFS is used when >>> ZRAM is not >>> available >>> - changes zram-swap so it will use /dev/zram1 for 1st CPU, >>> /dev/zram2 for 2nd >>> and so on as /dev/zram0 is in use for /tmp. >>> >>> Signed-off-by: Tomasz Wasiak <[email protected]> >>> --- >>> >>> package/system/procd/patches/procd-support_for_tmp_on_zram.patch >>> | 185 ++++++++++ >>> >>> package/system/zram-swap/files/zram.init >>> | 15 >>> >>> target/linux/generic/patches-3.10/998_zram_make_2_devices_by_default.patch >>> | 11 >>> 3 files changed, 203 insertions(+), 8 deletions(-) >>> >>> --- a/package/system/procd/patches/procd-support_for_tmo_on_zram.patch >>> +++ b/package/system/procd/patches/procd-support_for_tmp_on_zram.patch >>> @@ -0,0 +1,185 @@ >>> +--- a/initd/early.c >>> ++++ b/initd/early.c >>> +@@ -12,34 +12,130 @@ >>> + * GNU General Public License for more details. >>> + */ >>> + >>> +-#include <sys/mount.h> >>> +-#include <sys/types.h> >>> +-#include <sys/stat.h> >>> +- >>> +-#include <stdio.h> >>> ++#include <errno.h> >>> + #include <fcntl.h> >>> +-#include <unistd.h> >>> ++#include <stdio.h> >>> + #include <stdlib.h> >>> ++#include <string.h> >>> ++#include <strings.h> >>> ++#include <unistd.h> >>> ++#include <sys/mount.h> >>> ++#include <sys/stat.h> >>> ++#include <sys/types.h> >>> ++#include <sys/wait.h> >>> + >>> + #include "../log.h" >>> + #include "init.h" >>> + >>> ++static long >>> ++check_ramsize(void) >>> ++{ >>> ++ FILE *fp; >>> ++ char line[256]; >>> ++ char *key; >>> ++ long val = 0; >>> ++ >>> ++ fp = fopen("/proc/meminfo", "r"); >>> ++ if(fp == NULL) >>> ++ { >>> ++ ERROR("Can't open /proc/meminfo: %s\n", strerror(errno)); >>> ++ return errno; >>> ++ } >>> ++ >>> ++ while(fgets(line, sizeof(line), fp)) >>> ++ { >>> ++ key = strtok(line, ":"); >>> ++ val = atol(strtok(NULL, " kB\n")); >>> ++ >>> ++ if (!key || !val) >>> ++ continue; >>> ++ >>> ++ if (!strcasecmp(key, "MemTotal")) >>> ++ break; >>> ++ } >>> ++ >>> ++ fclose(fp); >>> ++ >>> ++ return val; >>> ++} >>> ++ >>> ++static int >>> ++mount_zram_on_tmp(void) >>> ++{ >>> ++ FILE *fp; >>> ++ long zramsize = (check_ramsize() / 2); >>> ++ pid_t pid; >>> ++ >>> ++ if(!zramsize) >>> ++ { >>> ++ ERROR("Can't read size of RAM. Assuming 16 MB.\n"); >>> ++ zramsize = 8192; >>> ++ } >>> ++ >>> ++ fp = fopen("/sys/block/zram0/disksize", "r+"); >>> ++ if(fp == NULL) >>> ++ { >>> ++ ERROR("Can't open /sys/block/zram0/disksize: %s\n", >>> strerror(errno)); >>> ++ return errno; >>> ++ } >>> ++ >>> ++ fprintf(fp, "%ld", (zramsize * 1024)); >>> ++ >>> ++ fclose(fp); >>> ++ >>> ++ pid = fork(); >>> ++ >>> ++ if (!pid) >>> ++ { >>> ++ char *mkfs[] = { "/sbin/mke2fs", "-b", "4096", "-F", "-L", >>> "TEMP", "-m", "0", "/dev/zram0", NULL }; >>> ++ int fd = open("/dev/null", O_RDWR); >>> ++ >>> ++ if (fd > -1) { >>> ++ dup2(fd, STDIN_FILENO); >>> ++ dup2(fd, STDOUT_FILENO); >>> ++ dup2(fd, STDERR_FILENO); >>> ++ if (fd > STDERR_FILENO) >>> ++ close(fd); >>> ++ } >>> ++ >>> ++ execvp(mkfs[0], mkfs); >>> ++ ERROR("Can't exec /sbin/mke2fs\n"); >>> ++ exit(-1); >>> ++ } >>> ++ >>> ++ if (pid <= 0) >>> ++ { >>> ++ ERROR("Can't exec /sbin/mke2fs\n"); >>> ++ return -1; >>> ++ } else { >>> ++ waitpid(pid, NULL, 0); >>> ++ } >>> ++ >>> ++ if(mount("/dev/zram0", "/tmp", "ext2", MS_NOSUID | MS_NODEV | >>> MS_NOATIME, "check=none,errors=continue,noquota") < 0) >>> ++ { >>> ++ ERROR("Can't mount /dev/zram0 on /tmp: %s\n", >>> strerror(errno)); >>> ++ return errno; >>> ++ } >>> ++ >>> ++ LOG("Using up to %ld kB of RAM as ZRAM storage on /mnt\n", >>> zramsize); >>> ++ return 0; >>> ++} >>> ++ >>> + static void >>> +-early_mounts(void) >>> ++mount_tmpfs_on_tmp(void) >>> + { >>> +- mount("proc", "/proc", "proc", MS_NOATIME, 0); >>> +- mount("sysfs", "/sys", "sysfs", MS_NOATIME, 0); >>> ++ char line[256]; >>> ++ long tmpfssize = (check_ramsize() / 2); >>> + >>> +- mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID | MS_NODEV | >>> MS_NOATIME, NULL); >>> +- mkdir("/tmp/run", 0777); >>> +- mkdir("/tmp/lock", 0777); >>> +- mkdir("/tmp/state", 0777); >>> +- symlink("/tmp", "/var"); >>> ++ if(!tmpfssize) >>> ++ { >>> ++ ERROR("Can't read size of RAM. Assuming 16 MB.\n"); >>> ++ tmpfssize = 8192; >>> ++ } >>> + >>> +- mount("tmpfs", "/dev", "tmpfs", MS_NOATIME, >>> "mode=0755,size=512K"); >>> +- mkdir("/dev/shm", 0755); >>> +- mkdir("/dev/pts", 0755); >>> +- mount("devpts", "/dev/pts", "devpts", MS_NOATIME, "mode=600"); >>> ++ snprintf(line, 256, "size=%ldk", tmpfssize); >>> ++ mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID | MS_NODEV | >>> MS_NOATIME, line); >>> ++ LOG("Using up to %ld kB of RAM as TMPFS storage on /tmp\n", >>> tmpfssize); >>> + } >>> + >>> + static void >>> +@@ -50,6 +146,25 @@ early_dev(void) >>> + } >>> + >>> + static void >>> ++early_mounts(void) >>> ++{ >>> ++ mount("proc", "/proc", "proc", MS_NOATIME, 0); >>> ++ mount("sysfs", "/sys", "sysfs", MS_NOATIME, 0); >>> ++ mount("tmpfs", "/dev", "tmpfs", MS_NOATIME, >>> "mode=0755,size=512K"); >>> ++ mkdir("/dev/shm", 0755); >>> ++ mkdir("/dev/pts", 0755); >>> ++ mount("devpts", "/dev/pts", "devpts", MS_NOATIME, "mode=600"); >>> ++ early_dev(); >>> ++ >>> ++ if(mount_zram_on_tmp() !=0) >>> ++ mount_tmpfs_on_tmp(); >>> ++ mkdir("/tmp/run", 0777); >>> ++ mkdir("/tmp/lock", 0777); >>> ++ mkdir("/tmp/state", 0777); >>> ++ symlink("/tmp", "/var"); >>> ++} >>> ++ >>> ++static void >>> + early_console(const char *dev) >>> + { >>> + struct stat s; >>> +@@ -87,7 +202,6 @@ early(void) >>> + return; >>> + >>> + early_mounts(); >>> +- early_dev(); >>> + early_env(); >>> + early_console("/dev/console"); >>> + >>> --- a/package/system/zram-swap/files/zram.init >>> +++ b/package/system/zram-swap/files/zram.init >>> @@ -15,10 +15,10 @@ zram_size() # in megabytes >>> local ram_size="$( ram_size )" >>> if [ -z "$zram_size" ]; then >>> - # e.g. 6mb for 16mb-routers or 61mb for 128mb-routers >>> - echo $(( $ram_size / 2048 )) >>> + # e.g. 3200kb for 16mb-routers or 25600kb for 128mb-routers >>> + echo $(( $ram_size * 2 / 10 )) >>> else >>> - echo "$zram_size" >>> + echo $(( $zram_size * 1024 )) >>> fi >>> } >>> @@ -54,9 +54,9 @@ zram_applicable() >>> zram_dev() >>> { >>> - local core="$1" >>> + local core=$(( $1 + 1 )) >>> - echo "/dev/zram${core:-0}" >>> + echo "/dev/zram${core:-1}" >>> } >>> zram_reset() >>> @@ -95,10 +95,10 @@ start() >>> zram_dev="$( zram_dev "$core" )" >>> zram_applicable "$zram_dev" || return 1 >>> - logger -s -t zram_start -p daemon.debug "activating >>> '$zram_dev' for swapping ($zram_size MegaBytes)" >>> + logger -s -t zram_start -p daemon.debug "activating >>> '$zram_dev' for swapping ($zram_size KiloBytes)" >>> zram_reset "$zram_dev" "enforcing defaults" >>> - echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( >>> basename $zram_dev )/disksize" >>> + echo $(( $zram_size * 1024 )) >"/sys/block/$( basename >>> $zram_dev )/disksize" >>> mkswap "$zram_dev" >>> swapon "$zram_dev" >>> } done >>> @@ -120,4 +120,3 @@ stop() >>> zram_reset "$zram_dev" "claiming memory back" >>> } done >>> } >>> - >>> --- >>> a/target/linux/generic/patches-3.10/998_zram_make_2_devices_by_default.patch >>> >>> +++ >>> b/target/linux/generic/patches-3.10/998_zram_make_2_devices_by_default.patch >>> >>> @@ -0,0 +1,11 @@ >>> +--- a/drivers/staging/zram/zram_drv.c >>> ++++ b/drivers/staging/zram/zram_drv.c >>> +@@ -40,7 +40,7 @@ static int zram_major; >>> + struct zram *zram_devices; >>> + >>> + /* Module params (documentation at end) */ >>> +-static unsigned int num_devices = 1; >>> ++static unsigned int num_devices = 2; >>> + >>> + static void zram_stat64_add(struct zram *zram, u64 *v, u64 inc) >>> + { >>> _______________________________________________ >>> openwrt-devel mailing list >>> [email protected] >>> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel >>> >> _______________________________________________ >> openwrt-devel mailing list >> [email protected] >> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel > _______________________________________________ > openwrt-devel mailing list > [email protected] > https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
