Разгон Firefox при помощи TmpFS

    Firefox использует SQLite для хранения большинства служебной информации, что делает его работу заметно медленнее. Во время доступа к своей SQLite-базе, Firefox «замирает», когда другие процессы в системе активно используют IO-операции с диском.
    Однако, есть решение по переносу профиля Firefox в раздел RAM, используя TmpFS.

    Примечание: это решение было предложено на этом форуме. Я всего лишь слегка модифицировал его и представляю на суд общественности решение, использующее rsync для синхронизации профиля Firefox между RAM и жестким диском.

    Итак, подготовим наш профиль, сделаем его легче. В первоисточнике предлагаются следующие изменения в настройках FF (посредством перехода по адресу about:config в FF):
    set browser.cache.disk.capacity to 20000
    set browser.safebrowsing.enabled to false
    set browser.safebrowsing.malware.enabled to false


    * This source code was highlighted with Source Code Highlighter.

    Затем скопируем наш профиль в другую директорию. По умолчанию, профиль находится в ~/.mozilla/firefox/ и выглядит на манер xxxxxxxx.default.
    Создадим новую директорию, назвав ее profile, затем копируем содержимое вашего реального профиля ( xxxxxxxx.default ) в созданную папку profile.
    Однако, перед этим удалим файлы вида urlclassifier*.sqlite в профиле и очистим кэш браузера.
    cd ~/.mozilla/firefox/
    mkdir profile
    cd xxxxxxxx.default/
    rm -f  urlclassifier*.sqlite
    cd ../
    cp -r *.default/* profile/


    * This source code was highlighted with Source Code Highlighter.


    Примечание: подразумевается, что у вас один профиль Firefox. Если несколько — не огорчайтесь, это руководство легко применяется и для остальных профилей Firefox.
    В дальнейшем, будем иметь ввиду, что мы используем профиль xxxxxxxx.default, однако на практике замените его на имя вашего профиля в Firefox.
    То же относительно имени пользователя в системе: в настоящем руководстве используется имя xxxx, что на практике подразумевает имя вашего пользователя в системе.

    Итак, приступаем к самой интересной части.

    Создаем раздел RAM.


    Добавьте следующую строку в файл /etc/fstab:
    firefox /home/xxxx/.mozilla/firefox/xxxxxxxx.default tmpfs size=128M,noauto,user,exec,uid=1000,gid=1000 0 0

    * This source code was highlighted with Source Code Highlighter.

    Само собой, измените значения в соответствии с вашим именем пользователя, директорией профиля Firefox и вашими uid и gid в системе.

    Тестируем профиль в RAM


    Теперь нам необходимо закрыть Firefox, поэтому нелишне запомнить (или записать) следующие шаги.
    Итак, закройте Firefox. Затем убедитесь, что ваш текущий профиль действительно скопирован в директорию ~/.mozilla/firefox/profile/. Теперь очистите ваш оригинальную директорию с профилем, т. е., просто сделайте ее пустой:
    cd ~/.mozilla/firefox/
    rm -Rf *.default/*


    * This source code was highlighted with Source Code Highlighter.


    Перед тем, как мы запустим Firefox, необходимо смонтировать раздел RAM, затем скопировать содержимое профиля в смонтированный раздел. В то же время, необходимо делать регулярное копирование обратно, из раздела RAM в директорию профиля на диске. В противнном случае, вы рискуете остаться без данных профиля, когда выключите компьютер.
    Во избежание этого, используем rsync (гораздо лучшее решение, чем tar [Прим. Автора]). Мы создадим небольшой скрипт, который проверяет наличие нашего профиля в RAM ( распакованного файла). Если это не так, мы монтируем раздел RAM и копируем в него наш профиль. Если же профиль присутствует в RAM, мы синхронизируем директорию профиля на диске с профилем в RAM.
    Итак, вот текст скрипта (назовем его tmpfs_firefox.sh):
    #!/bin/bash

    # Измените на соответствующее имя профиля
    PROFILE="xxxxxxxx.default"

    cd "${HOME}/.mozilla/firefox"

    if test -z "$(mount | grep -F "${HOME}/.mozilla/firefox/${PROFILE}" )"
    then
      mount "${HOME}/.mozilla/firefox/${PROFILE}"
    fi

    if test -f "${PROFILE}/.unpacked"
    then
      rsync -av --delete --exclude .unpacked ./"$PROFILE"/ ./profile/
    else
      rsync -av ./profile/ ./"$PROFILE"/
      touch "${PROFILE}/.unpacked"
    fi

    exit


    * This source code was highlighted with Source Code Highlighter.

    Итак, Firefox закрыт. Запустим скрипт в первый раз. Он смонтирует раздел в RAM и скопирует наш подготовленный профиль в него.
    Если вы теперь посмотрите директорию профиля, то увидите все необходимые файлы профиля:

    ~/tmpfs_firefox.sh
    ls ~/.mozilla/firefox/*.default/


    * This source code was highlighted with Source Code Highlighter.


    Запустим наш скрипт во второй раз. Этим самым мы синхронизируем сохраненный на диске профиль с профилем в RAM:
    ~/tmpfs_firefox.sh
    # Вы увидите нечто вроде:
    #  building file list ... done
    #  sent 36643 bytes received 20 bytes 73326.00 bytes sec
    #  total size is 45390178 speedup is 1238.04

    * This source code was highlighted with Source Code Highlighter.


    Теперь кульминация: тестируем Firefox.


    Во-первых, убедитесь, что профиль был корректно смонтирован в разделе RAM. Если хотите, вы можете попытаться отмонтировать раздел RAM и запустить наш скрипт снова. Если все гладко и ваш профиль в надлежащем состоянии, примонтирован — просто запускаем Firefox.
    Надеюсь, вы ощутили, что он работает теперь значительно быстрее. Возможно, это заметнее с так называемой фишкой « smart bar auto completion»: результаты дополнения должны выводиться мгновенно.
    Все же нам необходимо регулярная синхронизация профиля между диском и RAM. Мы можем делать это при выходе из системы, однако такое решение недостаточно надежно. Поскольку мы используем rsync для синхронизации, то можно запускать его довольно часто. Используем cron для этой задачи: будем запускать скрипт каждые 5 или 10 минут.
    Таким образом, даже если ваш компьютер внезапно отключится, вы всегда будете иметь свеженький профиль, сохраненный пару минут назад.
    crontab -e
    */5 * * * * $HOME/tmpfs_firefox.sh


    * This source code was highlighted with Source Code Highlighter.

    Для пущего удобства создадим еще один маленький скрипт для запуска Firefox. Он будет проверять, загружен ли профиль RAM перед загрузкой Firefox. Вы можете использовать этот вместо обычного ярлыка запуска Firefox:

    #!/bin/bash
    ~/tmpfs_firefox.sh
    firefox &
    exit


    * This source code was highlighted with Source Code Highlighter.


    Итоги.


    Мы сделали не так уж много:
    • обычный бэкап профиля Firefox
    • написали скрипт, монтирующий обычный профиль с диска в RAM
    • обеспечили довольно надежную синхронизацию профиля между RAM и жестким диском.
    • каждые 5 минут наш профиль сохраняется из RAM в директорию на диске.

    Несомненно, Firefox должен просто работать, как и раньше. Однако — значительно быстрее, чем раньше. Ценою всего лишь 128 мегабайт RAM!

    Источник: verot.net

    P.S. Однако, работает, как и описано. Почему и перевел :)
    Поделиться публикацией

    Комментарии 82

    • НЛО прилетело и опубликовало эту надпись здесь
        0
        для виндовс не так всё тривиально к сожалению…
        но вы можете использовать для этих целей любую программу которая создаёт виртуальный диск в RAM и монтировать этот диск как пустую папку ntfs…
        ну и + cmd скрипт который будет при апуске копировать запакованный профиль в вирутальный диск, а при закрытии проделывать обратную операцию
          0
          www.sly.ru/novyie-tehnologii/ram-disk.html
          никаких скриптов.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              профиль создать на рамдиске =)
              • НЛО прилетело и опубликовало эту надпись здесь
                  +1
                  Есть крепкие подозрения, что вам надо найти папку с профилем ФФ — и далее по аналогии, с поправкой на Виндовс.
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      запусти с ключем -p, создай новый профиль на рамдиске, потом из старого скопируй файлы в новый. и пользуйся новым
                        +1
                        а еще можно profile.ini отредактировать, и туда вписать путь к папке.
                        • НЛО прилетело и опубликовало эту надпись здесь
          +3
          :) К сожалению, нет.
          Во-первых, это перевод.
          Во-вторых, я уже давно не пользователь Windows.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Не могу с этим спорить. Создание аудио и работа с ним — не мой круг интересов.
            0
            Вот тут прочитайте — habrahabr.ru/blogs/i_am_clever/25065/. Весь процесс описан с чувством толком и расстановкой. :)
            • НЛО прилетело и опубликовало эту надпись здесь
            0
            ух… неплохо, очень неплохо =) Список адресной строки стал просто моментально отображаться, вов !)
              0
              Спасибо! Действительно работает!

              Но если б просто написал плагин для FF — думаю 15 000 в день были бы обеспечены!
                0
                Вроде вместо всего этого можно создать integer опцию toolkit.storage.synchronous со значением 0
                  0
                  Пардон?
                  0
                  crontab -e
                  */5 * * * * $HOME/.tmpfs_firefox.sh
                  Точка в названии .tmpfs_firefox.sh не лишняя? По тексту статьи файл назван без нее.
                    0
                    Хм. Перепроверил еще раз оригинал. Там точка присутствует.
                    Не скажу сразу… мозг уже утомлен, но, возможно, эта точка необходима для правильного указания пути cron-у.
                    Сегодня, простите, уже вряд ли предприму выяснения. :)
                      +1
                      Очепятка. Точка делает файл скрытым, дабы не мельтешил.
                        0
                        Точно. На свежую голову оно как-то лучше думать. Исправил.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          :) Поправил.
                      0
                      Спасибо, стало работать действительно быстро.
                        0
                        «и вот так firefox становится самым быстрым браузером» ;)
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            :)
                            По-настоящему шустрый огнелис наблюдается в Gentoo. Даже на слабых по нынешним меркам машинах (P1GHz/i810/256Mb).
                            Проверено, как говорится, на собственной шкуре.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                Ой-вей. У меня на Кубунте 8.04 откушивает православные метров 200-250 и не кричит даже. :)
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    0
                                    Возможно.
                                    Обычно у меня открыто около 15-20 вкладок. Причем, что характерно, треть-половина из них висит «мертвым» грузом :)
                                  0
                                  У меня тек он под x64 ядром и адобовским 32-бит флэш-плеером (завернутым в враппер какой-то), перешел на x86 (не только из-за этого) — проблемы прекратились
                                    0
                                    Самособранный фокс на 64-битной убунте и 64-битный флеш-плейер. Все отлично.
                                0
                                на первом десятке страниц разве что и всего чуть-чуть
                              0
                              Спасибо, очень полезная штука. Новая(фф3) адресная строка мне понравилась, удобные фичи появились, но как же раздражал тормоз при поиске, этот твик решил проблему, наверное единственную, по крайней мере которая сходу вспоминается, которая меня действительно доставала.
                                0
                                Проблем с английским не имею, но все же «set browser.cache.disk.capacity to 20000» можно и перевести, а не оформлять в виде кода.
                                  0
                                  куда быстрее то?
                                    0
                                    восстановление сессии после сбоя — под нож?
                                      0
                                      делал все в сонном состоянии и ошибся — вот результат


                                      вижу теперь хабр таким вот =)
                                        0
                                        но за скрипт все равно спасибо
                                          0
                                          нужно было закрыть фф, потом удалить, примонтировать, запустить скрипт(скопировать), а затем открыть фф. А вы, незакрывая фф, удалили весь профиль… =)
                                            0
                                            нет, я закрыл, а когда копировал набрал не верно — rm -rf вместо cp -rf
                                            потом отрыл показать что получилось =)
                                              0
                                              и сейчас тоже самое? если да, тогда Вы скорее всего не скопировали профиль в самом начале…
                                              p.s. а зачем здесь Вам флаг f в cp?
                                                0
                                                Интересный финт, с точки зрения «поломать-посмотреть» :) В любом случае, полезная информация, спасибо.
                                            0
                                            извиняюсь за, возможно, глупый вопрос. но, насколько я понимаю, этим самым способом мы отдаём 128 мб оперативы под личное пользование Фокса?!

                                            а что будет, когда ему потребуется 150 мб?

                                            ещё раз извиняюсь, я только начинаю свой путь в Линукс =)
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                0
                                                Вопрос был не о том.

                                                Что будет, если Firefox затребует 150МБ пространства у виртуального диска объёмом 128МБ?
                                            0
                                            Так насколько шустрее работает?
                                              0
                                              По моим наблюдениям, эдак процентов на 30-40.
                                              Оно, конечно, стоит еще учесть… эммм… момент «предвосхищения», эффект плацебо. Но где-то в таком районе.
                                              +2
                                              «Ценою всего лишь 128 мегабайт RAM!» — в былые годы за такую трату ресурсов пустили б «под нож»…
                                                0
                                                В былые годы создателей современных браузеров «под нож» пустили бы еще раньше, за такие требования к ресурсам.
                                                Но ведь все развивается, не так ли?
                                                  0
                                                  экстенсивный путь развития имеет свой предел, не так ли?
                                                    0
                                                    Любой путь (сиречь, способ достижения результата) может быть оптимизирован, с понятной целью. Нечто вроде закона Мерфи :)
                                                      0
                                                      Вселенная не погибнет от «тепловой смерти». И человечество распространиться на другие миры. Ж)
                                                  0
                                                  А что будет если лисе потребуется больше оперативы? У меня постоянно открыто 15-20 вкладов и от 250 мегов оперативы есть. Счетая что я лису не перезагружаю, а комп 24/7 работает, то через недельку уже гиг оперативы требует
                                                    0
                                                    Собственно, я в своих экспериментах выделял не 128, а 256 метров. За неделю не скажу, но со вчерашнего дня покуда все в норме :)
                                                    +1
                                                    А не кажется ли вам, что имеет смысл, вместо создания отдельного tmpfs диска, использовать уже готовый shm, который всё равно во всех современных системах обязательно есть, т.к. нужен glibcу?

                                                    Созадём поддиректорию в /dev/shm, ставим права какие надо и поехали.
                                                      +2
                                                      В общем, попробовал я с shm.

                                                      1. Профиль банально переносится в /dev/shm
                                                      2. В ${HOME}/.mozilla/firefox/${PROFILE} создаётся симлинк на /dev/shm/${PROFILE}
                                                      3. Создаётся директория ${HOME}/.firefox/${PROFILE} и скрипт запуска-останова Firefox ${HOME}/bin/firefox.sh, как у топикстартера, только попроще, т.к. без монтирования и т. д.

                                                      После такого фокс стал стартовать пошустрее… как-то других особых ускорений не заметил пока. Но я минут пять всего так работаю :)

                                                      Плюсы:
                                                      — Размер профиля ограничен только объёмом RAM. В отличие от tmpfs, для которой выделил место — и оно недоступно для проргамм, даже если не используется под файлы, shm — динамический рамдиск, растягивается, когда набиваешь его файлами, и сжимается, когда их оттуда удаляешь.
                                                      — Нет никаких команд монтирования и прочей подобной фигни. Так же как и собственно tmpfs самой нет, даже поддержки в ядре. Используется уже готовое :) соответственно, доступно каждому пользователю системы.

                                                      Минусы:
                                                      — Весь профиль в памяти — ни к чему. Зачем там дисковый кэш фокса? Насколько я понимаю, достаточно туда только покидать *.sqlite, и сделать симлинками уже их. Это, собственно, и есть путь к улучшению скрипта.
                                                        0
                                                        Идея интересная, не могли бы вы написать HOW-TO по-подробнее?
                                                          0
                                                          Хауту есть выше. Скрипт примерно такой:

                                                            +3
                                                            Хауту есть выше. Скрипт примерно такой:

                                                            #!/bin/bash

                                                            # Имя профиля
                                                            PROFILE=«gfdvxo3s.default»

                                                            # Где он хранится, и куда указывает симлинк, когда фокс выключен
                                                            SAVEPATH="${HOME}/.firefox/${PROFILE}"

                                                            # Где он хранится в оперативке, и куда указывает симлинк, когда фокс включен
                                                            MEMPATH="/dev/shm/${PROFILE}"

                                                            # Как должны звать симлинк
                                                            FXPATH="${HOME}/.mozilla/firefox/${PROFILE}"

                                                            if [! -d "/dev/shm/${PROFILE}" ]
                                                            then
                                                            rsync -av ${SAVEPATH} ${MEMPATH}
                                                            fi

                                                            # Пользуемся тем, что фокс не отдаёт консоль, когда его запускаешь в первый раз
                                                            firefox

                                                            # После завершения фокса — сбросим профиль на диск. Ещё его можно и нужно сбрасывать по крону, той же командой
                                                            rsync -av ${MEMPATH} ${SAVEPATH}
                                                              0
                                                              Ваш вариант скрипта у меня работать отказался (пути само собой сначала поменял на свои), поэтому внес в него несколько изменений. Таким теперь и пользуюсь, спасибо =)

                                                              #!/bin/bash

                                                              # Имя профиля
                                                              PROFILE="7lgtfqlo.default"

                                                              # Где он хранится, и куда указывает симлинк, когда фокс выключен
                                                              SAVEDIR="${HOME}/soft/firefox/arch"
                                                              SAVEPATH="${SAVEDIR}/${PROFILE}"

                                                              # Где он хранится в оперативке, и куда указывает симлинк, когда фокс включен
                                                              MEMDIR="/dev/shm"
                                                              MEMPATH="${MEMDIR}/${PROFILE}"

                                                              # Как должны звать симлинк
                                                              FXPATH="${HOME}/.mozilla/firefox/${PROFILE}"

                                                              # путь до FF
                                                              FFPATH="${HOME}/soft/firefox/firefox"

                                                              # Синхронизируем профиль в оперативку
                                                              rsync -av ${SAVEPATH} ${MEMDIR}

                                                              # Пользуемся тем, что фокс не отдаёт консоль, когда его запускаешь в первый раз
                                                              ${FFPATH}

                                                              # После завершения фокса — сбросим профиль на диск. Ещё его можно и нужно сбрасывать по крону, той же командой
                                                              rsync -av ${MEMPATH} ${SAVEDIR}
                                                                0
                                                                Я даже видел, чтобы WindowMaker стоял не общесистемно, а у конкретного пользователя в ${HOME}. Но чтоб Firefox… хе-хе :)
                                                                  0
                                                                  Это версия скачаная с оффсайта. Дело в том что в убунте раньше в репозитории была не последняя версия. Как сейчас — не знаю, но продолжаю пользоваться и обновлять стандартными срдствами ФФ скачаную версию. То же самое с бердой.
                                                                0
                                                                последовав и усовершенствовать ваш скрипт написал свой. Отличие только в том, что в память загоняются только sqlite файлы, а не весь профиль. В скрип входит сама процедура этого дела и скрипт синхронизации для крона. Скорость заметно возврастает. И решается проблема длительной загрузки ФФ.

                                                                firefoxspd.tgz

                                                                1) качаем, распаковываем
                                                                2) запускаем «firefox.sh -i имя_каталога_профиля» для того чтобы скопировались файлы sqlite в другой каталог
                                                                3) делаем ярлык для «firefox.sh имя_каталога_профиля»
                                                                4) в крон вносим скрипт синхронизации «firefox-sync.sh имя_каталога_профиля»
                                                                  0
                                                                  if [! -d ...] надо писать через пробелы. мой баш на такое ругался, если (!) прилепить к [ или -d
                                                                    0
                                                                    а-а. это хабр схавал пробелы.
                                                            0
                                                            а есть результаты тестирования быстродействия до и после, просто делать это все без реальной мотивации безсмысленно, у меня хомяк реплицируется на несколько моих машин и добавление скриптов на основной машине потом создаст проблемы на других, а делать тоже самое на всех машинах трудоемко и занимает время, заниматься адаптацией без реальных аргументов тоже не вижу смысла
                                                              0
                                                              Неразумно реплицировать. nfs на что придуман?
                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                0
                                                                в принципе, да, быстрее изнашивается :)
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                    0
                                                                    Я сегодня сделал такую же фишку для Windows!
                                                                      0
                                                                      Прирост есть, конечно, но откровенно говоря на 3.5 особо не ощущается уже. Да и оперативы лично под мой профиль нужно как минимум 250, а это уже…
                                                                        0
                                                                        Firefox становиться пошустрей после манипуляций
                                                                        Тотальная чистка и реиндексация Sqlite
                                                                        vasilisc.com/speedup_ubuntu#clear_reindex_sqlite
                                                                        и
                                                                        Отключаем Антифишинг для ускорения Mozilla Firefox
                                                                        vasilisc.com/speedup_ubuntu#disable_antiphising

                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.