linux - 如何让操作系统优化磁盘访问调度?

标签 linux performance operating-system

假设一个进程需要在很多(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/

相关文章:

linux - 将毫秒添加到时间戳(bash,unix)

c++ - 了解动态链接在 UNIX 上的工作原理

linux - 如何使用 O_DIRECT 将内核空间内存(物理地址)写入文件?

Python numpy 性能 - 在非常大的数组上选择

linux - 为什么 go app 作为多个进程运行?

linux - 尝试连接到 iSCSI 驱动器时来自 iscsiadm 的错误消息

perl - 查找列表中最长元素的最快方法(执行时间)

MySQL - 如何优化这个查询?

c - 用于调试我的操作系统的调试器

linux - 为什么Linux设备驱动中除了init还需要probe方法?