存档

文章标签 ‘tmpfs’

让 Firefox 在内存上运行

2009年1月25日

Linux版Firefox的慢算是出名的了,在同一台机器上,windows版的要流畅很多很多……为什么Linux版会这么慢呢?我觉得有下面几点原因。

  1. nvidia显卡驱动的问题,这是驱动上有bug导致的,不过在180.22版驱动上已经好转很多了。
  2. 用户目录(~/.mozilla/firefox)下的缓存数据过于庞大,这个在windows版也会出现,但我用了2年的windows版firefox,感觉并不明显啊
  3. 编译的问题

尽管3.0版firefox有很大进步,但对于我这种firefox重度使用者,仍然是偏慢。在使用了TualatriX介绍的优化方法后,的确好转了很多。但在20个以上的标签页间进行切换,仍然是会出现缓慢的现象。于是狠下心来,将主目录下的 .mozilla 目录搬到内存上,发现切换标签页缓慢的现象还真的消失了!使用了一个多月,现在我打开30个以上的标签页也不会再慢下来了,感觉非常好!

下面介绍如何将 Firefox 运行在内存上。注意:下面提到的 /tmp 目录是使用 tmpfs 挂载的,如何使用 tmpfs 可以浏览这篇介绍,还有一句废话,你要有足够的内存,我的物理内存是2G。

首先将用户目录下的 .mozilla 目录备份,放到你喜欢的地方,例如放到 /var/local 下。推荐直接用tar打包,不要压缩,下面会说到好处,而放到 /var/local 下是为了配合下面的脚本。

cd $HOME && tar -cpf mozilla.tar .mozilla/*
mv mozilla.tar /var/local

在 /tmp 目录下创建一个目录,用于存放 .mozilla 目录下的文件

mkdir /tmp/.mozilla

然后将用户目录下的 .mozilla 目录链接到刚才创建的目录

ln -sf /tmp/.mozilla $HOME/.mozilla

解压刚才备份的tar包

tar -xpf /var/local/mozilla.tar -C /tmp

好了,现在打开 fireofx 看看,切换标签页的速度是不是有所提升了?我记得当时试验的效果是很明星的。如果你也满意,推荐用脚本直接在开机后就解压 tar 文件到 tmpfs 上,关机时就把 tmpfs 上的数据重新打包备份,多方便啊~。这时直接用tar打包的好处是,每当关机时不用等待压缩 .mozilla 目录的文件,我就曾经用7z压缩数据,那速度……

下面是我写的自动脚本,以 daemon 方式运行,能在 Archlinux 上使用,其他发行版可能需要稍加修改,我只有一个 Archlinux,没办法测试。

新建 /etc/rc.d/firefoxpro 文件,贴上下面的内容

#!/bin/bash
 
. /etc/rc.conf
. /etc/rc.d/functions
 
case $1 in
    start)
        stat_busy "Copying Firefox profile to tmpfs"
        if [ ! -d "/tmp/.mozilla" ];then
		mkdir /tmp/.mozilla
		cp /var/local/mozilla.tar /tmp
		tar -xpf /tmp/mozilla.tar -C /tmp
		mv /tmp/mozilla.tar /var/local/mozilla-old.tar
		chown clayton:users /tmp/.mozilla ###注意这里,需要将clayton改为你的用户名
		add_daemon firefoxpro
		stat_done
	else
		stat_fail
	fi
        ;;
    stop)
        stat_busy "Backuping Firefox profile from tmpfs"
        if [ -d "/tmp/.mozilla/firefox/njgmwi0t.default" ];then ###注意这里,要改为你的xxx.default目录名
		cd /tmp && tar -cpf /tmp/mozilla-new.tar .mozilla/*
		mv /tmp/mozilla-new.tar /var/local/mozilla.tar
		rm -r /tmp/.mozilla
		rm_daemon firefoxpro
		stat_done
	else
		stat_fail
	fi
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    *)
        echo "usage: $0 {start|stop|restart}"
esac
exit 0

别忘了给于执行的权限

chmod a+x /etc/rc.d/firefoxpro

编辑 /etc/rc.conf ,把上面的脚本添加到 daemons 处,使其开机就执行

DAEMONS=( … @firefoxpro …)

ok,大功告成了。enjoy it 吧!

最后附上2个有用的小技巧。

  1. 压缩 .mozilla 目录下的sqlite3数据库
    首先把 firefox 关了,然后运行下面的命令,详见通过压缩数据库加速 Firefox

    for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done
  2. 分离 Firefox 的临时文件
    Firefox 会在 .mozilla 目录下的 Cache 里存储一大堆浏览网页时的临时文件,这些文件基本上可以无需备份,那我们何必还要将这些临时文件打包进tar包里呢?而且还能减少打包的时间。首先打开 about:config ,将 browser.cache.disk.parent_directory 的值改为 /tmp,没有就新建一个。重启 Firefox ,浏览一些网页后你会发现 /tmp 下多了这个 Cache 目录,里面就是这些杂七杂八的临时文件。

祝大家新的一年里,身体健康,万事如意!
Happy 牛 Year!!

FireFox , ,

tmpfs的应用

2008年12月25日

什么是tmpfs?tmpfs是一个高效的文件系统,之所以高效,是因为其使用内存作为存储设备。通过tmpfs,我们能像使用硬盘一样的使用内存。众所周知,内存的读取写入速度是硬盘不能比拟的。但由于内存的易失性,当系统掉电时,所有在tmpfs上的内容将会丢失。根据这些特性,我们可以将一些目录挂载到tmpfs文件系统下,设置正确下还能起到加快某些命令执行的速度。例如 pacman -Ss 。而且从这篇文章得知,tmpfs还会自动释放出未用的空间,大可放心的使用tmpfs。下面我列举一些我在Archlinux上使用tmpfs的一些心得。
首先建议物理内存容量至少要有1G以上,过少的内存反而会起反效果。例如我的物理内容容量为2G。(现在内存都是白菜价了)下面列举一些可以挂载到tmpfs上的目录,当然,你也可以将其他目录也挂载上去,这主要看你的内存大小和想象力了 :) ,例如你可以将整个 Firefox 都搬到内存上运行

/tmp
该目录是用来存放不同程序执行时产生的临时文件,既然是临时文件,即使在关机时没有保存也不会有大碍,而且还可以减少硬盘I/O读写次数。所以这个目录大可放心挂载到tmpfs上。

/var/tmp
功能上和/tmp目录相似,一些kde程序会用到这个目录。

/var/log
系统日志存放的目录。

/var/lib/pacman/sync(Archlinux特有)
这个目录是pacman特有的,用来存储每个可用仓库的软件列表,依赖关系等的信息。你每次执行 pacman -Sy 命令,就是将互联网上软件仓库的信息下载到这个目录,而执行 pacman -Ss 就是从这个目录下的信息中查询。如果将这个目录挂载到tmpfs上,可以加快搜索软件时的查询速度,但缺点是每次启动系统后都要重新执行一次 pacman -Sy 命令来生成这个目录下的内容,除非你用脚本控制每次关机都备份这个目录下的内容,如何取舍就要看各位了 :)

说了一大堆,那究竟如何才能挂载这些目录呢?方法很简单,直接写到 /etc/fstab 下,然后重启系统。不推荐直接用mount命令挂载,这会马上清空这些目录下的内容,有可能会导致正在运行的程序出错。

将下面这句加入到 /etc/fstab 内。

none /tmp tmpfs defaults,size=100m 0 0

值得注意 size=100m 这个选项,这是控制使用多少内存的关键,如果不加上这个选项,将默认使用一半容量的内存。这里我让其使用100M的内存空间,并挂载到 /tmp 下。其他的目录请如此类推,又或者加大 /tmp 下的空间,例如使用300M内存,然后将其他目录做符号链接到 /tmp 下,总之实现的方法有很多,就看各位喜欢 :) 。enjoy it !

PS:祝大家生蛋节快乐! :D

Configure , , ,