设备映射器目标是否有办法限制向其发送 I/O 的速率?

设备映射器目标是否有办法限制向其发送 I/O 的速率?

我正在编写一个设备映射器目标,但遇到了问题。运行 I/O 测试时,到达目标的 I/O 数量变得非常高,可能是由于文件系统调出缓存所致。有时,我会看到数以万计的 I/O 传输到我的目标,这使得它无法响应其上的其他命令。有没有一种方法可以限制一次提交的 i/o 数量?基于请求的目标有一个繁忙的回调,这似乎可以解决问题,但是可以映射的设备类型有限制,这对我来说是一个问题。大多数现有的生物靶标都设置了拥挤的功能,但这似乎并不能解决问题。在大多数情况下,返回 DM_MAPIO_REQUEUE 或使用 EBUSY 完成 i/o 只会转换为 EIO 并导致操作失败。

在使用现有目标以及一些测试代码后,看起来高飞行中 I/O 与将 I/O 放在工作队列上进行处理的目标相关联,同时立即将 I/O 提交到支持设备限制这。如果这是真的,我无法找到限制发生的机制。

有没有办法减缓 I/O 流入?或者如果没有,是否有保持设备响应的最佳实践?或者建议处理它们的顺序?

相关内容