【问题标题】:issuing a disk read from bottom-half of device driver从设备驱动程序的下半部分发出磁盘读取
【发布时间】:2011-07-19 08:16:53
【问题描述】:

在 Xen 设置中,来自来宾 VM 的 IO 访问通过一个名为 dom0 的特权域,它只是一个修改过的 Linux 内核,它可以调用来自和调用 XEN 管理程序。对于块 IO,它们有一个拆分驱动模型,其前端在来宾 VM 中,驱动程序的后端在 domain0 中。后端只是创建一个“bio”结构并调用 submit_bio(),就像在传统的 linux 块驱动程序代码中一样。

我的目标是检查写入磁盘的数据是否有任何问题(丢失的数据、静默损坏的写入、错误定向的写入等)。所以我需要读取写入磁盘的数据,并将其与缓存上的数据副本进行比较(这是一个常见的磁盘功能,称为“写后读”)。我的问题是,不能从我的后端驱动程序级别调用 __bread() 吗?调用 __bread 时内核崩溃。有人能理解这是什么原因吗?另外,如果这不可能,还有什么其他方法可以从驱动程序下半部分的磁盘读取特定数据块?

我可以拦截和克隆写入的 bio 结构,并在我的新 bio 中将操作更改为 read 并再次调用 submit_bio() 吗?我这样做了,但是 submit_bio() 的完成回调返回的 bio 结构中的扇区号是一些随机值,而不是我发送的那些..

谢谢。

【问题讨论】:

  • 你完成项目了吗?
  • 你完成项目了吗?

标签: linux device-driver disk xen


【解决方案1】:

如果这是我的任务,我会先尝试编写一个新的调度算法。首先复制cfqdeadlinenoopas 调度代码,并从那里开始处理它以在接受写入请求后自行提交读取命令。 noop 可能是最容易修改以在写入后立即读取并向上传播错误的方法,但我无法想象性能会非常好。但是,如果您使用其他调度程序之一作为基础,那么在写入后立即发出错误信号可能会更加困难 - 可能在再次安排读取之前已经过去了几秒钟 - 所以它实际上只是作为事后诊断有用,而不是可以直接使应用程序受益的东西。

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 2017-01-27
    • 2020-09-19
    • 2011-04-01
    • 1970-01-01
    • 2020-02-28
    • 2020-01-03
    • 2014-10-04
    • 2018-05-15
    相关资源
    最近更新 更多