假设一个进程需要在很多(1000+)处访问文件系统,并且顺序对于程序逻辑来说并不重要。但是,如果文件系统存储在(旋转的)硬盘上,则顺序显然对性能很重要。
应用程序程序员如何与操作系统沟通以优化访问安排?启动 1000+ 线程似乎不太实际。数据库管理软件是否可以实现这一点?如果可以,那么是如何实现的?
其他详细信息:我有一个大型 (1TB+) 映射
文件,我需要在其中读取 1000 多个大约 1KB 的 block ,每次都在新的、不可预测的位置。
最佳答案
早期,参数如Wikipedia: Hard disk drive performance characteristics → Seek time非常昂贵,因此非常重要,数据库供应商关注磁盘上的数据表示和布局,例如可以看出在 Oracle8i: Designing and Tuning for Performance → Tuning I/O .
随着固态硬盘 (SSD) 的出现,重要的优化参数发生了变化,其中寻道时间为 0(或至少恒定),因为没有任何东西可以旋转。一些新参数由 Wikipedia: Solid-state drive (SSD) → optimized file systems 解决。 .
但是,即使这些优化参数也会随着 Wikipedia: In-memory databases 的使用而消失。 。 list of vendors相当长,所有大玩家都在上面。
因此,如何以最佳方式安排访问在很大程度上取决于用例(1000 个并发点击不足以描述问题),购买一些 RAM 是选项之一,“程序员如何与操作系统通信”将是最后一个(不是第一个)问题
关于linux - 如何让操作系统优化磁盘访问调度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26426224/