OpenWrt – Diff between revs 2 and 3
?pathlinks?
Rev 2 | Rev 3 | |||
---|---|---|---|---|
Line 14... | Line 14... | |||
14 | local zram_size="$( uci -q get system.@system[0].zram_size_mb )" |
14 | local zram_size="$( uci -q get system.@system[0].zram_size_mb )" |
|
15 | local ram_size="$( ram_size )" |
15 | local ram_size="$( ram_size )" |
|
Line 16... | Line 16... | |||
16 | |
16 | |
|
17 | if [ -z "$zram_size" ]; then |
17 | if [ -z "$zram_size" ]; then |
|
18 | # e.g. 6mb for 16mb-routers or 61mb for 128mb-routers |
18 | # e.g. 6mb for 16mb-routers or 61mb for 128mb-routers |
|
19 | echo $(( ram_size / 2048 )) |
19 | echo $(( $ram_size / 2048 )) |
|
20 | else |
20 | else |
|
21 | echo "$zram_size" |
21 | echo "$zram_size" |
|
22 | fi |
22 | fi |
|
Line 23... | Line 23... | |||
23 | } |
23 | } |
|
24 | |
24 | |
|
25 | zram_applicable() |
25 | zram_applicable() |
|
Line -... | Line 26... | |||
- | 26 | { |
||
- | 27 | local zram_dev="$1" |
||
- | 28 | |
||
- | 29 | grep -sq ^"$zram_dev " /proc/swaps && { |
||
- | 30 | logger -s -t zram_applicable -p daemon.notice "[OK] '$zram_dev' already active" |
||
26 | { |
31 | return 1 |
|
27 | local zram_dev="$1" |
32 | } |
|
28 | |
33 | |
|
29 | [ -e "$zram_dev" ] || { |
34 | [ -e "$zram_dev" ] || { |
|
Line 47... | Line 52... | |||
47 | } |
52 | } |
|
48 | } |
53 | } |
|
Line 49... | Line 54... | |||
49 | |
54 | |
|
50 | zram_dev() |
55 | zram_dev() |
|
51 | { |
56 | { |
|
- | 57 | local core="$1" |
||
52 | local idx="$1" |
58 | |
|
53 | echo "/dev/zram${idx:-0}" |
59 | echo "/dev/zram${core:-0}" |
|
Line 54... | Line 60... | |||
54 | } |
60 | } |
|
55 | |
61 | |
|
56 | zram_reset() |
62 | zram_reset() |
|
Line 61... | Line 67... | |||
61 | |
67 | |
|
62 | logger -s -t zram_reset -p daemon.debug "$message via $proc_entry" |
68 | logger -s -t zram_reset -p daemon.debug "$message via $proc_entry" |
|
63 | echo "1" >"$proc_entry" |
69 | echo "1" >"$proc_entry" |
|
Line 64... | Line 70... | |||
64 | } |
70 | } |
|
65 | |
71 | |
|
66 | zram_getdev() |
72 | list_cpu_idx() |
|
67 | { |
- | ||
68 | #get unallocated zram dev |
- | ||
69 | local zdev=$( zram_dev ) |
73 | { |
|
70 | |
- | ||
71 | if [ "$(mount | grep $zdev)" ]; then |
- | ||
72 | local idx=`cat /sys/class/zram-control/hot_add` |
- | ||
73 | zdev="$( zram_dev $idx )" |
- | ||
74 | fi |
- | ||
75 | |
- | ||
76 | echo $zdev |
- | ||
77 | } |
- | ||
78 | |
- | ||
79 | zram_comp_algo() |
74 | # Offset by 1 if /dev/zram0 is in use by /tmp |
|
80 | { |
75 | if [ "$(mount | grep /dev/zram0)" ]; then |
|
81 | local dev="$1" |
- | ||
82 | local zram_comp_algo="$( uci -q get system.@system[0].zram_comp_algo )" |
76 | local line i=1 |
|
83 | |
77 | # Hot-add new ZRAM device (if necessary) |
|
84 | if [ -z "$zram_comp_algo" ] || [ ! -e /sys/block/$( basename $dev )/comp_algorithm ]; then |
78 | if [ ! -b /dev/zram1 ]; then |
|
85 | return 0 |
- | ||
86 | fi |
- | ||
87 | |
- | ||
88 | if [ `grep -c "$zram_comp_algo" /sys/block/$( basename $dev )/comp_algorithm` -ne 0 ]; then |
- | ||
89 | logger -s -t zram_comp_algo -p daemon.debug "Set compression algorithm '$zram_comp_algo' for zram '$dev'" |
79 | cat /sys/class/zram-control/hot_add |
|
90 | echo $zram_comp_algo > "/sys/block/$( basename $dev )/comp_algorithm" |
- | ||
91 | else |
- | ||
92 | logger -s -t zram_comp_algo -p daemon.debug "Compression algorithm '$zram_comp_algo' is not supported for '$dev'" |
- | ||
93 | fi |
- | ||
94 | } |
- | ||
95 | |
- | ||
96 | zram_comp_streams() |
80 | fi |
|
97 | { |
- | ||
98 | local dev="$1" |
- | ||
99 | local logical_cpus=$( grep -ci "^processor" /proc/cpuinfo ) |
- | ||
100 | [ $logical_cpus -gt 1 ] || return 1 |
- | ||
101 | local zram_comp_streams="$( uci -q get system.@system[0].zram_comp_streams )" |
- | ||
102 | [ -n "$zram_comp_streams" ] && [ "$zram_comp_streams" -le "$logical_cpus" ] || zram_comp_streams=$logical_cpus |
- | ||
103 | if [ -e /sys/block/$( basename $dev )/max_comp_streams ]; then |
- | ||
104 | logger -s -t zram_comp_streams -p daemon.debug "Set max compression streams to '$zram_comp_streams' for zram '$dev'" |
81 | else |
|
- | 82 | local line i=0 |
||
- | 83 | fi |
||
- | 84 | |
||
- | 85 | while read line; do { |
||
- | 86 | case "$line" in |
||
- | 87 | [Pp]rocessor*) |
||
- | 88 | echo $i |
||
- | 89 | i=$(( $i + 1 )) |
||
- | 90 | ;; |
||
105 | echo $zram_comp_streams > /sys/block/$( basename $dev )/max_comp_streams |
91 | esac |
|
Line 106... | Line 92... | |||
106 | fi |
92 | } done <"/proc/cpuinfo" |
|
107 | } |
93 | } |
|
108 | |
- | ||
109 | start() |
- | ||
110 | { |
- | ||
111 | local zram_size="$( zram_size )" |
94 | |
|
112 | local zram_dev |
95 | start() |
|
113 | |
- | ||
114 | if [ $( grep -cs zram /proc/swaps ) -ne 0 ]; then |
- | ||
Line 115... | Line 96... | |||
115 | logger -s -t zram_start -p daemon.notice "[OK] zram swap is already mounted" |
96 | { |
|
116 | return 1 |
97 | # http://shmilyxbq-compcache.googlecode.com/hg/README |
|
117 | fi |
- | ||
118 | |
- | ||
Line -... | Line 98... | |||
- | 98 | # if >1 cpu_core, reinit kmodule with e.g. num_devices=4 |
||
119 | zram_dev="$( zram_getdev )" |
99 | |
|
120 | zram_applicable "$zram_dev" || return 1 |
100 | local zram_size="$( zram_size )" |
|
- | 101 | local zram_dev core |
||
- | 102 | |
||
- | 103 | for core in $( list_cpu_idx ); do { |
||
121 | |
104 | zram_dev="$( zram_dev "$core" )" |
|
122 | logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)" |
105 | zram_applicable "$zram_dev" || return 1 |
|
123 | |
106 | |
|
124 | zram_reset "$zram_dev" "enforcing defaults" |
107 | logger -s -t zram_start -p daemon.debug "activating '$zram_dev' for swapping ($zram_size MegaBytes)" |
|
- | 108 | |
||
125 | zram_comp_algo "$zram_dev" |
109 | zram_reset "$zram_dev" "enforcing defaults" |
|
Line 126... | Line 110... | |||
126 | zram_comp_streams "$zram_dev" |
110 | echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( basename $zram_dev )/disksize" |
|
127 | echo $(( $zram_size * 1024 * 1024 )) >"/sys/block/$( basename "$zram_dev" )/disksize" |
111 | mkswap "$zram_dev" |
|
128 | mkswap "$zram_dev" |
112 | swapon "$zram_dev" |
|
Line 129... | Line 113... | |||
129 | swapon "$zram_dev" |
113 | } done |
|
130 | } |
- | ||
131 | |
114 | } |
|
132 | stop() |
115 | |
|
- | 116 | stop() |
||
133 | { |
117 | { |
|
134 | local zram_dev |
118 | local zram_dev proc_entry |
|
135 | |
119 | |
|
136 | for zram_dev in $( grep zram /proc/swaps |awk '{print $1}' ); do { |
120 | for core in $( list_cpu_idx ); do { |
|
- | 121 | zram_dev="$( zram_dev "$core" )" |
||
- | 122 | proc_entry="/sys/block/$( basename "$zram_dev" )/reset" |
||
137 | logger -s -t zram_stop -p daemon.debug "deactivate swap $zram_dev" |
123 | |
|
138 | swapoff "$zram_dev" && zram_reset "$zram_dev" "claiming memory back" |
124 | grep -sq ^"$zram_dev " /proc/swaps && { |