从一个问题看isolate出来的cpu的rt_rq的root_domain

现象描述:

    在一个8核环境中,内核在启动时传入内核启动参数isolcpus=4,5,6,7  即将cpu4 cpu5 cpu6 cpu7置为isolated核。系统启动后cpu4 cpu5 cpu6 cpu7通过cpu亲和性各自运行了一个死循环的实时任务,从top看出4,5,6,7这四个核的cpu利用率只能够跑到95%;

    然而将内核启动参数改为isolcpus=3,4,5,6,7,内核启动后也在cpu4 cpu5 cpu6 cpu7通过cpu亲和性各自运行了一个死循环的实时任务,但是这一次从top看到4 5 6 7四个核看到的cpu利用率却是100%。

 

问题原因:

  1) 内核默认的实时带宽为95%。可通过/proc/sys/kernel/sched_rt_runtime_us和/proc/sys/kernel/sched_rt_period_us看到他们的值分别为950000和1000000。

   2) 另一方面,虽然cpu4 cpu5 cpu6 cpu7这些核是isolate出来的,但是这几个cpu对应的rt_rq->rd,即root_domain->span是0xF0,也就是cpu4,cpu5,cpu6,cpu7的掩码。

    这也就说明了为何isolate为5个核、跑4个死循环实时任务时能够达到100%了。

你可能感兴趣的:(linux内核)