Linux SMP 系统:用户进程、内核模块功能、内核模块中断处理程序、SLUB:在哪个核心上运行?

Linux SMP 系统:用户进程、内核模块功能、内核模块中断处理程序、SLUB:在哪个核心上运行?

我对多核多线程系统的内核空间/用户空间行为有些不确定,尤其是与使用 SLUB 的分配结合使用时。您能否就我的看法给我一些反馈?

在 SMP 系统上,任务/进程调度程序决定哪个任务将在哪个核心上运行,适用于用户和内核进程/任务。(检查)但如果发生以下情况会发生什么:

  1. 用户进程在核心 2 上执行,并且代码调用内核模块(例如通过使用 IOCTL),内核代码是否也会在相同的“时间片”内在核心 2 上运行?(我认为是的)

  2. 假设我们处于情况 1(我们正在运行 IOCTL 内核模块代码),并且有一个 IRQ 被触发,该 IRQ 是针对正在执行 IOCTL 函数的同一内核模块内的处理程序。该 IRQ_handler 有可能在另一个核心上运行吗?(我认为是的,因为它是通过调度程序处理的)

  3. 情况 2(其他核心上的 IRQ_Handler)的答案是否也适用于内核线程?(我会说是的,因为它是通过调度程序处理的)

  4. 在情况 2 中:当用作密集调用的 IRQ_handlers、内核线程 (worker) 和 IOCTL 代码之间的共享数据寄存器时,将对象 (中间驱动程序/模块存储) 分配到 SLUB 中是否明智?我读到 SLUB 被加载到 L1 缓存中并成为每个 CPU 的副本?在 SLUB 上找不到什么信息(或者我没有使用最佳搜索表达式)。

  5. 问题 4 的更好选项(SLAB、SLOB、静态/全局声明,......?)

此致,

相关内容