我的意思是,在具有“n”个 CPU 的多核系统中,每个 CPU 是否都安装了自己的 Linux 内核,或者所有 CPU 是否都有相同内核映像的副本?
关于多核的另一个问题是内核跟踪。由于跟踪是在内核级别进行的,那么我应该对每个 CPU 分别进行跟踪,还是可以对所有 CPU 一起进行内核跟踪?
答案1
所有 CPU 共享相同的内存系统,并且只加载一个 Linux 副本。每个正在运行的进程都有自己的堆栈,但在单 CPU 系统上也是如此。
Strace 是通过 ptrace 实现的,我相信它可以在单个 PID 上运行,所以我认为这意味着它只会跟踪单个线程的执行。
答案2
您将获得一个内核映像,其中包含跨内核/CPU 执行的代码部分。这将根据内核开关/编译方式而有所不同。
相对于内核跟踪,您仍然会有一个跟踪!
请记住,同一个单一内核将由多个 CPU/核心执行......
希望这有帮助,谨致问候,汤姆。
答案3
谢谢大家的回答。我自己做了一些研究,发现在多核系统中两者都是可能的。SMP 多核系统将为所有核心配备一个 Linux 内核,而在 AMP 多核系统中,每个核心都有自己的内核。通常,一些多核将有几个核心用于 AMP 执行实时关键任务,其余核心将是 SMP 执行非关键和正常任务。
我问的问题是关于内核跟踪的。如今,大多数内核都带有内置的 kprobe,可让内核开发人员获取有关内核性能的信息。我想,第一个问题的答案也解决了这个问题。在 SMP 中,将生成单个内核跟踪,而在 AMP 中,将生成与 CPU 数量一样多的跟踪。
AMP 代表非对称多处理,SMP 代表对称多处理