简析 Linux 的 CPU 时间( 三 )

daemon线程

  • daemon线程被唤醒后会运行do_softirq()处理软中断
    • 检查 irq_stat 是否存发生软中断事件
    • 调用 softirq_vec 中对应的软中断服务程序
    • 再次检查 irq_stat,如果发现新的软中断,就会唤醒ksoftrqd线程来处理
  • ksoftrqd 机制我们知道 CPU 执行的优先级为:硬中断 > 软中断 > 普通进程 。这意味着:
    • 一个软中断不会去抢占另一个软中断,只有硬件中断才可以抢占软中断
    • 如果软中断太过频繁,用户进程可能永远无法获得 CPU 时间
    为了保证公平性,内核为每个 CPU 都配置一个ksoftrqd线程 。如果所有的软中断在短时间内无法被处理完,内核就会唤醒ksoftrqd处理剩余的软中断 。以下面这张图为例:
    简析 Linux 的 CPU 时间

    文章插图
    • 网卡数据就绪,通过硬中断通知 CPU 进行处理
    • 硬中断服务程序调用raise_softirq()触发软中断 , 唤醒daemon
    • 硬中断服务程序退出后,daemon被唤醒开始处理软中断
    • 遍历过一遍向量表后 , daemon发现仍有未处理的软中断,唤醒ksoftrqd
    • ksoftrqd获得 CPU 时间片后,继续处理未完成的软中断
    由于 ksoftrqd 其实是一个 nice 值为 0 的普通线程,会进入 cfs_rq 参与调度 , 可以和普通进程公平地使用 CPU 。
    但如果 ksoftrirqd 长时间得不到 CPU,就会致使软中断的延迟变得很大,因此 ksoftirqd 的实时性是很难得到保障 。
    典型问题是 ping 延迟:如果 ping 包无法在软中断里得到处理,就会被 ksoftirqd 处理,导致 ping 延迟变得很大 。
    中断的影响硬中断的优先级很高,但是需要的 CPU 时间极少 。当出现大量硬中断时,可能会引起较多的 CPU 用户态与内核态的切换,但是interrupt time不会显著上升 。
    此外 , 由于部分内核代码是不可重入的(例如,修改寄存器),其执行过程不能打断 。因此这些代码的执行过程中 , 会屏蔽掉硬中断 。
    关中断的操作在内核里随处可见,这反过来会给硬中断带来一些影响 。比如 , 进程关中断时间太长会导致网络报文无法及时处理,进而引起业务性能抖动 。
    而软中断的执行时间如果太长,就会给用户线程带来延迟,如果 softirq time 很大则很可能意味着用户线程会受到影响 。
    网络 IO 频繁的应用机器的 softirq time 通常会比较高,可能存在网络连接数过多,或者网络流量过大的情况,
    ksoftirqd 的优先级与用户线程是一致的,因此,如果软中断处理函数是在 ksoftirqd 里执行的,那它可能会有一些延迟 。
    时间窃取在 GNU top命令中 , steal time定义为 “虚拟机管理进程 hypervisor 从 VM 窃取的时间” 。该概念是Xen,KVM , VMware 等社区或者厂商推广到Linux社区的 。
    当系统管理进程和 VM 尝试占用同一物理 CPU 核 pCPU 时,会导致 VM 的虚拟 CPU vCPU 可用的处理器时间减少,从而造成 VM 性能下降 。
    中虚拟化环境中,可能发生时间窃取的一些情况:
    • 多个高负载 VM 的 vCPU 的运行在同个 pCPU 上(公有云的 CPU 超卖)
    • VM 的 vCPU与线程绑定在了某个特定的 pCPU 上,导致虚拟主机 vhost 进程处理 I/O 时从这些 vCPU上窃取时间
    • 虚拟机监控程序进程(例如监视,日志记录和I/O进程)与 VM 争抢 pCPU
    参考资料https://www.cnblogs.com/Anker/p/3269106.htmlhttps://zhuanlan.zhihu.com/p/69554144https://blog.csdn.net/helloanthea/article/details/28877221https://blog.csdn.net/lenomirei/article/details/79274073https://www.jianshu.com/p/673c9e4817a8https://opensource.com/article/20/1/cpu-steal-timehttps://www.cnblogs.com/menkeyi/p/6732020.htmlhttps://blog.csdn.net/zxh2075/article/details/78262568https://kb.cnblogs.com/page/207897/https://www.cnblogs.com/charlesblc/p/6255806.htmlhttp://www.wowotech.net/linux_kenrel/soft-irq.html

    推荐阅读