本文主要是介绍慢慢欣赏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为core0if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) { // nohz_full存在core0时进入if分支内部,剔除core0pr_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
这篇关于慢慢欣赏linux 内核启动时将core0设置为自适应滴答模式失效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!