【问题标题】:A Linux Kernel Module for Self-Optimizing Hard Drives: Advice?用于自优化硬盘驱动器的 Linux 内核模块:建议?
【发布时间】:2011-11-11 22:44:12
【问题描述】:

我是一名计算机工程专业的学生,​​学习 Linux 内核开发。我的 4 人团队的任务是提出一个内核开发项目(将在 6 周内实施),我们提出了一个初步的“自优化硬盘驱动器 Linux 内核模块”。我不确定这个标题对专业人士是否有意义。

我们的提案基于此project

该项目的目标是尽量减少硬盘访问时间。计划是创建一个特殊的分区来放置“最常用”的文件。 LKM 将剖析、分析、计划和重定向 I/O 操作到硬盘。此 LKM 应该主要能够以最小的开销预测和重定向所有文件访问(在大小小于 10 MB 的文件上),并减少对硬盘的平均读/写访问时间。我相信Apple的HFS有这个功能。

有人可以建议一个起点吗?我最近找到了一种通过拦截系统调用(hijacking 所有读/写调用)来重定向 I/O 操作的方法。但是,我不相信这是最好的方法。有没有办法编写重定向这些读/写操作的驱动程序?我们是否可以利用读/写缓存来达到同样的效果?

感谢任何反馈。

【问题讨论】:

  • 如果有人感兴趣,我将记录我的一些研究并在这个新的thread 中提问。随意张贴那里...谢谢。
  • 我设置了这个新的thread。这是关于 unionfs 的。我需要一些帮助来修改它的一些代码。如果有人可以提供建议,我将不胜感激。

标签: linux-kernel


【解决方案1】:

您可能想看看 Unionfs。你甚至不需要 LKM - 只是一个用户空间的守护进程,它可以订阅 inotify 事件、保存统计信息并在分区之间迁移文件。 Unionfs 会将两个分区合并为一个逻辑文件系统。

【讨论】:

  • 是的,我已经查看代码一段时间了。 UnionFS 和 AuFS 看起来可以胜任这项工作。然而,他们的最新版本似乎缺乏删除所有分支中的所有文件的能力,而不仅仅是将它们删除。写入时,我还需要更新两个分支中的文件,而不仅仅是顶部分支。嗯...
【解决方案2】:

此类优化可能有多种用途:

  • 访问文件A 意味着文件B 访问迫在眉睫。示例:通过媒体播放器打开媒体文件的图标文件
  • 访问某个组中的任何文件G of files 意味着该组中的其他文件将很快被访问。示例:mysql 接收到 use somedb 命令,这意味着将访问所有文件表、索引等。
  • 停止读取顺序文件的程序表明该程序已停止或退出,因此应放弃对与该文件关联的未来访问的预测。
  • 策略性地散布一些经常引用的文件的多个(但透明的)副本可以使用最靠近磁盘磁头的副本。示例:未缓存的目录或经常访问的小型设置文件。

有如此多的可能性,我认为至少 50% 的有效解决方案将是一个合理的、有限的规范,说明您将尝试实现哪些功能以及不打算实现哪些功能。研究一下微软Vista的激进的文件缓存机制disappointed,可能会很有价值。

现代 Linux 发行版可能遇到的另一个问题是,系统已经完成了您计划改进的大部分工作。事实上,衡量改进可能是一个巨大的挑战。我建议编写一个基准程序,它可以打开并读取一系列文件并精确计算完整序列的时间。在启用和禁用改进的情况下运行它几次。但是您必须在两者之间重新启动才能获得有效的时间......

【讨论】:

  • 感谢您的反馈。我同意,尤其是关于 Linux 如何已经拥有类似的机制。然而,这部分并不像学习经验那么重要。哦,如果你知道一些关于重定向磁盘读/写的知识,请发帖。由于开销,我不认为劫持系统调用是最佳的,而且我找不到更好的方法的文档。
  • @rb3:唯一想到的是用户空间文件系统驱动程序。见en.wikipedia.org/wiki/Filesystem_in_Userspace
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 2021-09-09
  • 1970-01-01
  • 2015-07-20
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多