我是这个论坛的新手。我目前遇到一个问题。
我是 Linux 内核驱动程序的初学者,目前正在为块大容量存储设备开发 Linux SCSI 设备驱动程序。开发平台位于使用 Fedora 14 的高端机器上。设置是 1 台主机到 1 台 LU/设备。长话短说,驱动程序在初始化时没有问题,它可以检测设备并向其发送 scsi 帧,它可以读取和写入设备,并且我可以进行稳定的 Iometer 读取和写入通过驱动程序进行测试。当一次只有一个未完成的命令(没有排队)时,所有这些。
问题是,我不能排队上班。除非我是第一个命令,否则上层 SCSI 层不会向我 (LLD) 发送多个未完成scsi_done()
的命令。我希望上层queuecommand()
在我将命令发送到设备进行处理之前可以多次调用,然后设备会中断我的响应并LLD
使用scsi_done()
. 不用排队,我们的速度很慢。
我已经调整了我认为与排队有关的值,例如在 .can_queue 和 .can_queue 中设置我.cmd_per_lun
的目标 queue_depth 。基本上我玩过各种值,包括 1,但无济于事。如果这有任何影响,我也确实禁用和启用了标记,但仍然没有改变。到目前为止,我不记得在驱动程序中做了太多事情,除了. 有什么我遗漏的并且仍然可以在驱动程序级别做的吗?我不敢相信 Linux 不支持命令队列。我在这里遗漏了一些东西。 scsi_host
scsi_host_template
scsi_device
slave_configure