监控块对磁盘的访问

监控块对磁盘的访问

我正在寻找一种方法来监视对磁盘块的访问,并以块位图的形式监视访问。

我还需要能够冻结(和排队)设备块访问(以及解冻和写入挂起的块)。似乎必须在内核模式下支持此功能(可能无法作为用户应用程序完成)。在内核中有blk-core.c,它可能是调用实际块设备之前的入口。我想我可以用它来达到这个目的。

似乎已经使用了某种队列机制,并且我需要某种方法来了解实际写入设备的时间。

void blk_start_queue(struct request_queue *q)
{
    WARN_ON(!irqs_disabled());

        queue_flag_clear(QUEUE_FLAG_STOPPED, q);
           __blk_run_queue(q);
 }
 EXPORT_SYMBOL(blk_start_queue);

我还看到它使用扇区​​,而不是块(这是我需要跟踪的)。

是否内核文件系统写入请求是以扇区为单位,而下面的磁盘设备驱动程序以块为单位?如果是,则块监视必须位于磁盘驱动程序中。

我也不确定设备块本身(例如,hd.c)请求结构包含应该进行传输的确切位置:

    struct request
     {
       ....
       sector  // the position in the device at which the transfer should be made
      ....
    }

提供有关要读/写的确切扇区的信息,但是发送请求的上层如何决定它?这不是块驱动程序(在本例中为 hd.c)的决定吗?

我可能遗漏了一些我理解的东西。

感谢您就该主题提出的任何建议。

相关内容