【问题标题】:understanding the concept of running a program in interrupt handler理解在中断处理程序中运行程序的概念
【发布时间】:2014-02-23 11:46:01
【问题描述】:

早期运行 IOS 操作系统的 Cisco 路由器通过在中断处理程序中而不是在“常规”操作系统进程中进行数据包交换来提高数据包处理速度。在中断处理程序中进行数据包处理可确保操作系统内的上下文切换不会影响数据包处理。据我了解,中断处理程序是操作系统中用于处理中断的软件。如何理解中断处理程序中完成的数据包交换的概念?

【问题讨论】:

  • 没有什么要理解的——也许你只需要阅读一下interrupts 吗?
  • @Paul R 这种“中断切换”是否仅仅意味着路由器接口接收到的每个数据包都会对路由器 CPU 产生一个中断并立即引起注意?与在操作系统进程中处理数据包相比,这种方法具有速度优势,因为它不受操作系统上下文切换的影响?
  • 可能 - 我不知道思科对这些特定路由器做了什么,但这听起来像是减少延迟的黑客行为。

标签: interrupt interrupt-handling


【解决方案1】:

当事件需要操作系统或安装中断服务例程的程序立即关注时,首选使用中断。这与轮询相反,在轮询中,软件会定期检查是否存在条件,这表明事件已发生。 中断服务程序通常并不意味着自己做很多工作。它们的编写目的是尽可能快地到达终点,以便可以恢复正常执行。 “正常执行”的意思是,中断发生时先前处理的位置和状态被中断。原因是必须避免在其处理程序仍在执行时再次发生相同的中断,否则可能会被忽略,或导致不正确的结果,甚至更糟的是导致软件故障(崩溃)。所以中断服务程序通常做的是,读取与该事件相关的任何数据并将其存储在队列中,发出队列经历突变的信号,并设置可能发生另一个中断的内容,然后通过恢复中断前上下文来恢复。现在可以异步处理与该中断相关的排队数据,而不会冒中断堆积的风险。

【讨论】:

  • 谢谢!但是,我仍然不太明白程序如何在中断处理程序中运行。Cisco IOS 支持在中断处理程序中进行数据包转发,这意味着上下文切换和潜在的进程抢占不会影响数据包转发。这是否意味着当数据包到达时,会产生 CPU 中断并且中断处理程序在数据包被转发之前不会退出?例如,Linux 内核的某些部分是否在中断处理程序中运行?我可以在中断处理程序中运行 Linux 用户空间程序吗?
  • 我无法就思科如何在其内部路由器中处理这些数据包给出权威答案,但会尝试一些推测:在我看来,在一个中断服务中处理一个完整数据包不会有助于加快传输速度,但会减慢速度,因为阻止了来自不同端口的数据包的并发处理,并且没有更好地利用接收数据包标头(包含目的地)和完成接收数据包之间的时间。到那时,高性能路由器已经确定了目标端口(.. 消息大小 ...)
  • 并将注意力放在下一个任务上,而不是浪费时间等待数据包完成,直到可以在同一个中断中进一步处理同一个数据包。还考虑到进出不同端口的数据包应该并行处理,而不是依赖于像中断处理程序这样的公共资源,直到轮到它们,这似乎引入了瓶颈,而不是加快处理速度
  • 我可以想象的是,对于每个端口,在数据包完全到达和缓冲之前确定目标端口是在中断处理程序中完成的,并将结果存储在数据包缓冲区中,以供使用数据包完成后。我认为,进一步的猜想最好转移到聊天而不是滥用 cmets 作为讨论媒介。
【解决方案2】:

以下是执行中断级切换的过程:

查找内存结构以确定下一跳地址和出接口。

进行开放系统互连 (OSI) 第 2 层重写,也称为 MAC 重写,这意味着更改数据包的封装以符合传出接口。

将数据包放入出接口的tx环或输出队列中。

更新适当的内存结构(重置缓存中的计时器、更新计数器等)。

从网络接口接收到数据包时引发的中断称为“RX 中断”。仅当执行上述所有步骤时,才会解除此中断。如果上述前三个步骤中的任何一个都无法执行,则将数据包发送到下一个交换层。如果下一个交换层是进程交换,则将数据包放入进程交换的传入接口的输入队列中,并解除中断。由于中断不能被同级中断打断,并且所有接口都会引发同级中断,因此在当前RX中断被解除之前,不能处理其他数据包。

可以在层次结构中组织不同的中断切换路径,从提供最快查找的路径到提供最慢查找的路径。用于处理数据包的最后手段始终是进程切换。并非每个中断交换路径都支持所有接口和数据包类型。通常,只有那些需要检查和仅限于包头的更改才能进行中断交换。如果在转发之前需要检查数据包有效负载,则无法进行中断切换。对于某些中断切换路径,可能存在更具体的限制。此外,如果传出接口上的第 2 层连接必须可靠(即,它包括对重传的支持),则无法在中断级别处理数据包。

以下是不能进行中断交换的数据包示例:

定向到路由器的流量(路由协议流量、简单网络管理协议 (SNMP)、Telnet、普通文件传输协议 (TFTP)、ping 等)。可以获取管理流量并将其定向到路由器。他们有特定的任务相关流程。

OSI 第 2 层面向连接的封装(例如 X.25)。有些任务太复杂,无法在中断切换路径中编码,因为要运行的指令太多,或者需要定时器和窗口。一些示例包括加密、局域网传输 (LAT) 转换和数据链路交换增强 (DLSW+) 等功能。

更多:http://www.cisco.com/c/en/us/support/docs/ios-nx-os-software/ios-software-releases-121-mainline/12809-tuning.html

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多