Difference between revisions of "Firefox/Profile on RAM"

From ArchWiki
Jump to: navigation, search
m (Method 2: Build you own system)
(automatic style fixes)
Line 1: Line 1:
 
[[Category:Scripts]]
 
[[Category:Scripts]]
 
[[Category:Web Browser]]
 
[[Category:Web Browser]]
=Introduction=
+
{{i18n|Firefox Ramdisk}}
 +
 
 
Assuming that there is memory to spare, caching all, or part of [[Firefox]]'s profile to RAM using [[Wikipedia:tmpfs|tmpfs]] offers significant advantages. Even though opting for the partial route is an improvement by itself, the latter can make Firefox even more responsive compared to its stock configuration. Benefits include, among others:
 
Assuming that there is memory to spare, caching all, or part of [[Firefox]]'s profile to RAM using [[Wikipedia:tmpfs|tmpfs]] offers significant advantages. Even though opting for the partial route is an improvement by itself, the latter can make Firefox even more responsive compared to its stock configuration. Benefits include, among others:
 
*reduced disk read/writes (ideal for [[Maximizing performance#Tuning for an SSD|SSD]])
 
*reduced disk read/writes (ideal for [[Maximizing performance#Tuning for an SSD|SSD]])
Line 11: Line 12:
 
Because data placed therein cannot survive a shutdown, a script used when [[#Relocating the entire profile to RAM|moving the whole profile to RAM]] overcomes this limitation by syncing back to disk prior system shut down, whereas [[#Relocating only the cache to RAM|only relocating the cache]] is a quick, less inclusive solution.
 
Because data placed therein cannot survive a shutdown, a script used when [[#Relocating the entire profile to RAM|moving the whole profile to RAM]] overcomes this limitation by syncing back to disk prior system shut down, whereas [[#Relocating only the cache to RAM|only relocating the cache]] is a quick, less inclusive solution.
  
=Method 1: Use PKG from the AUR=
+
==Method 1: Use PKG from the AUR==
 
Relocate the browser profile to [http://en.wikipedia.org/wiki/Tmpfs tmpfs] filesystem, including {{ic|/tmp}} for improvements in application response as the the entire profile is now stored in RAM. Another benefit is a reduction in disk read and write operations, of which SSDs benefit the most.
 
Relocate the browser profile to [http://en.wikipedia.org/wiki/Tmpfs tmpfs] filesystem, including {{ic|/tmp}} for improvements in application response as the the entire profile is now stored in RAM. Another benefit is a reduction in disk read and write operations, of which SSDs benefit the most.
  
Line 20: Line 21:
 
*{{AUR|firefox-sync}}
 
*{{AUR|firefox-sync}}
  
=Method 2: Build your own system =
+
==Method 2: Build your own system ==
  
==Relocating only the cache to RAM==
+
===Relocating only the cache to RAM===
 
<small>''Adapted from [http://bbs.archlinux.org/viewtopic.php?pid=604369 this forum post]''</small>
 
<small>''Adapted from [http://bbs.archlinux.org/viewtopic.php?pid=604369 this forum post]''</small>
  
Line 33: Line 34:
 
Upon restarting Firefox, it will start using {{ic|/dev/shm/firefox-cache}} as the cache directory. Do mind that the directory and its contents will ''not'' be saved after a reboot using this method.
 
Upon restarting Firefox, it will start using {{ic|/dev/shm/firefox-cache}} as the cache directory. Do mind that the directory and its contents will ''not'' be saved after a reboot using this method.
  
==Relocating the entire profile to RAM==
+
===Relocating the entire profile to RAM===
===Before you start===
+
====Before you start====
 
Before potentially compromising Firefox's profile, be sure to make a backup for quick restoration. Replace {{Ic|xyz.default}} as appropriate and use {{Ic|tar}} to make a backup:
 
Before potentially compromising Firefox's profile, be sure to make a backup for quick restoration. Replace {{Ic|xyz.default}} as appropriate and use {{Ic|tar}} to make a backup:
 
  $ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/''xyz.default''
 
  $ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/''xyz.default''
  
===The script===
+
====The script====
 
<small>''Adapted from [http://www.verot.net/firefox_tmpfs.htm verot.net's Speed up Firefox with tmpfs]''</small>
 
<small>''Adapted from [http://www.verot.net/firefox_tmpfs.htm verot.net's Speed up Firefox with tmpfs]''</small>
  
Line 50: Line 51:
 
link=''xyz.default''
 
link=''xyz.default''
 
volatile=''/dev/shm/firefox-$USER''
 
volatile=''/dev/shm/firefox-$USER''
 
  
 
IFS=
 
IFS=
Line 82: Line 82:
 
Run Firefox again to gauge the results. The second time the script runs, it will then preserve the RAM profile by copying it back to disk.
 
Run Firefox again to gauge the results. The second time the script runs, it will then preserve the RAM profile by copying it back to disk.
  
===Automation===
+
====Automation====
 
Seeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.
 
Seeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.
  
====cron job====
+
=====cron job=====
 
Manipulate the user's [[cron]] table using {{Ic|crontab}}:
 
Manipulate the user's [[cron]] table using {{Ic|crontab}}:
 
  $ crontab -e
 
  $ crontab -e
Line 94: Line 94:
 
  0 */2 * * * ''~/bin/firefox-sync''
 
  0 */2 * * * ''~/bin/firefox-sync''
  
====Sync at login/logout====
+
=====Sync at login/logout=====
 
Deeming [[bash]] is being used, add the script to the login/logout files:
 
Deeming [[bash]] is being used, add the script to the login/logout files:
 
  $ echo '<i>~/bin/firefox-sync</i>' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
 
  $ echo '<i>~/bin/firefox-sync</i>' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
 
{{Note| You may wish to use {{ic|~/.bash_profile}} instead of {{ic|~/.bash_login}} as bash will only read the first of these if both exist and are readable.}}
 
{{Note| You may wish to use {{ic|~/.bash_profile}} instead of {{ic|~/.bash_login}} as bash will only read the first of these if both exist and are readable.}}
  
==Related==
+
==See also==
 
* [[Fstab#tmpfs]]
 
* [[Fstab#tmpfs]]

Revision as of 13:14, 20 May 2012

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Assuming that there is memory to spare, caching all, or part of Firefox's profile to RAM using tmpfs offers significant advantages. Even though opting for the partial route is an improvement by itself, the latter can make Firefox even more responsive compared to its stock configuration. Benefits include, among others:

  • reduced disk read/writes (ideal for SSD)
  • heightened responsive feel
  • many operations within Firefox, such as quick search and history queries, are nearly instantaneous

Both of previously mentioned options make use of native shared memory; /dev/shm, a directory that behaves just as ordinary mounted file systems do, only with the notable exception that all of its content is stored in RAM.

Because data placed therein cannot survive a shutdown, a script used when moving the whole profile to RAM overcomes this limitation by syncing back to disk prior system shut down, whereas only relocating the cache is a quick, less inclusive solution.

Method 1: Use PKG from the AUR

Relocate the browser profile to tmpfs filesystem, including /tmp for improvements in application response as the the entire profile is now stored in RAM. Another benefit is a reduction in disk read and write operations, of which SSDs benefit the most.

Use an active management script for maximal reliability and ease of use. Several are available from the AUR.

Method 2: Build your own system

Relocating only the cache to RAM

Adapted from this forum post

After entering about:config into the address bar, create a new string by right-clicking in the bottom half, selecting New, followed by String. Assign its value:

browser.cache.disk.parent_directory

Now, double-click the newly created string and direct it towards the RAM directory:

/dev/shm/firefox-cache

Upon restarting Firefox, it will start using /dev/shm/firefox-cache as the cache directory. Do mind that the directory and its contents will not be saved after a reboot using this method.

Relocating the entire profile to RAM

Before you start

Before potentially compromising Firefox's profile, be sure to make a backup for quick restoration. Replace xyz.default as appropriate and use tar to make a backup:

$ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/xyz.default

The script

Adapted from verot.net's Speed up Firefox with tmpfs

The script will first move Firefox's profile to a new static location, make a sub-directory in /dev/shm, softlink to it and later populate it with the contents of the profile. As before, replace the bold sections to suit. The only value that absolutely needs to be altered is, again, xyz.default.

Be sure that rsync is installed and save the script to ~/bin/firefox-sync, for example:

firefox-sync
#!/bin/sh

static=main
link=xyz.default
volatile=/dev/shm/firefox-$USER

IFS=
set -efu

cd ~/.mozilla/firefox

if [ ! -r $volatile ]; then
	mkdir -m0700 $volatile
fi

if [ "$(readlink $link)" != "$volatile" ]; then
	mv $link $static
	ln -s $volatile $link
fi

if [ -e $link/.unpacked ]; then
	rsync -av --delete --exclude .unpacked ./$link/ ./$static/
else
	rsync -av ./$static/ ./$link/
	touch $link/.unpacked
fi

Close Firefox, make the script executable and test it:

$ killall firefox firefox-bin
$ chmod +x ~/bin/firefox-sync
$ ~/bin/firefox-sync

Run Firefox again to gauge the results. The second time the script runs, it will then preserve the RAM profile by copying it back to disk.

Automation

Seeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.

cron job

Manipulate the user's cron table using crontab:

$ crontab -e

Add a line to start the script every 30 minutes,

*/30 * * * * ~/bin/firefox-sync

or add the following to do so every 2 hours:

0 */2 * * * ~/bin/firefox-sync
Sync at login/logout

Deeming bash is being used, add the script to the login/logout files:

$ echo '~/bin/firefox-sync' | tee -a ~/.bash_logout ~/.bash_login >/dev/null
Note: You may wish to use ~/.bash_profile instead of ~/.bash_login as bash will only read the first of these if both exist and are readable.

See also