我觉得这有点重复关于使缓存更加积极的另一个问题,但我尝试了很多那里的建议,但我就是不明白为什么我遇到了麻烦。
我的情况是,我将 Ubuntu 12.10 安装在钥匙串上的一个小 USB 闪存驱动器上。 (当我需要拯救某人的电脑或当我想要拥有自己的桌面以及我自己的设置和书签等时,无论我发现自己在哪台电脑上,我都会使用它)。
问题是系统速度非常慢。
现在,USB闪存驱动器相当慢,所以我知道我必须做出一些让步。不过,我目前正在尝试在 i7 机器上运行它8GB内存。 “free”和“top”都报告系统正在使用少于2.7GB...
total used free shared buffers cached
Mem: 7712 2742 4969 0 164 1838
-/+ buffers/cache: 740 6972
Swap: 0 0 0
...“df”告诉我文件系统正在使用4.4GB。那么,有应该有足够的剩余 RAM 来缓存整个文件系统。
基于此,我认为我经历的唯一 I/O 延迟应该仅限于第一次将文件读入缓存所需的时间。之后,我认为不需要再次获取它们,并且所有写入都可以缓存在后台,所以我根本不必等待这些。 (当然,最漫长的等待可能是当我想要关闭时,需要将 4GB 的脏缓存写入闪存)。
但是,这根本不是我所经历的。相反,一切都慢得令人痛苦。将焦点切换到其他窗口会导致所有窗口“变暗”大约 10 秒(对于此任务,窗口管理器需要从磁盘中获取什么,但它肯定不会写入那里?如果它在窗口会话中早些时候写的,为什么不在缓存中?),并且执行诸如使用 apt-get 安装某些内容之类的操作需要几分钟后.deb 文件被下载(为什么 .deb 还没有在缓存中?包中的新文件怎么没有被写入到缓存?这并不是说安装程序必须读取 /var/lib/dpkg/available 或 /var/lib/dpkg/status 因为这种情况发生每个即使我尝试一次安装一堆包)。
我已经修改过/proc/sys/vm/vfs_cache_pressure
,/proc/sys/vm/swappiness, /proc/sys/vm/dirty_writeback_centisecs
都/proc/sys/vm/dirty_ratio...
没有任何显着效果。
我显然不清楚 Linux 磁盘缓存是如何工作的。那么,请填写我。能内核配置为(前提是它有足够的 RAM):
- 从磁盘读取文件一次然后将它们缓存起来,并且
- 缓存所有写入并在空闲期间将它们写入磁盘(如果是从现在起 20 分钟后,可以吗)?
并且,如果它能这样做,我错过了什么?
答案1
USB 拇指驱动器原始性能
首先,我会看一下 USB 拇指驱动器,以确保它以可接受的水平运行。您可以使用以下 2 个命令来测量其性能:
$ hdparm -t /dev/sdb
$ dd count=100 bs=1M if=/dev/zero of=/media/disk/test oflag=sync
替换为您给定设置的适当硬盘信息。
文件系统
也看看这个关于提高 USB 拇指驱动器性能的文章来自 Ubuntu 帮助站点。