kernel对支持smt的cpu的启动

该博客探讨了在支持SMT(Simultaneous Multithreading)的CPU中,BIOS如何在开启或关闭SMT的情况下向操作系统报告CPU核心数。文章通过分析Linux内核代码,指出即使CPU支持更高的SMT级别,如SMT2,BIOS在开启SMT后会将核心数报告为32(例如,从16核变为32线程),但操作系统可以通过命令行参数选择是否启用SMT。
摘要由CSDN通过智能技术生成
有一个疑问,支持smt的cpu,bios 传递给os的cpu的个数是开了smt后的还是没有开smt的呢?
这里举个例子,例如支持smt2的cpu,其实还有支持smt4,smt8的cpu,例如ibm的power系列
假如支持smt2,没有开smt的时候是16核,开了smt就是32核,那在开了smt后,bios就要告诉kernel 当前
的cpu 核数是32,这点可以从下面的函数中发现端倪.
static int cpu_up(unsigned int cpu, enum cpuhp_state target)
{
	int err = 0;

	if (!cpu_possible(cpu)) {
		pr_err("can't online cpu %d because it is not configured as may-hotadd at boot time\n",
		       cpu);
#if defined(CONFIG_IA64)
		pr_err("please check additional_cpus= boot parameter\n");
#endif
		return -EINVAL;
	}

	err = try_online_node(cpu_to_node(cpu));
	if (err)
		return err;

	cpu_maps_update_begin();

	if (cpu_hotplug_disabled) {
		err = -EBUSY;
		goto out;
	}
#从这里可以看到smt2也是被当成一个独立cpu的,其次即使bios开了smt,os也可以通过命令行参数禁止掉smt
	if (!cpu_smt_allowed(cpu)) {
		err = -EPERM;
		goto out;
	}

	err = _cpu_up(cpu, 0, target);
out:
	cpu_maps_update_done();
	return err;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值