linux 中断的使用和优化

中断是一种异步的事件处理机制,可以提高系统的并发处理能力
由于中断处理程序会打断其他进程的运行,所以为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快的运行,如果中断本身要做的事情不多,那么处理起来也不会有太大问题
但如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间
特别的,中断处理程序在响应中断时,还会临时关闭中断,这就会导致上一次中断处理完成之前,其他中断都不能影响,也就是说中断有可能会丢失

系统为了解决中断程序执行过长和中断丢失的问题,Linux将中断处理过程分成了两个阶段,也就是上半部和下半部
1.上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关或者时间敏感的工作
2.下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行

以网卡接收数据为例
网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了,这时内核就应该调用中断处理程序来响应它
对于上半部分来说,要把网卡的数据读到内存中,然后更新硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信号,通知下半部做进一步的处理
下半部被软中断信号唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理,直到把它送给应用程序

上半部分直接处理硬件请求,也就是硬件中断,特点是快速执行
下半部分则是由内核处理,也就是软中断,特点是延迟执行
上半部会打断CPU正在执行的人物,然后立即执行中断处理程序,而下半部以内核线程的方式执行,并且每个CPU都对应一个软中断内核线程,名字为 ksoftireqd/CPU编号
比如0号CPU对应的软中断内核线程名字是 ksoftirqd/0
一些内核自定义的事件也属于软中断,比如内核调度和RCU锁(Read-Copy Update的缩写,是Linux内核中最常用的锁之一)

查看软中断和内核线程
/proc/softirqs 提供了软中断的运行情况
/proc/interrupts 提供了硬中断的运行情况

CPU相关的
1.使用率 top,htop,ps
2.平均负载 uptime
3.上下文切换 vmstat,dstat,pidstat -w
4.中断 vmstat /proc/interrupts,/proc/softirq
5.缓存使用率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值