微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个时间段内可以发生多少次 I/O 中断?

如何解决一个时间段内可以发生多少次 I/O 中断?

我不需要确切的数字,但我想知道典型的平均 PC 在 1 毫秒内读取输入中断的能力的现实意义。假设鼠标一直在移动,就操作系统而言,平均而言或游戏鼠标发生了多少次读取?

换句话说,如果我们制作了一个尝试记录鼠标输入的程序,为了多次读取单个输入值,我们应该读取多长时间?

解决方法

这取决于硬件和您所谈论的设备类型。英特尔实际上为其 xHCI USB 控制器提供了最大中断率。我想说这个最大速率对于任何游戏鼠标来说都可能太高了。英特尔关于 xHCI (https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/extensible-host-controler-interface-usb-xhci.pdf) 的文档在第 289 页指定

中断调节允许在单个中断服务请求 (ISR) 的上下文中处理多个事件,而不是为每个事件生成 ISR。由于中断挂起 (IP) 标志的断言而产生的中断可能受相关中断器的中断器调节 (IMOD) 寄存器的设置限制。 IMOD 寄存器由两个 16 位字段组成:中断调节计数器 (IMODC) 和中断调节间隔 (IMODI)。软件可以使用 IMOD 寄存器来限制向主机 CPU 传送中断的速率。该寄存器在主机控制器断言的中断器中断之间提供有保证的中断间延迟,而不管 USB 流量情况如何。以下算法将中断间间隔值转换为常见的“中断/秒”性能指标:>

中断/秒 = (250×10-9sec × IMODI) -1

例如,如果 IMODI 被编程为 512,则主机控制器保证主机不会被 xHC 中断,从上次中断起至少 128 微秒。来自 xHC 的最大可观察中断率不应超过 8000 个中断/秒。反之,中断间隔值可以计算为:

中断间隔=(250×10-9sec×中断/秒)-1

此寄存器的最佳性能设置非常特定于系统和配置。调节间隔的初始建议范围是 651-5580 (28Bh -15CCh)。 IMODI 字段在初始化和复位时应默认为 4000(1 毫秒)。当中断器初始化时,它可能会被软件加载一个替代值

USB 与 xHCI 一起工作以向系统提供中断。我不是硬件工程师,但我会说中断速度取决于鼠标频率。比如这个鼠标:https://www.amazon.ca/Programmable-PICTEK-Computer-Customized-Breathing/dp/B01G8W30BY/ref=sr_1_4?dchild=1&keywords=usb+gaming+mouse&qid=1610137924&s=electronics&sr=1-4,频率在125HZ到1000HZ之间。这可能意味着您将获得 125/s 到 1000/s 的中断频率,因为鼠标具有此频率。它的光学传感器将以此频率检查鼠标所在的表面,为移动提供中断。

至于中断本身,我认为这取决于CPU的速度。中断在处理时会被短时间屏蔽。 CPU 速度越快,中断被屏蔽的速度就越快,新中断发生的速度也就越快。我会说这里的瓶颈是鼠标有 1000 个中断/秒,即 1 个中断/毫秒。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。