用于自我优化硬盘的Linux内核模块:建议?

时间:2011-09-07 08:19:33

标签: linux-kernel

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

我们根据此project提出了提案。

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

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

任何反馈都表示赞赏。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这种优化有许多方法可能有用:

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

我认为有这么多的可能性,至少50%的有效解决方案对于您将尝试实现的功能以及您不会实现的功能是一个明智的,有限的规范。研究微软Vista的攻击性文件缓存机制disappointed

可能很有价值

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