【问题标题】:Algorithms for Optimization with Fast Disk Storage (SSDs)?使用快速磁盘存储 (SSD) 进行优化的算法?
【发布时间】:2010-11-03 11:59:48
【问题描述】:

鉴于固态磁盘 (SSD) 的价格正在下降,并且很快将作为系统驱动器变得更加普遍,并且鉴于它们的访问速率明显高于旋转磁介质,因此标准算法的性能将从使用SSD 用于本地存储?例如,SSD 的高随机读取速度使得基于磁盘的哈希表之类的东西成为大型哈希表的可行性; 4GB 的磁盘空间随时可用,这使得散列到 32 位整数的整个范围是可行的(不过,查找比填充更多,这仍然需要很长时间);虽然由于访问速度的原因,这种大小的哈希表无法与旋转媒体一起使用,但对于 SSD 来说应该不是什么大问题。

是否有其他领域即将过渡到 SSD 将带来算法性能的潜在收益?我宁愿看到关于一件事如何运作的推理,而不是意见;我不希望这引起争议。

【问题讨论】:

    标签: algorithm optimization hashtable performance solid-state-drive


    【解决方案1】:

    您的哈希表示例确实是受益的关键数据库结构。无需将整个 4GB 或更多文件加载到内存中来探测值,可以直接探测 SSD。 SSD 仍然比 RAM 慢几个数量级,但是在磁盘上有一个 50GB 的哈希表是相当合理的,但在 RAM 中则不然,除非你花大价钱买大铁。

    一个例子是国际象棋位置数据库。我有超过 50GB 的散列位置。有复杂的代码来尝试在哈希中将彼此靠近的相关位置分组,因此我可以一次分页 10MB 的表,并希望将其中的一些重用于多个相似的位置查询。有大量的代码和复杂性来提高效率。

    用 SSD 替换后,我能够放弃集群的所有复杂性,只使用非常愚蠢的随机哈希。我的性能也得到了提升,因为我只从磁盘中获取我需要的数据,而不是 10MB 的大块。延迟确实更大,但净加速是显着的.. 超级干净的代码(20 行,而不是 800+),也许更好。

    【讨论】:

    • 优秀的例子和好点;我没有考虑过国际象棋的位置,但这是一个非常有趣的案例。
    【解决方案2】:

    SSD 仅在随机访问时明显更快。对磁盘的顺序访问它们的性能仅为主流旋转驱动器的两倍。如here 所述,许多 SSD 在许多情况下性能较差,导致它们的性能更差。

    虽然 SSD 确实起到了很大的作用,但它们仍然比 CPU 操作和物理内存慢得多。对于您的 4GB 哈希表示例,您可能能够维持 250+ MB/s 的 SSD 访问随机哈希表存储桶。对于旋转驱动器,您很幸运能打破个位数的 MB/s。如果您可以将这个 4 GB 的哈希表保存在内存中,您可以以每秒千兆字节的速度访问它 - 甚至比速度非常快的 SSD 还要快。

    引用的文章列出了 MS 在 SSD 上运行时为 Windows 7 所做的几项更改,这可以让您了解可以考虑进行的更改类型。首先,用于从磁盘预取数据的 SuperFetch 被禁用 - 它旨在绕过 SSD 缓解的磁盘随机访问缓慢时间。碎片整理被禁用,因为分散在磁盘上的文件不会影响 SSD 的性能。

    【讨论】:

    • 您在谈论更多关于 SSD 的优化;我更多地考虑通过 SSD 性能实现(或更可行)的算法类型。我对可能(或必要)的优化不太感兴趣,而不是对不同类型的算法或应用程序感兴趣,而这些算法或应用程序在较慢的持久性存储中根本不可能。
    【解决方案3】:

    事实上,你能想到的任何算法都需要大量随机磁盘 I/O(随机是关键词,这有助于将局部性原则抛给鸟类,从而消除大量缓存的用处继续)。

    我可以看到某些数据库系统从中受益。 MySQL,例如使用 MyISAM 存储引擎(其中数据记录基本上是美化的 CSV)。但是,我认为非常大的哈希表将是你最好的选择。

    【讨论】:

    • 实际上,有点意思是算法本身不使用磁盘;关键是,可以通过使用 SSD 的性能提升来启用哪些标准算法?就像具有一定速度和大小的计算机如何启用托管代码一样......
    • 算法本身使用磁盘-算法的实现使用-我们可以同意。是的,托管代码是通过硬件改进实现的——但它需要许多数量级的“更好”的计算机硬件才能做到这一点。 HDD 和 SSD 之间的跳跃不是(请原谅表达)量级。唯一可靠的好处是随机访问。回到我最初的回答“...这需要大量随机磁盘 I/O...”
    【解决方案4】:

    SSD 对于随机读取要快得多,对于顺序读取要快一些,而对于写入(随机或非随机)则要慢一些。

    因此,基于磁盘的哈希表对 SSD 来说很有用,因为现在更新它需要大量时间,但搜索磁盘变得(与普通硬盘相比)非常便宜。

    【讨论】:

    • 请注意,在最初的问题中,我提到由于这个确切原因,哈希表比人口更适合查找;考虑软件附带的“预填充”哈希表的概念,以允许预定义哈希查找; 4GB 的安装空间对于现代应用来说是相当合理的。
    【解决方案5】:

    不要自欺欺人。 SSD 仍然比系统内存慢很多。在所有其他条件相同的情况下,任何选择使用系统内存而不是硬盘的算法仍然会快得多。

    【讨论】:

    • 重点是,并非所有其他事情都是平等的。具体举个例子,4GB的SSD空间比较容易找到; 4GB 的系统内存很容易找到。
    • 4GB RAM 在任何需要对 4GB 文件进行分类的计算机上都是相当标准的。
    • RAM 与 SSD 相比,每 GB 内存的价格仍然较低。 64 位地址空间在服务器中很常见,在桌面上变得越来越普遍。
    • @Triptych:是的,4GB 的 RAM 是相当标准的,当你用哈希表填满 4GB 时,你的操作系统会放在哪里?你的申请?
    • @Michael:是的,这是一个很好的观点,但通常 RAM 是非常宝贵的;持久性存储就不那么重要了。
    猜你喜欢
    • 2020-07-14
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多