调整闪存卡预读

调整闪存卡预读

嗯,我的 Core i7 笔记本电脑上运行着 Ubuntu 12.04,配有 SSD 磁盘。这台笔记本电脑是双启动的。我在输入密码和显示桌面之间经历了非常大的延迟。一般来说,这个过程是这样的:

  • Grub 加载速度很快。
  • 我从列表中选择 Ubuntu。
  • 密码提示加载速度很快。
  • 我输入了我的用户的密码。电脑有点挂了。Wifi 闪烁,但硬盘灯闪烁不多。这大约需要 30-40 秒。
  • 桌面瞬间加载

我以前使用标准硬盘时也遇到过这个问题。然后我按照我看到的一个帖子中的建议删除了 UbuntuOne。这似乎暂时有用。然后我迁移到了 SSD。电脑加载速度很快,但后来就开始出现这种情况。不过,我认为这与 SSD 无关。

我正在添加一个指向 bootchart 图像的链接:

https://i.stack.imgur.com/2oyXf.png

=======================

当我对此进行故障排除时,我注意到我的用户名显示为[无效的 UTF-8]在屏幕的右上角。这些是桌面加载延迟的情况。

有时,桌面加载速度很快。在这种情况下,用户名可以正常显示。

[无效的 UTF-8]似乎是一个已知的错误,但我无法找到可行的解决方案。

感谢您的时间。

=============================

我最终完全重新安装了操作系统。这解决了问题。

答案1

这是“George Georgovassilis”的博客,其中提供了有关阅读引导图表和如何加快速度的更多见解...

衡量进展

Bootchart 是一款出色的软件包,它细致地记录了整个启动过程,并创建了时间和位置的图表。因此,第一步是获取 bootchart:

sudo apt-get install bootchart

重启后,您可以在 中获得上述图表/var/log/bootchart。需要注意的是:第一个图表不具代表性,因为 ureadahead 处于分析模式,速度会变慢。再次重启后,图表看起来会好得多。它看起来是这样的:

在此处输入图片描述

图表显示了三个里程碑:X-Window 管理器在启动后 19 秒启动,Gnome 在 41 秒启动,桌面在 59 秒可见,我也将其视为整个启动时间。这是要打破的记录。

并行化 Ureadahead

Ureadahead 大约需要 10 秒钟才能完成缓存填充,在此期间不会加载任何其他内容。这对于常规旋转硬盘来说是有意义的,因为并行启动的进程引起的频繁磁头移动会减慢速度。但由于此安装是从 SD 卡启动的,因此可能值得探索一种并行运行 ureadahead 的方法。我的第一个想法是将 ureadahead 放入脚本中并在后台启动它:

/etc/init.d/bootopts

#!/bin/sh
(/sbin/ureadahead --daemon)&

并改为/etc/init/ureadahead.conf调用此脚本,而不是/sbin/ureadahead

重启速度快了 3 秒,这是在启动 X 和启动 Gnome 之间获得的。令人失望的是,新图表显示 ureadahead 仍在按顺序运行,导致其后的所有内容停滞。一些调查显示 I/O 调度程序认为 SD 卡是旋转设备,因此我正在更改 bootopts 脚本以通过添加以下内容来更正此问题:

echo 0 > /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/host6/target6:0:0/6:0:0:0/block/sdb/queue/rotational

请注意,SD 卡/dev/sdb

重新启动后,图表如下所示:

在此处输入图片描述

好多了,ureadahead 现在并行运行。不幸的是,它使启动过程慢了 1 秒,主要是延迟了 X 和 Gnome。但我觉得我找到了一些方法,所以我们不要轻易放弃。

调整闪存卡预读

使用闪存卡上的简单 hdparm -t -T 进行的一些基准测试表明,连续读取时间为 14 MB/秒,因此比其标称分类少 2 MB/秒。原因似乎是预读设置为 256,将其减少到 128 可获得最大值 16 MB/秒。因此,我的 bootopts 脚本中又添加了一项:

hdparm -a128 /dev/sdb 

更正 I/O 调度程序

再次重启后,我又回到了 56 秒。我怀疑 I/O 调度程序为 ureadahead 赋予了与其他进程相同的优先级,但实际上不应该这样,所以它应该隐藏在 ionice 后面,因此我修改了 bootopts:

(/usr/bin/ionice -c 3 /sbin/ureadahead --daemon)&

这又将启动时间缩短了 2 秒。图表显示闪存卡仍未得到充分利用,因此我按照以下说明禁用启动分区上的日志功能,还禁用了动画启动屏幕 plymouthd。这很有效,时间现在缩短至 45 秒:

在此处输入图片描述

[更新 2011.05.22] 我还做了一个相反方向的实验,即用 -c 1 启动 ionice,这对应于实时 I/O,从而将启动时间缩短了一秒。虽然乍一看这似乎违反直觉,因为可以并行运行的进程更少,但再看一眼,这又合情合理,因为并行 I/O 会带来一些开销。

推迟服务

现在让我们将启动过程中不需要的服务推迟到登录后。我的候选:

mysqld
nmbd
smbd
cupsd
modem-manager
bluetoothd
alsa-store [update 2011.05.22]
alsa-restore [update 2011.05.22]
pulseaudio [update 2011.05.22]
rsync [update 2011.05.22]
apparmor - I apt-get removed that one [update 2011.05.22]
plymouthd [update 2011.05.22] I deleted the /etc/init/plymouthd*.conf files - arguably this will affect logging and the ability of services to interact with the user in case something goes wrong. Use at your own risk
ufw (firewall, there is a small security risk when setting up later) [update 2011.05.22]
acpi-support 

所有这些都有 upstart 作业,可以通过将相应/etc/init/xyz.conf文件中的启动事件更改为类似“stuff-that-c​​an-wait”的内容来推迟。apport [更新 2011.07.07]

然后,新的脚本/etc/init.d/stuff-that-can-wait就可以执行这些脚本了。我的脚本如下:

#!/bin/sh

/etc/init.d/mysql $1
/etc/init.d/samba $1
/etc/init.d/acpi-support $1

当然,不要忘记:

chmod a+x /etc/init.d/stuff-that-can-wait

我将其添加为 upstart 脚本,但将其作为启动脚本添加到 gnome 会话(“启动应用程序”)可能更容易

/etc/rcX.d然后我使用以下命令删除了类似的服务:

update-rc.d -f servicename remove

并将它们设置为 upstart 脚本 ( stuff-that-can-wait)

并行运行初始化脚本

好帖子[更新2011.05.22]本质是修改/etc/init.d/rc

CONCURRENCY=shell

驯服笔记本模式工具[更新2011.05.22]

还有更多事情要做:在启动序列即将结束时,bootchart 显示有一个等待时间较长的挂载(12 秒),我将其定位在 /usr/lib/pm-utils/power.d/journal-commit 中。我正在按如下方式修改此文件:

#!/bin/sh
exit0

(我可能直接删除了它)

这不仅将启动时间缩短了 10 秒,而且 Unity 桌面的构建速度也明显加快了。

也有pulseaudio一些比应有的时间要早​​得多(参见推迟服务)

黑名单模块 [更新 2011.07.07]

此步骤删除了不必要的模块(对于我的设置而言)。编辑 /etc/modprobe.d/blacklist.conf 并添加以下行

blacklist rt2800pci
blacklist rt2x00pci
blacklist parport_pc
blacklist vboxnetado
blacklist vboxnetflt
blacklist bvoxdrv
blacklist joydev
blacklist lp
blacklist hp_accel

lp module并评论/etc/modules

这给我们留下了 28 秒的启动时间:

在此处输入图片描述

从这里复制并编辑 →http://georgovassilis.blogspot.com/2011/05/speeding-up-ubuntu-1104-boot-time.html

我希望这会有所帮助...祝你好运!

相关内容