重返固态

作者:Kyle Rankin

三年前,我首次评测了 Linux 下的 SSD(固态硬盘)。当时,我有一台超便携笔记本电脑,配备了 4200rpm 的硬盘,这块硬盘严重拖慢了这台原本相当灵巧的机器的性能。虽然当时已经有一些关于 SSD 的评测,但我没有注意到很多针对 Linux 的全面评测。我没有严格关注基准测试,而是决定更多地关注实际应用测试。最终,我看到 SSD 的速度相比我的 4200rpm 硬盘有了显著提升。

这在当时可能是真的,但今天的情况如何呢?例如,我第一次对比中一直困扰我的一件事是,当时我只有一块 4200rpm 1.8 英寸的硬盘可用,并且我受到了 ATA/66 总线速度的限制。我的新笔记本电脑,一台联想 ThinkPad X200s,配备了一块 7200rpm 2.5 英寸 SATA 硬盘,自从我拿到这台笔记本电脑以来,我一直很好奇能否用现代设备重复我的实验。在实际 Linux 使用中,现代 SSD 与现代 7200rpm SATA 硬盘相比表现如何?最近,英特尔非常慷慨地为我提供了一台新的 320 SSD 系列的评测样机,这是 X25 SSD 系列的后续产品,所以我决定重复我的实验。

我的测试方法

与之前的评测一样,我主要关注实际性能测试,但我仍然会加入一些原始基准测试数据,以满足你们中好奇的读者。在有意义的地方,我进行了多次测试以确认我得到了Consistent的结果,在这里,我报告了每种驱动器的最佳性能。此外,当我担心文件缓存会使结果产生偏差时,我会在测试前从头启动机器。7200rpm 硬盘是一块 160GB 富士通 MHZ2160B,在对其进行测试后,我将一个相同的filesystem转移到了 160GB 英特尔 320 SSD 上。

测试 1:从 GRUB 到登录

老实说,我实际上并不经常启动我的笔记本电脑。我的电池续航时间足够长,所以我通常在不使用时只是合上笔记本电脑的盖子;它会挂起到 RAM,然后我稍后恢复我的会话。话虽如此,像 Ubuntu 这样的发行版在过去几个版本中都专注于启动时间,我的 7200rpm 硬盘似乎启动 Ubuntu 10.04 非常快,所以我很好奇我是否还能看到 SSD 带来的提升。我用秒表测量了从在 GRUB 提示符下按下 Enter 键到看到登录屏幕之间的时间。启动过程既是处理器密集型的,也是磁盘密集型的,虽然 7200rpm 很快,但事实证明仍然有改进的空间

  • 7200rpm:27 秒

  • SSD:16 秒

测试 2:从登录到桌面

下一个逻辑测试是计时从登录屏幕到到达完整、功能正常的桌面所需的时间。在我的情况下,这意味着我在输入密码并按下 Enter 键后开始计时,并在我的桌面加载并且我的终端和 Firefox 出现在屏幕上时停止计时。在这种情况下,SSD 确实表现出色,加载我的桌面所用的时间不到一半

  • 7200rpm:22 秒

  • SSD:9 秒

测试 3:hdparm

对于下一个测试,我在两个驱动器上都运行了带有传统 -Tt 基准测试选项的 hdparm。虽然不像 Bonnie++ 那样功能齐全,但 hdparm 只输出几个指标的事实肯定使其更容易进行比较

7200rpm


$ sudo hdparm -Tt /dev/sda6
/dev/sda6:
 Timing cached reads:   6748 MB in  1.99 seconds = 3383.99 MB/sec
 Timing buffered disk reads:  220 MB in  3.01 seconds =  73.08 MB/sec

SSD


$ sudo hdparm -Tt /dev/sda6
/dev/sda6:
 Timing cached reads:   7168 MB in  1.99 seconds = 3595.46 MB/sec
 Timing buffered disk reads:  500 MB in  3.00 seconds = 166.48 MB/sec

正如您在这些结果中看到的那样,SSD 在缓存读取方面速度稍快一些,但不如过去的测试中幅度那么大。也就是说,缓冲磁盘读取器再次快了大约两倍。在测试进行到这里时,我开始注意到一个模式:对于大多数测试,SSD 似乎比我的 7200rpm 硬盘快大约两倍。对我来说真正的问题是,它是否会在其余测试中保持这种性能。

测试 4:Bonnie++

虽然 hdparm 可以用于获取基本的硬盘性能指标,但当您想要详细信息和更大范围的测试时,Bonnie++ 是要使用的程序。当然,缺点是您会得到大量需要筛选的基准测试数据。我不会逐个指标地进行介绍。相反,我将展示来自命令的输出,但只讨论一些亮点

7200rpm(输出已修改以适应)


------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 186  99 71090  17 33138  19  1251  97 83941  17 175.2   4
Latency
 49232us    1079ms     759ms   54918us     188ms     294ms

------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
 /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
 258   2 +++++ +++   369   3   345   3 +++++ +++   323   3
Latency
  314ms     633us     150ms     151ms     486us     398ms

SSD(输出已修改以适应)


------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
 187  99 164010  40 85149  32  1325  99 297390 60  4636 124
Latency
 52047us     423ms     336ms   21716us   12432us    9048us

------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
 /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
 9079  56 +++++ +++ 10451  63  8292  60 +++++ +++  7043  61
Latency
 5177us     283us    5218us   10723us      30us   16179us

好的,有很多数据需要浏览,所以让我们只挑选一些指标来突出显示。我发现有趣的是,除了 CPU 是限制因素的测试(如 Per-Character 测试)之外,SSD 的性能似乎明显优于 7200rpm 硬盘。在顺序输出块和重写测试中,SSD 的速度大约是 7200rpm 硬盘的两倍(分别为 71,090 K/秒 对 164,010 K/秒 和 33,138 K/秒 对 85,149 K/秒)。切换到读取和随机寻道,差距要大得多,例如在块测试中(83,941 K/秒 对 297,390 K/秒),随机寻道(SSD 的已知优势)几乎没有可比性,分别为每秒 175.2 次寻道和 4,636 次寻道。

所有这些都说明,SSD 性能真正闪耀的地方在于文件创建测试。在顺序文件创建中,7200rpm 硬盘每秒可以创建和删除 248 和 369 个文件,而 SSD 每秒可以处理 9,079 和 10,451 个文件。随机文件创建也是如此,7200rpm 的创建和删除得分分别为每秒 345 和 323 个文件,而 SSD 的得分分别为每秒 8,292 和 7,043 个文件。这确实是我在本次评测中包含如此多实际应用测试的一个很好的理由。毕竟,您可以查看其中一些数字并得出结论,如果您购买了 SSD,您的系统可能会快 20 倍,但最终重要的是这些数字如何在实际应用程序中应用。

测试 5:VirtualBox 折磨测试

我决定执行的下一个测试是我认为可能会突出 SSD 性能优势的测试:虚拟化。如今,使用普通笔记本电脑作为运行多个虚拟机的平台越来越合理,虽然我知道同时运行多个 VM 会大大降低我的系统速度,但我想知道 SSD 是否会显示出改进。为了尝试量化这一点,我发明了以下测试。我设置了两个相同的 VirtualBox VM,指向同一个 Ubuntu Server .iso 文件。两个系统都获得了自己的动态分配虚拟硬盘。然后,我启动了 VM,并在启动屏幕上,我将它们指向我创建的 kickstart 文件,以自动化 Ubuntu Server 的安装过程。当我在其中一个 VM 上按下 Enter 键的那一刻,我启动了秒表,然后快速同时启动了第二个 VM。我直到最后一个系统重启并显示我的登录屏幕时才停止秒表。我想到的是,让两个 VM 从同一个 .iso 文件读取并写入到同一物理硬盘上的不同虚拟磁盘,这将是对驱动器的一个很好的折磨测试。为了避免任何文件缓存问题,在涉及到 SSD 时,我创建了所有带有新磁盘的新 VM。以下是结果

  • 7200rpm:11 分钟 7 秒

  • SSD:10 分钟 32 秒

我承认这些结果真的让我感到惊讶。我原本期望看到更明显的差异,但事实证明,虽然这个测试听起来确实像是会耗尽硬盘资源的测试,但在两种情况下,都是我的双核 CPU 得到了锻炼。这表明磁盘 I/O 并不总是瓶颈,有时更快的驱动器并不能使一切都更快。

测试 6:文件系统遍历

对于最后一个测试,我想比较两个驱动器允许我遍历文件系统的速度。在我的 2008 年 2 月的专栏中,我谈到了如何使用“duck 命令”或


$ cd /
$ du -ck | sort -n

此命令遍历整个文件系统,并递归计算每个目录中文件占用的空间大小。完成后,它会创建一个汇总,不仅显示哪些总体目录占用的空间最多,还显示其中哪些目录是真正的罪魁祸首。因为我意识到 sort 命令根本无法帮助我测试磁盘,所以我跳过了它,只是计时了从 / 开始运行 du -ck 所需的时间

7200rpm


real    5m25.551s
user    0m2.700s
sys     0m18.589s

SSD


real    0m41.663s
user    0m2.040s
sys     0m13.453s

这个结果也真的让我感到惊讶。根据我的一些其他测试,我认为 SSD 会更快,但也只是快两倍左右。我绝对没想到 SSD 会在八分之一的时间内完成测试。我认为这部分肯定与随机寻道性能的显著提高有关。

结论

当谈到 SSD 时,现在大多数人都意识到这种性能是有代价的。问题是,这值得吗?老实说,这是一个很难回答的问题。毕竟,在我的大部分测试中,我确实看到了 SSD 性能提升了两倍甚至更高,在某些情况下,性能提升非常显著。我也必须承认,我看到了其他更细微的改进。例如,当我的网络备份作业在我的 7200rpm 硬盘上运行时,我肯定会注意到我的系统速度慢如蜗牛。事实上,有时我甚至会终止 rsync 并稍后运行备份,因为我几乎无法浏览网页。在 SSD 上,我什至没有注意到备份何时运行。顺便说一句,当谈到性能时,我应该注意到,现在,英特尔 320 系列驱动器的价格范围很广,具体取决于您购买的驱动器尺寸,根据英特尔的产品页面,低容量驱动器的速度实际上有所降低。

这款特殊的 160GB 驱动器目前的在线零售价约为 300 美元。虽然 160GB 的存储空间确实要花很多钱,但老实说,我倾向于将批量文件存储在家里的文件服务器上。早在 32GB SSD 成为经济实惠的常态时,您就不得不为了速度而做出一些存储牺牲,但此时,我对我的笔记本电脑配备的 160GB 驱动器感到满意。这真的只是归结为价格。您将不得不根据价格与性能做出自己的判断;但是,对我来说,使我倾向于 SSD 的一个重要因素是它为我当前的笔记本电脑增加了多少额外的寿命。这台笔记本电脑中的处理器和 RAM 完全满足我的日常需求,而且我使用这台机器遇到的任何性能问题都可以追溯到存储。我希望通过 SSD 性能的提高,我可以让我已经使用了相当长一段时间的笔记本电脑再用几年——而更换一台笔记本电脑的成本将远远高于 SSD 的价格。

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。他是 Linux Hardening in Hostile NetworksDevOps TroubleshootingThe Official Ubuntu Server BookKnoppix HacksKnoppix Pocket ReferenceLinux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。Rankin 经常就安全和开源软件发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论