此时我不需要修改调度程序,尽管这可能会改变。目前,我的努力是理解它们。我已经从各种来源做了相当多的关于这个主题的阅读:维基百科,Linux Kernel Development 2nd edition (ch. 10),Linux Driver Development 3rd edition (ch. 13)以及其他一些来源。我对4个主要调度程序以及它们的工作方式有了一个公平的理解。但是,我还不确定他们是什么。
从代码中,例如block / noop-iosched.c,它似乎是一个内核模块。但是,当我做lsmod
时,我不会看到任何跳出来作为调度程序的东西:例如没有任何名称 noop 或 cfq 。此外,我没有看到像
<scheduler> <size> <used> scsi_transport_sas
我希望看到的是SAS传输,它将来自请求队列的请求出列并将它们交给LLD。至少,我假设我应该看到类似的内容,因为我看到lsmod
关于我的LLD的输出:
scsi_transport_sas 35652 1 mpt3sas
这个中间层驱动程序 scsi_transport_sas 由 mpt3sas 我的实际SAS控制器使用。由于中间层驱动程序为设备出列,我只是假设中间层和I / O调度程序之间存在类似的关系。
所以,我的问题是, 调度程序是什么?他们是模块吗?它们是内核的集成组件吗?它们是软件库并公开正确的功能,是否与其他存储堆栈驱动程序一起编译?我前面提到的参考资料很好地解释了他们所做的工作以及阻止司机如何与他们互动,但他们并没有确切地说出他们是什么。