Linux 内核中“相同 CPU 组”的含义是什么?

Linux 内核中“相同 CPU 组”的含义是什么?

是什么意思complete on same CPU-group?我看到两行代码:

#define QUEUE_FLAG_SAME_COMP    9   /* complete on same CPU-group */
#define QUEUE_FLAG_SAME_FORCE  18   /* force complete on same CPU */

CPU-group等于CPUforce complete和 和有什么区别non-force complete

答案1

所以这就是区别

#define QUEUE_FLAG_SAME_COMP    9   /* complete on same CPU-group */
#define QUEUE_FLAG_SAME_FORCE  18   /* force complete on same CPU */

现在相同的CPU组可以定义为

  • 任一 cpu 位于同一集群(例如 cpu 组)下,则完成的首选 cpu 将是该集群的第一个 cpu,否则该集群的任何在线 cpu。对于 < 5.9 的内核来说,这几乎是正确的。例如,在 cpu[0-8] 中,如果 cpu[0-4] 下的所有 cpu 类型相同,则称为同一个 cpu 组。

  • 或者所有CPU共享相同的L3缓存。那么这些将成为同一个 cpu 组的一部分。例如,如果您的系统有 cpu0-8 并且它们具有相同的 L3 级缓存,那么它将被称为同一组 cpu。

现在进行第二个查询所以QUEUE_FLAG_SAME_COMP,请求将在属于同一 cpu 组的 cpu 上完成。假设 cpu3 上收到来自 cpu0 的请求的中断,那么由于 cpu0 和 cpu 3 位于同一组下,因此完成 irq 的同一 cpu,将触发软中断/请求完成,

但你强制通过选择来完成QUEUE_FLAG_SAME_FORCE,在上半部处理之后,下半部将被强制到发起请求的同一CPU。在上面的例子中假设是 cpu 3。然后请求将在cpu3上完成。因此,它可以将大部分块层和 SCSI 中间层完成工作推回到提交 CPU(例如 cpu3)(通过 IPI)。

相关内容