ARM Linux 如何--注册和触发--软中断
软中断TIMER_SOFTIRQ的中断处理函数为:run_timer_softirq
之所以成为softirq,是因为这些中断是由硬件中断来间接触发的,如何间接触发的呢:
硬件中断处理函数-- 对软中断的相应位置位-- 唤醒ksoftirqd线程-- 执行软中断的中断处理函数
2. 硬件中断如何通过置位唤醒ksoftirqd线程
timer interrupt handler-
timer_tick-
update_process_times-
run_local_timers-
hrtimer_run_queues()和raise_softirq(TIMER_SOFTIRQ)-
raise_softirq_irqoff-
__raise_softirq_irqoff { or_softirq_pending(1UL (nr)); }
即(local_softirq_pending() |= (x))
3. 如何执行软中断的action 中断处理函数
对于TIMER_SOFTIRQ来说,每次system clock产生中断时,即一个tick 到来时,在system clock的中断处理函数中会调用run_local_timers来设置TIMER_SOFTIRQ触发条件;也就是当前CPU对应的irq_cpustat_t结构体中的__softirq_pending成员的第TIMER_SOFTIRQ个BIT被置为1。 而当这个条件满足时,ksoftirqd线程(入口函数run_ksoftirqd,cpu_callback:kthread_create(run_ksoftirqd, hcpu, "ksoftirqd/%d", hotcpu);)会被唤醒,然后按照下面的流程调用TIMER_SOFTIRQ在数组softirq_vec中注册的action,即run_timer_softirq。
run_ksoftirqd--- do_softirq--- __do_softirq--- softirq_vec[TIMER_SOFTIRQ].action
If already offline, well be on wrong CPU: dont process */ if (cpu_is_offline((long)__bind_cpu)) goto wait_to_die; do_softirq(); preempt_enable_no_resched(); cond_resched(); preempt_disable(); rcu_sched_qs((long)__bind_cpu); } preempt_enable(); set_current_state(TASK_INTERRUPTIBLE); } __set_current_state(TASK_RUNNING); return 0; wait_to_die: preempt_enable(); /* Wait for kthread_stop */ set_current_state(TASK_INTERRUPTIBLE); while (!kthread_should_stop()) { schedule(); set_current_state(TASK_INTERRUPTIBLE); } __set_current_state(TASK_RUNNING); return 0;
Linux调度器何时需触发抢占?—— 从hackbench谈起 作者:何惟禹 吴一昊一、背景:性能之战“不服跑个分”虽然已经沦为手机行业的调侃用语,但在操作系统领域仍然是最重要的评价方式之一。本文的故事也源于一次 Alinux3 与 CentOS8 的一次跑分的较量。当然比分较量并不是目的,更重要的是发现存在的回归缺陷并进行修复,最终让 Alinux3 全方位持平或超过 CentOS8。在本次较量中,我们使用 hackbench 作为跑分软件,我们在测试过程中
相关文章
- 第一集:大数据常用Linux命令总结+环境集群搭建+zookeeper概述
- 如何用python连接Linux服务器
- PCIE体系结构基础和Linux PCI设备注册过程的实现
- 如何在linux上通过GRUB添加内核参数
- Linux下安装(卸载)KDE和GNOME
- Linux中批量压缩文件夹到单独的压缩包
- linux内核中rtc框架选用什么接口来注册rtc设备呢?
- Linux下高并发socket最大连接数
- Linux下安装cmake
- linux 注册一个 PCI 驱动
- linux scull 中的设备注册
- Linux 内核模块API之find_module
- 深入理解Linux网络技术内幕(八)——设备注册和初始化
- Linux应用开发(十二)——LCD控制器
- LINUX下的远端主机登入 校园网络注册 网络数据包转发和捕获
- Linux误删C基本运行库libc.so.6急救方法
- 黑客们成功地在土豆上安装了Linux!
- Linux常用基本命令:三剑客命令之-awk内置函数用法
- linux fseek函数用法详解
- linux中tar命令用法
- Linux服务器 离线安装 nginx-1.14.0,让你一路畅通无阻,3分钟就完成。