linux 性能优化之路: 了解CPU软中断和硬中断
Posted 李昊轩的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 性能优化之路: 了解CPU软中断和硬中断相关的知识,希望对你有一定的参考价值。
什么是中断
中断表示我们请求操作硬件操作准备就绪了,例如从磁盘读取数据,我们知道CPU执行速度比磁盘执行速度快几个数量级,因此如果CPU每次check磁盘是否准备就绪了,那么系统的并发能力和性能会大大下降,但是采用中断方式,异步事件驱动方式来提升系统效率,首先会在驱动程序中嵌入中断程序,一旦磁盘准备就绪就会通过驱动程序发生一个中断请求操作,CPU立马停下手里的活来执行中断程序,该中断程序会从磁盘中读取数据到内存中。
如何避免丢失其他中断请求
一定要保证中断程序快速能处理,因为当CPU在处理中断时,是不能响应其他中断请求的,那么就会导致其他中断请求丢失
举个取外卖的例子:我们在app上点外卖,但是这个外卖不知道什么时候到,因为送外卖小哥一旦到了目的地就会放下外卖就走,这个时候你就会一次又一次的check外卖是否到了,然而你什么时候也干不了,仅仅在来来回回看外卖是否到了,导致浪费你的时间。
改进方式:如果换一种方式,你和外卖小哥约定一个通知方式,例如当外卖到了家门口小哥就打电话通知我,我就出去取外卖。 打电话就是一次中断请求,你就安心的干其他事情,静静等电话。 如果你点了两份外卖,当第一份外卖到了,小哥电话通知你,但是你在电话中沟通发票问题,这个时候第二份外卖到了另外一个小哥给你打电话发现占线,几次尝试后还是失败,这个时候外卖小哥就走了,导致丢失了这次外卖。
解决:在电话中只回答好,然后沟通发票问题当面说,这个时候就可以接到另外小哥的电话。 所以中断请求分为两个阶段:
-
第一阶段(上半部请求):接受硬件中断请求(从硬件中取完数据后发送一次软断请求,复杂逻辑交给下半部分请求,),称为硬中断,特点是处理速度快
-
第二阶段(下半部请求): 内核线程接受到上半部分软中断请求,就会异步的继续执行上半部未完成的请求, 称为软中断,特点延迟执行
举个网络接受数据例子:
当网卡接收到数据时,首先会发送一个硬中断请求,这个时候CPU就会执行中断处理程序,快速将网卡中数据读取到内存中,完成后会发送一个软中断请求,下半部被软中断信号唤醒后就会按照网络协议栈将内存数据进行解析处理,最终递给应用程序。(处理期间还是可以响应其他硬中断请求的)
查看硬中断和软中断运行情况
可以查看 /proc/interrupts 和 /proc/softirq 文件
以上是关于linux 性能优化之路: 了解CPU软中断和硬中断的主要内容,如果未能解决你的问题,请参考以下文章
Linux性能优化从入门到实战:06 CPU篇:快速定位CPU瓶颈