现象描述:
在一个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%了。