2011-09-07 48 views
4

我是一名学习Linux内核开发的计算机工程专业的学生。我的4人团队的任务是提出一个内核开发项目(将在6周内实施),并且我们想出了一个试探性的“自我优化硬盘驱动器Linux内核模块”。我不确定这个头衔是否对专业人士有意义。用于自我优化硬盘的Linux内核模块:建议?

我们根据此project提案。

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

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

任何反馈都是值得赞赏的。

+0

如果有人有兴趣,我记录我的一些研究,并要求在这个新的[主题]问题(http://stackoverflow.com/questions/7382720/safer-alternative-to-system-call-hijacking) 。随意张贴在那里...谢谢。 – rb3

+0

我成立了这个新的[主题](http://stackoverflow.com/questions/7466083/trying-to-modify-unionfs-code-find-writeable-branch-need-help)。这是关于工会。我需要一些帮助来修改它的一些代码。如果有人能提供建议,我会很感激。 – rb3

回答

1

的方法有很多,其中这样的优化可能是有用的:

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

有这么多的可能性,我认为至少50%的一个有效的解决方案将是一个明智的,有限的规范,你会试图实现什么功能,你不会。研究微软Vista的侵略性文件缓存机制disappointed是很有价值的。

现代Linux发行版可能会遇到的另一个问题是系统已经完成了多少改进计划。实际上,衡量改进可能是一个很大的挑战。我建议编写一个基准程序,它打开并读取一系列文件,并精确地记录整个序列。在启用和禁用改进的情况下多次运行它。但你必须重新启动之间的有效时间....

+0

感谢您的反馈。我同意,特别是关于Linux已经有类似的机制。然而,这一部分并不像学习经验那么重要。哦,如果你知道关于重定向磁盘读/写的内容,请发帖。我不认为劫持系统调用是最佳的,由于开销,我找不到更好的办法文档。 – rb3

+0

@ RB3:该弹簧想到的唯一的想法是一个用户空间文件系统驱动程序。见http://en.wikipedia.org/wiki/Filesystem_in_Userspace – wallyk

2

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

+0

是啊,我一直在寻找了一段时间的代码。 UnionFS和AuFS看起来可以完成这项工作。但是,他们的最新版本似乎缺乏删除所有分支中的所有文件的能力,而不是将它们剔除。我还需要在写入时更新两个分支中的文件,而不仅仅是最上面的分支。嗯... – rb3