EDA365电子论坛网

标题: 通用内核线程在Linux内核软中断线程中的启示 [打印本页]

作者: thinkfunny    时间: 2019-8-28 09:00
标题: 通用内核线程在Linux内核软中断线程中的启示
Linux 2.6.11版本的内核软中断线程ksoftirqd代码如下,下面框架可以看出对于,吞吐量与处理延迟两者之间的权衡。
% L" ^% f. U) z( O0 m5 a4 |/ v
9 _# P( }: w# r, _7 a  \+ g& Y' T软中断线程处理概括:3 D# G! o! a' P( ]0 ?$ R

3 _/ ^/ }! E# |$ {1、如果没有活干(没有软中断等待处理)就 schedule()切出,并从运行队列里面删除(由于任务状态已经变成TASK_INTERRUPTIBLE)8 |1 g2 t) N- ^  i
$ d/ n5 ~0 P& h; I8 a
2、如果有活儿干,就把当前pending的软中断处理完,处理过程中检查如果本线程运行时间过长,则 schedule()切出(cond_resched()完成这一切),避免其他线程饿死。但切出时任务状态是TASK_RUNNING,不会移出运行队列(线程还有活儿没干完,得赶紧回来),由于移出前,关闭了内核抢占,很快就会重新调度到本线程的。
1 g9 ]: @, K7 D8 B
5 K( Q- H* T* e/ M$ @  u
- J, e# q8 ~4 T' Y0 E
8 r7 K/ j- X' e

作者: wu68aq    时间: 2019-8-28 18:20
通用内核线程在Linux内核软中断线程中的启示。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2