查看硬件中断绑定

/proc/interrupts 检查中断和设备的数量。
例如,/proc/interrupts 显示 1 00:cpu0、eth0。
使用 cat /proc/irq/1 00/smp_affinity 检查 CPU 绑定。
例如cat显示ffffffff,表示CPU0-3 可以工作。
调整前停止irqbalance服务。
要暂时停止,请使用 systemctl stop irqbalance。
修改文件,直接写入1 -3 个二进制数。
例如,将其更改为 00000001 以仅在 CPU0 上运行。
更改后使用cat确认。
你自己掂量一下吧。

怒啃 24 小时,终于搞懂linux系统上下文切换!

相关按钮;系统滞后;大量 I/O 检查和 CPU。
进程按钮太多,系统速度慢。
检查内存和 I/O。
快速换线;良好的表现;单线程优化。
中断过多,CPU 繁忙。
分析干扰源。

给自己计时。

《Linux设备驱动程序》(十六)-中断处理

嘿,说到中断处理,真的很复杂。
2 02 2 年,我在某个城市,从事嵌入式开发。
嗯,一提到这个,我的头就大了。
设备和处理器必须异步工作,设备数据必须传递给处理器。
常见的方法有轮询、等待、中断等。
轮询那个东西,CPU等待,效率低下,所以一般采用中断。

当时我很困惑,不知道如何使用 request_irq 函数。
申请中断时,返回0为成功,其他为失败。
参数里有一个flag,还有挺多的,比如快处理、慢处理,现在基本已经不用了。
SA_INTERRUPT,这个东西一定要慎用,它还可能禁止其他中断。

共享中断比较麻烦。
您需要使用 SA_SHIRQ 位。
dev_id 必须是唯一的并且不能为 NULL。
内核中的每个中断都有一个列表,dev_id就像设备的签名。
如果重复,卸载时很容易混淆,还可能产生内核OOP消息。

对于中断号,需要看原理图和datasheet,或者使用Linux提供的自动检测方法。
检测中断号必须在模块加载时完成。

中断处理函数与普通函数类似,但请注意它是在中断上下文中运行的。
主要有两个返回值,IRQ_NONE 和 IRQ_HANDLED。
中断可以打开和关闭,Linux 有特殊的函数来操作它们。

要关闭中断,必须使用local_irq_save,它将保存中断状态然后禁用它。
如果您确定其他地方没有禁用中断,则可以使用 local_irq_disable。
要恢复中断,请使用 local_irq_restore。
要启用所有中断,请使用 local_irq_enable。

哎,这个中断处理太需要注意了。
上半部和下半部,这两个词一定要记住。
上半部分是request_irq注册的函数,要求尽快处理,不做耗时的工作。
下半部分通常由微线程或工作队列处理。

Tasklet,这个东西,你要注意它的特点和注意事项。
对于工作队列,还必须关注它的特点和注意事项。
哎,这个嵌入式开发确实要慢慢来,不能急。