Page 1 of 4

RAMzSWAP (сжатый своп без использования диска)

PostPosted: 28 Apr 2011, 16:20
by Sekator500
Поскольку памяти вечно не хватает, а свопить на диск не всегда есть возможность приходится искать нестандартные методы решения проблемы в частности как вариант свопить прямо в память при этом сжимая ее содержимое таким образом мы несколько увеличиваем объем памяти не используя при этом дополнительные устройства.

Проект основан на compcache v0.5.4 тут страница и и доп информация типа доков и прочего http://code.google.com/p/compcache/ в принципе я особо ничего не изменял а только слил все в кучу дабы получить один модуль и несколько подправил код согласно нашего ядра, конечно есть версии compcache и по новее но присутствуют проблемы с портированием так что пока только версия 0.5.х

Я немного протестировал и в принципе все работает правда стресс тест я так и не прошел но при полном отсутствии памяти я смог смотреть HD фильм и сжимать с помощью UPX модуль PHP весом в 13мегабайт на режиме 8 чего ранее я сделать не смог бы по причине банальной нехватки памяти. Так же проделывал тесты на новой прошивке от плейон и к моему удивлению она больше не падает ну по крайней мере пока хотя например на том же флеше что со свопом что без получаю один и тот же результат все-таки своп не является расширителем памяти но помочь в данном вопросе он может.

Короче пробуйте народ...


Установка:
Скопируйте файл zswapvenus.ko в /usr/local/etc и добавьте в /usr/local/etc/rcS следующие строки перед активацией основного свопа ищите строку начинающуюся с swapon
Code: Select all
/sbin/insmod /usr/local/etc/zswapvenus.ko disksize_kb=32768
mknod /dev/ramzswap0 b `cat /proc/devices | sed -n 's/\([0-9]\+\) ramzswap0/\1/p'` 0
swapon /dev/ramzswap0

Размер диска выставлен на 32мега в принципе больше и не надо хотя можете поэкспериментировать, дополнительная информация по использованию драйвера на сайте проекта.
Состояние памяти смотрим стандартной командой free и состояние свопа командой cat /proc/ramzswap
zswapvenus.tar
(29 KiB) Downloaded 729 times




Обновление 29/04/2011

Обновленный порт версии compcache 0.6.2 , детально об изменениях и новых возможностях смотрите на сайте проекта.

Установка:
Удаляем предыдущий драйвер и копируем содержимое архива в /usr/local/etc , поскольку поменялись имена строчки запуска следует заменить на:
Code: Select all
/sbin/insmod /usr/local/etc/ramzswap.ko num_devices=1 disksize_kb=32768
mknod /dev/ramzswap0 b `cat /proc/devices | sed -n 's/\([0-9]\+\) ramzswap/\1/p'` 0
swapon /dev/ramzswap0

Состояние свопа теперь доступно через /usr/local/etc/rzscontrol /dev/ramzswap0 --stats
zmem.tar
(75 KiB) Downloaded 748 times


Опять же пробуем, отписываемся если что...

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 28 Apr 2011, 16:46
by FarVoice
Кайф! Спасибо, Секатор! Буду пробовать.

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 28 Apr 2011, 17:06
by Lossless
Браво! Отличная идея! После праздников попробую собрать версию постарше...

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 28 Apr 2011, 17:08
by vasa666
Так надо написать?
Code: Select all
#!/bin/sh

ifconfig eth0 192.168.0.2 netmask 255.255.255.0
#route add default gw 192.168.0.1
#mount -t nfs -o nolock 192.168.0.1:/nfs/rootfs /mnt

#/sbin/modprobe ide-cd
dd if=/Test.fat of=/dev/rd/0
mount -t vfat /dev/rd/0 /mnt/rd
/sbin/insmod /usr/local/etc/zswapvenus.ko disksize_kb=32768
mknod /dev/ramzswap0 b `cat /proc/devices | sed -n 's/\([0-9]\+\) ramzswap0/\1/p'` 0
swapon /dev/ramzswap0
swapon /mnt/rd/swap.img

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 28 Apr 2011, 17:25
by Virtual
проверил, работает!
на прошивке рев 4.1 :)

модуль уложил сюда:
Code: Select all
/lib/modules/2.6.12.6-VENUS/kernel/fs/ramswap/zswapvenus.ko

далее
Code: Select all
umount /etc !!!


в файле:
/etc/init.d/rcS1
сразу после строки:
# We need to direct standard output to /dev/console or the output of script rcS will disappear.


добавил код:
Code: Select all
/sbin/insmod /lib/modules/2.6.12.6-VENUS/kernel/fs/ramswap/zswapvenus.ko disksize_kb=32768
mknod /dev/ramzswap0 b `cat /proc/devices | sed -n 's/\([0-9]\+\) ramzswap0/\1/p'` 0
swapon /dev/ramzswap0


сразу несколько вопросов правок!:
.что если модуль не загрузится иль еще чего? думаю перед mknod нуно проверку сделать на наличие ramzswap0
.что если mknod не отработает? может проверить наличие /dev/ramzswap0 перед swapon?

ЗЫ все это думаю стоит оформить в патчик :).....

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 28 Apr 2011, 17:35
by Virtual
помучал самоя тяжелой хренью :) Оперой.... не вылетело :(. все работало.

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 29 Apr 2011, 14:58
by Sekator500
vasa666 wrote:Так надо написать?

Сойдет...

Virtual wrote:сразу несколько вопросов правок!:
.что если модуль не загрузится иль еще чего? думаю перед mknod нуно проверку сделать на наличие ramzswap0
.что если mknod не отработает? может проверить наличие /dev/ramzswap0 перед swapon?

Проверки можно конечно поставить, дело хозяйское...



Обновил версию, зрите в шапку :arrow:

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 02 May 2011, 18:26
by Ajax
/usr/local/etc/rzscontrol /dev/ramzswap0 --stats
Не могу просмотреть состояние пишет что отказано в доступе..Что делать? HDP-R1 4.1

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 02 May 2011, 22:47
by Sekator500
Ajax wrote:/usr/local/etc/rzscontrol /dev/ramzswap0 --stats
Не могу просмотреть состояние пишет что отказано в доступе..Что делать? HDP-R1 4.1


Скорее проблемы с правами смотрите chmod если нет копию ошибки в студию...

Re: RAMzSWAP (сжатый своп без использования диска)

PostPosted: 03 May 2011, 05:17
by Genrix60
compcache v0.5.4 работает без проблем.
Порт версии compcache 0.6.2 не работает.
Не "закралась" ли тут ошибка во второй строке?(подчеркнуто)
mknod /dev/ramzswap0 b `cat /proc/devices | sed -n 's/\([0-9]\+\) ramzswap/\1/p'` 0
Может всё-таки так нужно?
mknod /dev/ramzswap0 b `cat /proc/devices | sed -n 's/\([0-9]\+\) ramzswap0/\1/p'` 0