Yuhang Zheng

Linux使用单核心启动的方法

N 人看过

日前在解决问题的时候,因为要排除某些因素,所以想要减少Linux系统中使用的CPU的核心,之前在LS1028平台,可以通过TEST_SEL_B和cfg_svr[0]直接更改其变成其他的型号,参见以下内容:

image-20230920170823720

image-20230920172145742

比如可以通过将cfg_svr[0]置低以变成LS1018,以实现将双核变成单核的效果。

同样在LS1046平台,也有以下的内容:

image-20230920171052723

image-20230920171027816

可以看到也可以通过将TEST_SEL_B引脚接地,来把LS1046A变成LS1026A,以实现将四核变成双核的效果。

但是我们如果想要只使用一个CPU核心应该如何操作呢?

后来在在网上看到了以下的文章:

AMD64 和 Intel 64 系统的 kdump 中的多个 CPU 支持

在 AMD64 和 Intel 64 系统中,kdump 内核崩溃转储机制现在可以引导,并启用了多个 CPU。这解决了在创建内核崩溃转储时因为高输入和输出而出现问题,在使用 maxcpus=1nr_cpus=1 内核选项时,Linux 可能无法为设备分配中断。此功能以前作为技术预览提供,现在被完全支持。

要在崩溃内核中启用多个 CPU,请在内核命令行中提供 nr_cpus= \X**** 选项(其中 X 是处理器数)

上面说明了可以在uboot的环境变量的boorargs中可以通过maxcpus=1nr_cpus=1来设置使用的CPU个数。

那这两个有什么区别呢?下面我们分别使用这两个选项进行测试:

首先是使用 nr_cpus=1,我们使用八核的RK3588来进行测试,在uboot命令行输入以下指令

setenv bootargs "storagemedia=emmc nr_cpus=1"
saveenv
reset

然后重启进入到文件系统,可以使用lscpu查看使用的CPU情况,结果如下:

image-20230920115143566

可以看到以下内容:

CPU(s):                  1
  On-line CPU(s) list:   0

说明仅使用了一个CPU,且仅有一个CPU核心可以被使用,此时使用dmesg去查找CPU相关的信息,结果如下:

image-20230920115201667

然后是使用 maxcpus=1,在uboot命令行输入以下指令

setenv bootargs "storagemedia=emmc maxcpus=1"
saveenv
reset

然后重启进入到文件系统,可以使用lscpu查看使用的CPU情况,结果如下:

image-20230920115327378

可以看到以下内容:

CPU(s):                  8
  On-line CPU(s) list:   0
  Off-line CPU(s) list:  1-7

说明仅使用了一个CPU,且有八个CPU核心可以被使用,一到七号CPU核心设为了Off-line状态,此时使用dmesg去查找CPU相关的信息,结果如下:image-20230920170338078