gpt4 book ai didi

linux - 在 linux 中启动 cpus 时使用 pen_release 的基本概念是什么

转载 作者:太空狗 更新时间:2023-10-29 11:08:40 27 4
gpt4 key购买 nike

在 linux 内核 smp 中,pen_release 标识符用于启动辅助 cpu,我还发现它也在其他地方使用。

我已经在 sysdump 中检查了它的值,还尝试通过 lauterbach 设置来理解它,但无法获得使用它的基本概念。

据我所知,它是一种锁,用于将辅助 CPU 置于循环中,直到我们从主 CPU 释放笔。我试图通过各种方法来证实这种理解,但收效甚微。

谁能详细解释一下?

最佳答案

答案在这里:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0425/ch04s07s01.html
当主要内核启动时,次要内核使用 WFI 指令保持待机状态。主要核心为次要核心提供启动地址,并使用处理器间中断 (IPI) 唤醒它们,这是一种通过 GIC 发出信号的 SGI。使用全局变量 pen_release 序列化辅助内核的引导。从概念上讲,你可以把次级核心想象成一个控制笔,一次释放一个,在初级核心的控制下。

变量 pen_release 由内核代码设置为要启动的处理器的 ID 值,然后在启动时由该内核重置。当处理器间中断发生时,辅助内核使用 MPIDR 寄存器检查 pen_release 的值与它们自己的 ID 值。

辅助内核的启动方式与主内核类似。辅助内核启用 MMU。它使中断 Controller 与自身接口(interface)并校准本地定时器。它在 cpu_online_map 中设置一个位并调用 cpu_idle()。主处理器可以检测 cpu_online_map 中适当位的设置,并将 pen_release 设置为下一个辅助核心。

这里有更多信息: http://elinux.org/images/0/00/Clement-smp-bring-up-on-arm-soc.pdf

您可以看到 mach-vexpress 的代码。在这个序列中调用了四个函数来进行 smp 初始化:
1) smp_init_cpus
2) smp_prepare_cpus
3) smp_boot_secondary
对于 mach-vexpress,该函数是 versatile_boot_secondary(),它使用 write_pen_release(cpu_logical_map(cpu));
写入 pen_release然后发送一个IPI arch_send_wakeup_ipi_mask(cpumask_of(cpu));
4) smp_secondary_init
例如 versatile_secondary_init() 函数再次使 pen_release 为 -1

这不是主 CPU 初始化/启动辅助 CPU 的方式吗

关于linux - 在 linux 中启动 cpus 时使用 pen_release 的基本概念是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com