慢慢欣赏linux 内核启动时将core0设置为自适应滴答模式失效

linux 4.19内核使能CONFIG_NO_HZ_FULL编译选项,生成内核之后,在bootloader启动参数指定core 0,4,5,6,7为自适应滴答模式,内核启动之后,发现core0并没有生效

# cat /proc/cmdline 
BOOT_IMAGE=(hd0,gpt1)/boot/Image nohz_full=0,4,5,6,7 root=/dev/nvme0n1p3 rw
# cat /sys/devices/system/cpu/nohz_full
4-7

对应的内核源代码为

drivers\base\cpu.c

#ifdef CONFIG_NO_HZ_FULL
static ssize_t print_cpus_nohz_full(struct device *dev,
				  struct device_attribute *attr, char *buf)
{
	int n = 0, len = PAGE_SIZE-2;

	n = scnprintf(buf, len, "%*pbl\n", cpumask_pr_args(tick_nohz_full_mask));

	return n;
}
static DEVICE_ATTR(nohz_full, 0444, print_cpus_nohz_full, NULL);
#endif

查看内核日志,确认内核将core设置为自适应滴答模式之前,会将启动核core0剔除掉

# dmesg | grep NO_HZ
[    0.000000] NO_HZ: Clearing 0 from nohz_full range for timekeeping
[    0.000000] NO_HZ: Full dynticks CPUs: 4-7.
# 

对应的内核代码如下

void __init tick_nohz_init(void)
{
	int cpu, ret;
	... ...
	cpu = smp_processor_id();	// 启动core为core0

	if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) {	// nohz_full存在core0时进入if分支内部,剔除core0
		pr_warn("NO_HZ: Clearing %d from nohz_full range for timekeeping\n",
			cpu);
		cpumask_clear_cpu(cpu, tick_nohz_full_mask);
	}
	... ...
	pr_info("NO_HZ: Full dynticks CPUs: %*pbl.\n",
		cpumask_pr_args(tick_nohz_full_mask));
}

参考文档
NO_HZ: 减少调度时钟的滴答
https://blog.csdn.net/zhoudawei/article/details/86427101

有利于提高xenomai/PREEMPT-RT 实时性的一些配置建议
https://blog.csdn.net/qq_22654551/article/details/105475672

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值