Я тут задумался над оптимизацией работы своей системы с диском. И задался целью выявить, кто же больше всего пишет на диск, благо в Linux это сделать не сложно. Нужно запустить из консоли:
Для пущего эффекта перед запуском команды закройте браузер, а потом запустите вновь. Не скажу как насчёт Chrome и остальных, а вот Firefox с парой десяток вкладок в первые 5 минут после запуска запросто записывал на диск - пол гигабайта. Даже когда я в нём ничего не делал, он продолжал что-то писать. Ни один другой процесс больше у меня так активно с диском не работал.
Для системы на HDD такое поведение будет выливаться в тормоза. А для SSD мы получим уменьшение ресурса диска. Решать проблему будем переносом профиля и кеша браузера на Tmpfs. Оперативки сейчас у всех много, она быстрее чем SSD и уж точно чем HDD, а ресурс перезаписи у неё не ограничен в отличии от SSD.
sudo iotop -oPa
Для системы на HDD такое поведение будет выливаться в тормоза. А для SSD мы получим уменьшение ресурса диска. Решать проблему будем переносом профиля и кеша браузера на Tmpfs. Оперативки сейчас у всех много, она быстрее чем SSD и уж точно чем HDD, а ресурс перезаписи у неё не ограничен в отличии от SSD.
Способ первый, специфичный для Firefox
Заходим в "about:config" и выставляем параметр "browser.cache.disk.enable" в "false" запрещая кеширование на диск. Находим там же "browser.cache.memory.enable" и убеждаемся, что он "true". Вот собственно и всё. Понятно, что такой способ перезагрузку или аварийное завершение браузера не переживёт. Плюс ещё хочется хранить в памяти профиль пользователя.
Делаем вручную и сами
В принципе делается это относительно просто. Находим раздел который живет на tmpfs:
Это зачастую "/tmp". После монтирования создаём там директорию, ну например "/tmp/firefox-username" копируем туда файлы из профиля "~/.mozilla" и из кеша "~/.cache/mozilla", а потом настоящие директории заменяем ссылками на вновь созданные. Далее, допустим раз в час, синхронизируем данные из "/tmp/firefox-username" куда-нибудь в постоянное хранилище на случай неожиданной перезагрузки. А при выключении машины возвращаем все на место.
Отловить события включение/выключения при помощи systemd можно например вот так, а синхронизация раз в час реализуются при помощи Systemd/Timers. Копирование лучше выполнять при помощи rsync, так надёжнее и удобнее будет. Плюс неплохо было бы добавить backup на случай аварийной ситуации при копировании.
В целом сделать это можно, но повозится прийдётся.
df -h
Отловить события включение/выключения при помощи systemd можно например вот так, а синхронизация раз в час реализуются при помощи Systemd/Timers. Копирование лучше выполнять при помощи rsync, так надёжнее и удобнее будет. Плюс неплохо было бы добавить backup на случай аварийной ситуации при копировании.
В целом сделать это можно, но повозится прийдётся.
Используем готовый софт
Конечно существует уже готовый скрипт, который делает то, что описано в предыдущем разделе - profile-sync-daemon, плюс ещё немного. Но прежде чем приступить к его использованию нужно подготовиться. Сначала желательно уменьшить размер кеша в браузере. Для Firefox это "Настройки\Дополнительные\Сеть\Использовать под кеш не более" и выставить тут вменяемый размер, это нужно, если у вас не много памяти.
Далее желательно засунуть файлы браузера в одну директорию. Например Firefox создаёт директории по всему "/home" разделу ("~/.adobe", "~/.macromedia", "~/.mozilla", "~/.cache/mozilla" и т.п.), конечно тут и плагины постарались, но не суть. Единственный способ собрать это в одном месте, что я нашёл, написать скрипт:
Назвать его "firefox" и положить в директорию, которая находится в "PATH" раньше, чем "/usr/bin". Таким образом файлы относящиеся к браузеру будут лежать в "~/.local/share/firefox". Заодно очистите корень от мусора. Думаю подобный способ сработает и с другими браузерами.
Затем ставим profile-sync-daemon, для Arch Linux - вот так:
Для остальных - смотрите по ссылке выше, автор расписал способы для большинства популярных дистрибутивов.
К сожалению "из коробки" директорию "~/.local/share/firefox" утилита "подхватить" не сможет, поэтому создаём файл "/usr/share/psd/browsers/firefox-my":
А потом прописываем новый профиль в конфиг "~/.config/psd/psd.conf", например вот так:
Настройку "USE_BACKUPS" рекомендую включать, что бы в случае проблем у вас была недавняя рабочая копия.
Настройка "USE_OVERLAYFS" более интересна. Она позволяет включить хранение данных на OverlayFS, т.е. в памяти будет храниться только то, что браузер записал за текущий сеанс работы. Это экономит память, и увеличивает скорость синхронизации. Что бы использовать эту возможность, требуется поддержка в ядре - OverlayFS версии 22 или новее, а так же нужно дать "/usr/bin/psd-overlay-helper" право на sudo, добавив в "/etc/sudoers" строчку:
Проверяем конфигурацию:
Если всё хорошо, на всякий случай создаём бекап профиля Firefox и включаем сервис:
После перезагрузки браузер будет жить на ram диске.
Далее желательно засунуть файлы браузера в одну директорию. Например Firefox создаёт директории по всему "/home" разделу ("~/.adobe", "~/.macromedia", "~/.mozilla", "~/.cache/mozilla" и т.п.), конечно тут и плагины постарались, но не суть. Единственный способ собрать это в одном месте, что я нашёл, написать скрипт:
#!/bin/bash HOME=$HOME/.local/share/firefox /usr/bin/firefox "$@"
Затем ставим profile-sync-daemon, для Arch Linux - вот так:
yaourt -S profile-sync-daemon
К сожалению "из коробки" директорию "~/.local/share/firefox" утилита "подхватить" не сможет, поэтому создаём файл "/usr/share/psd/browsers/firefox-my":
DIRArr[0]="$homedir/.local/share/firefox" PSNAME="firefox"
USE_OVERLAYFS="yes" BROWSERS="firefox-my" USE_BACKUPS="yes"
Настройка "USE_OVERLAYFS" более интересна. Она позволяет включить хранение данных на OverlayFS, т.е. в памяти будет храниться только то, что браузер записал за текущий сеанс работы. Это экономит память, и увеличивает скорость синхронизации. Что бы использовать эту возможность, требуется поддержка в ядре - OverlayFS версии 22 или новее, а так же нужно дать "/usr/bin/psd-overlay-helper" право на sudo, добавив в "/etc/sudoers" строчку:
...
user_name ALL = NOPASSWD: /usr/bin/psd-overlay-helper
psd preview
systemctl --user enable psd
Комментариев нет:
Отправить комментарий