SSD时代的编程

Posted

技术标签:

【中文标题】SSD时代的编程【英文标题】:Programming in the era of SSD 【发布时间】:2011-09-28 02:42:07 【问题描述】:

我想知道即将到来的 SSD 技术如何影响(大多数系统)编程。出现了很多问题,但这里有一些最明显的问题:

可以考虑磁盘访问速度接近内存速度的任何地方吗? 如果不是,这只是一种临时状态,还是有一些根本原因导致 SSD 永远不会像 RAM 一样快? B 树(及其表亲)是否仍然相关? 如果有,是否对 SSD 的 B-Tree(B+-Tree、R-Tree 等)进行了任何调整或修改?如果没有,是否还有其他为 SSD 设计的数据结构?

【问题讨论】:

【参考方案1】:

SSD 确实消除了读取的寻道时间问题,但在它们上高效写入却相当棘手。我们一直在对这些问题进行一些研究,同时寻找将 SSD 用于 Acunu 存储核心的最佳方式。

你可能会觉得这些很有趣:

Log file systems and SSDs – made for each other? Why theory fails for SSDs

【讨论】:

恐怕相信 Acunu 会保持日志记录是错误的。我没有副本。第二个的要点是一个有趣的实验: 我们写入 SSD 直到我们将其填满几次。但我们以不同的方式做到这一点。首先,我们按顺序写入——这很快。但是,如果我们以随机顺序写入地址,在我们写入 SSD 的容量之前它会很快,但之后会急剧下降。接下来,我们尝试每隔一个块写入一次(所以我们写入一个块,跳过一个块,写入一个块,跳过一个块)。这很快并且保持很快。但是,如果我们在每个块之后抛硬币来决定是否跳过一个块,它就会像随机写入序列一样退化。 在最后的实验中,我们计算磁盘块的随机排列,然后按照这个排列顺序写入磁盘,多次。这很快,就像顺序写入顺序一样。我们得出结论,SSD 的问题在于可预测性而不是寻道时间(就像硬盘等一样),我们推测从逻辑地址到物理地址的转换变化是导致速度下降的原因。 我迟到了一年,但给你 :) Log file systems and SSDs -- made for each other? Why theory fails for SSDs【参考方案2】: 当前基于闪存的 SSD 的速度远不及主内存 DRAM。非易失性存储器技术最终会像 DRAM 一样表现出色吗?总有一天。有许多有前途的技术正在开发中。 SSD 性能的一个瓶颈是 SATA 接口。随着技术的进步,SSD 将连接到 DRAM 或 PCIe 总线。 只要内存访问是按块执行的,B 树仍然是相关的。甚至 DRAM 也是按块访问的,流行的块缓存在 CPU 中。虽然难以实现,但设计用于在 DRAM 中运行的 B 树可以胜过其他类型的易失性搜索树。但是,在树中包含数百万个条目之前,性能优势可能不会很明显。 为 SSD 实现的 B 树受益于块分配的改进。当前一代闪存 SSD 更喜欢按顺序写入。随着 B-tree 的增长(或变化),新的块应该按顺序分配以获得最佳的写入性能。基于日志的存储格式应该做得很好,但我还没有看到任何可扩展的实现。随着顺序写入和随机顺序写入之间的性能差距缩小,分配顺序将变得不那么重要。

【讨论】:

newegg.com/Product/…【参考方案3】:
    RAM 不必记住复位/重启后的状态。我非常怀疑 SSD 会不会像 RAM 一样快。 B-Trees 仍然非常重要,因为您仍在尝试最小化磁盘读取。

【讨论】:

【参考方案4】:

很容易想到一个因素......

由于使磁头在相距很远的磁道之间移动的相对成本较高,因此将硬盘驱动器视为磁带驱动器的趋势越来越明显。这导致人们努力优化数据访问模式,以便头部可以在表面上平稳移动,而不是随机搜索。

SSD 实际上消除了寻道损失,因此我们可以不必过多担心磁盘上的数据布局。 (更准确地说,由于磨损均衡问题,我们有不同的担忧)。

【讨论】:

“SSD 实际上消除了寻道惩罚,:” - 没有。他们只是将寻道时间最小化了 10..200 次。寻找时间仍然在这里(找到从逻辑到物理的转换)。写入时间更糟,因为单个重写块比 HDD 大(8-16kb vs 0.5-4kb)【参考方案5】:

虽然 SSD 的寻道时间比 HDD 的要好一两个数量级,但与 RAM 相比,这些时间仍然很重要。这意味着与寻道时间相关的问题并没有那么糟糕,但它们仍然存在。吞吐量仍然远低于 RAM。除了存储技术,连接也很重要。 RAM 在物理上非常靠近主板上的 CPU 和其他组件,并使用特殊的总线。大容量存储设备没有这个优势。存在电池供电的 RAM 模块包,它们可以作为超快的 HDD 替代品,但如果它们通过 SATA、SCSI 或其他典型磁盘接口连接,仍然比系统 RAM 慢。

这意味着 B 树仍然很重要,为了获得高性能,您仍然需要注意 RAM 中的内容和永久存储中的内容。由于整个架构和物理限制(非易失性写入可能总是比易失性写入慢),我认为这个差距可能会变得更小,但我怀疑在任何可预见的未来它会完全消失。即使您查看“RAM”,您实际上也没有单一的速度,而是几个级别越来越快(但更小且更昂贵)的缓存。因此,至少存在一些差异。

【讨论】:

【参考方案6】:

我在 SSD 和 RamDisk 上测试了构建时间,SSD 快了一点。 我的同事使用完全不同的设置实现了相同的结果 - HDD 上的构建时间为 9 分钟,RamDisk 上的构建时间为 3 分钟 30 秒,SSD 上的构建时间为 3 分钟 0 秒。

【讨论】:

这没有任何意义。你一定是用完了ram?还是有蹩脚的公羊? RamDisk 可以获得超过 9000MB 的读取速度(超频内存),SSD 现在大约 600MB。 (写入速度相同,忘记数字) 当然综合测试表明 RamDisk 快得多。该测试是在 SATA1 或 SATA2 上完成的,我没有解释。可用 RAM 的数量是相同的,只是在一种情况下,一切都在 RamDisk 上完成,在第二种情况下,没有使用 RamDisk,但它仍然占用内存。 经过多次尝试,我想通了。当 ramdisk 格式化为 FAT32 时,即使基准测试显示高值,实际使用实际上比 sata 2 上的 NTFS 格式的完全加密 SSD 慢,最大速度为 100MB/s。但 NTFS 格式的 ramdisk 在现实生活中比 SSD 更快。

以上是关于SSD时代的编程的主要内容,如果未能解决你的问题,请参考以下文章

给您拜年|湖南信息学编程教育的最好时代

云原生时代的搜索服务算力管理

Python将是人工智能时代的最佳编程语言

人工智能时代,会编程的孩子更优秀

互联网时代如何自学编程?

Python将是人工智能时代的最佳编程语言