lamajker, возьмусь я за это,давно хотел поведать и что это вообще такое и с чем,зачем, это едят
Все это можно узнать,почитав man'ы линукса и соответствующий материал
Есть такие понятия как "страницы данных","демоны","грязные данные" и многое другое,все это относится к управлению системы ядром,которое оно запускает
То есть к примеру возьмем этот блок кода:
echo "4096" > /proc/sys/vm/min_free_kbytes
echo "0" > /proc/sys/vm/oom_kill_allocating_task;
echo "0" > /proc/sys/vm/panic_on_oom;
echo "0" > /proc/sys/vm/laptop_mode;
echo "0" > /proc/sys/vm/swappiness
echo "50" > /proc/sys/vm/vfs_cache_pressure
echo "90" > /proc/sys/vm/dirty_ratio
echo "70" > /proc/sys/vm/dirty_background_ratio
Да,это некоторые значения виртуальной машины,но не далвик-кэша,а того что грузиться в рам и кэш память системы и к примеру возьмем
/proc/sys/vm/min_free_kbytes - тут задается в килобайтах минимальное значение свободной памяти,которое должно быть в резерве для "атомных" данных(определение точно не помню),но если значение в сторону уменьшения,то могут быть ошибки нехватки памяти при большом количестве процессов
/proc/sys/vm/oom_kill_allocating_task - значение,управляющие активацией или деактивацией системного таскиллера,который в случае нехватки памяти начинает убивать процессы,не удовлетворяющие его запросам,в режимах 0(просканировав список процессов,выбирает на основе эвристики процессы "изгои" и убивает их) и 1(просто убивает любой процесс,чтобы высвободить память)
/proc/sys/vm/panic_on_oom - тут тоже что и выше,только приоритетом выше и убивает на прямую из ядра,если значение стоит не в 1.Если же 0,то работает принцип
oom_kill/proc/sys/vm/laptop_mode устанавливаемое значение это таймер: к примеру если стоит 1, то 1*5=5 секунд,каждые 5 секунд "демон" проверяет данные,на которые влияют параметры dirty_background_ratio (процент от общей памяти,страниц данных,который может храниться в кэше) и dirty_ratio(процент от общей памяти,тех страниц данных,которые будут сброшены из кэша на диск)
/proc/sys/vm/swappiness сколько процентов свопа может быть задействовано для работы со страницами данных
/proc/sys/vm/vfs_cache_pressure в общем контролирует тенденцию ядра освобождать системную память кэша для работы с каталогами и дескрипторами,тут в значения больше 100 предпочитаю возвращать иноды и дескрипторы
Более подробно есть тут
http://www.win.tue.nl/~aeb/linux/lk/lk-8.html http://www.linuxinsight.com/proc_sys_vm_hierarchy.html (на английском)
LOOP=`ls -d /sys/block/loop*`;
RAM=`ls -d /sys/block/ram*`;
MMC=`ls -d /sys/block/mmc*`;
for j in $LOOP $RAM
do
echo "0" > $j/queue/rotational;
echo "2048" > $j/queue/read_ahead_kb;
done
Тут на системные диски,карты памяти,рам диски задается размеры кэша
read_ahead_kb,увеличение которого способствует увеличению скорости чтения/записи данных на эти диски
rotational - не помню на что влияет,инфу точную не нашел
for i in \
`find /data -iname "*.db"`
do \
sqlite3 $i 'VACUUM;';
done
Дефрагментация базы данных приложений,влияет на скорость их загрузки,но тут получается что каждый раз при старте системы это происходит,а разве в винде вы так часто ее производите?
Да еще и подмечу,если в папках /system/bin и /system/xbin нет бинарика sqlite3,то это бесполезная вещь
А вообще правильней еще добавить
mount -t debugfs none /sys/kernel/debug
echo NO_NORMALIZED_SLEEPER > /sys/kernel/debug/sched_features
А чтоб проверить,поддерживает ли вообще ядро это - смонтировать в терминале
mount -t debugfs none /sys/kernel/debug и затем посмотреть есть ли это на самом деле
mount -o remount,rw -t yaffs2 `grep /system /proc/mounts | cut -d' ' -f1` /system
cd /system/app
for z in *.apk; do
zipalign -c 4 $z
if [ "$?" -ne "0" ]; then
echo zipalign $z !
zipalign -f 4 $z /tmp/$z
cp /tmp/$z $z
rm /tmp/$z
fi
done
mount -o remount,ro -t yaffs2 `grep /system /proc/mounts | cut -d' ' -f1` /system
Zipalign так же применяется как и Defraq db,но для сжатия apk файлов,что позволяет уменьшить их размер,тоже нужен бинарик zipalign и по сути применять один раз
for k in $(busybox mount | grep relatime | cut -d " " -f3)
do
sync
busybox mount -o remount,noatime,nodiratime $k
done
Опции монтирования системных разделов,которые не дают запись данных без специальных задач,влияет на сон девайса и на работу фоновых процессов(оптимальней чем realtime,но могут быть проблемы у gmail клиента)
echo "2048" > /sys/devices/virtual/bdi/179:0/read_ahead_kb
Тоже самой что было выше,только отдельно для увеличения дискового кэша карты памяти
for a in $MTD $MMC
do
echo "512" > $a/queue/;
done
Сколько потоков может быть выделено для ввода/вывода данных для системных разделов и карты памяти,увеличение может повлиять на скорость,но могут быть проблемы в работе с памятью
busybox mount -o remount,noatime,noauto_da_alloc,nosuid,nodev,nodiratime,barrier=0,nobh /system
busybox mount -o remount,noatime,noauto_da_alloc,nosuid,nodev,nodiratime,barrier=0,nobh /data
busybox mount -o remount,noatime,noauto_da_alloc,nosuid,nodev,nodiratime,barrier=0,nobh /cache
Почти все опции монтирования доступны только для разделов,имеющих формат файловой системы ext*,если же она yaffs2,то действует только
noatime,nodiritime, а это как было описано выше
echo "vr" > /sys/block/mmcblk0/queue/scheduler
or
echo "sio" > /sys/block/mmcblk0/queue/scheduler
done
Шедулеры управления записью,чтению,данных,страниц данных для системных разделов,у каждого свои методы работы(в данном случае для карты памяти mmcblk0)
Если ядро их не поддерживает,то они бесполезны,в основном в ядрах идут
noop,cfq,deadlineСкажу от себя,все готовые твики - не совсем то что подходит для того или иного девайса,и тут есть свои нюансы:точки монтирования,шедулеры,режимы цпу и тому подобное
Добавлено 07.04.2012, 21:44:Rohff, что прописал в build.prop?
но я думаю это можешь удалить,так как это уже банально для скриптов,каждый автор уже это включает