linux 3.15之后添加了個和mac一樣的功能,內存壓縮zram, 之前還有個zswap, zram通常是以模塊的方式被放在系統里面的,以便在可以根據需求的不同,定制化加載.
raspberry pi3的1g內存容量還是太小了,設定了zram可以擠點內存出來用, android4.4的數據貌似是40%.
貼代碼(從desktop的ubuntu上抄來的)
設定代碼:
#!/bin/sh # load dependency modules NRDEVICES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/') if modinfo zram | grep -q ' zram_num_devices:' 2>/dev/null; then MODPROBE_ARGS="zram_num_devices=${NRDEVICES}" elif modinfo zram | grep -q ' num_devices:' 2>/dev/null; then MODPROBE_ARGS="num_devices=${NRDEVICES}" else exit 1 fi modprobe zram $MODPROBE_ARGS # Calculate memory to use for zram (1/2 of ram) totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/ *.*//'` mem=$(((totalmem / 2 / ${NRDEVICES}) * 1024)) # initialize the devices for i in $(seq ${NRDEVICES}); do DEVNUMBER=$((i - 1)) echo $mem > /sys/block/zram${DEVNUMBER}/disksize mkswap /dev/zram${DEVNUMBER} swapon -p 5 /dev/zram${DEVNUMBER} done
關閉代碼:
#!/bin/sh if DEVICES=$(grep zram /proc/swaps | awk '{print $1}'); then for i in $DEVICES; do swapoff $i done fi rmmod zram
想要開機就設定的話,只要把設定的代碼添加到/etc/rc.local,開機自動設定
啟動與否可以使用下面的命令查看:
swapon -s
輸出結果如下
Filename Type Size Used Priority /dev/zram0 partition 118464 0 5 /dev/zram1 partition 118464 0 5 /dev/zram2 partition 118464 0 5 /dev/zram3 partition 118464 0 5
可以看到分了4塊和processor的數量是相同, 總數是總可用的物理內存的一半,至於為啥和processor數一樣會比較好,原因未知
# 2016/09/03
經過這么多天的測試和使用,結論是raspberry 目前的版本還是不要使用比較好,貌似有bug,某些情況下會導致當你還有空閑內存的時候,內存分配不出來,現象如很多程序已啟動就segment fault了, 需要重啟機器才能夠使用, 不推薦使用。
