gpt4 book ai didi

linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

转载 作者:IT王子 更新时间:2023-10-29 00:25:41 27 4
gpt4 key购买 nike

我在 grub.conf 中添加了“isolcpus=3 nohz_full=3 rcu_nocbs=3”RedHat 7.1,内核:linux 3.10.0-229 内核并根据 http://www.breakage.org/2013/11/15/nohz_fullgodmode/我还执行以下命令:

cat /sys/bus/workqueue/devices/writeback/cpumask
f
echo 1 > /sys/bus/workqueue/devices/writeback/cpumask

cat /sys/bus/workqueue/devices/writeback/numa
1
echo 0 > /sys/bus/workqueue/devices/writeback/numa

盒子只有 4 个 cpu 内核,我运行以下 shell:

watch -d 'cat /proc/interrupts'

看起来工作完美,只有 cpu0 本地定时器中断每 2 秒有 2000 个,else cpu 1 到 cpu 3 每 2 秒少于 10。

然后我测试以下来源:

void *Thread2(void *param)
{
pthread_detach(pthread_self());
while( 1 ){
sleep( 100000 ) ;
}
}

void *Thread1(void *param)
{
pthread_detach(pthread_self());
while( 1 ){
;
}
}

int main(int argc, char** argv)
{
pthread_t tid ;
pthread_create(&tid , NULL, Thread1, (void*)(long)3);
pthread_create(&tid , NULL, Thread2, (void*)(long)3);

while( 1 )
sleep( 5 ) ;
}

并运行它:

taskset -c 3 ./x1.exe

观察输出:

watch -d 'cat /proc/interrupts'

这次,cpu 3 每 2 秒获得 10~30 个本地定时器中断,看起来不错,然后我尝试通过以下方式运行 2 线程 1:

pthread_create(&tid , NULL, Thread1, (void*)(long)3);
pthread_create(&tid , NULL, Thread1, (void*)(long)3);

然后再次运行它:

taskset -c 3 ./x1.exe

然后我看到核心 3 与核心 0 具有相同的本地定时器中断,它是每 2 秒 2000 次中断。

请问,为什么2非常忙的thread1会导致core 3有更多的定时器中断?!是什么原因造成的?!以及如何修改它(如果可以)?!

最佳答案

在第二种情况下,内核需要在 core 3 上调度 2 个 cpu bound 任务,动态 ticks 配置仅在只有一个可运行任务时才适用。我认为 SCHED_FIFO 会停止这些中断(所以我开始回答),但尚未根据 https://www.kernel.org/doc/Documentation/timers/NO_HZ.txt 实现

除了在不同的 CPU 上调度线程外,没有办法改变这种行为。您可以随时破解内核来实现您的需要。

关于linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38112585/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com