Multithreading Linux是否会进入所有内核的内核?
对于运行Linux2.6.x的多核计算机,当线程进行系统调用时会发生什么?它是否仅在线程运行的内核上放入内核,还是在所有内核上放入内核(如果这是新手问题,请抱歉)Multithreading Linux是否会进入所有内核的内核?,multithreading,linux-kernel,multicore,Multithreading,Linux Kernel,Multicore,对于运行Linux2.6.x的多核计算机,当线程进行系统调用时会发生什么?它是否仅在线程运行的内核上放入内核,还是在所有内核上放入内核(如果这是新手问题,请抱歉) 一般来说,当接收中断时,这种行为(以正确的为准)是否相同?如果没有,区别是什么?只有执行系统调用的线程进入内核。Linux中的所有调度都是在线程粒度上完成的。至于中断-它们被路由到一个内核,即每个给定硬件事件只中断一个处理器。然后可以手动将中断分配给特定的核心。这是通过/proc/irq/irq-NUMBER/smp\u affini
一般来说,当接收中断时,这种行为(以正确的为准)是否相同?如果没有,区别是什么?只有执行系统调用的线程进入内核。Linux中的所有调度都是在线程粒度上完成的。至于中断-它们被路由到一个内核,即每个给定硬件事件只中断一个处理器。然后可以手动将中断分配给特定的核心。这是通过
/proc/irq/irq-NUMBER/smp\u affinity
中的掩码完成的。您可以在/proc/interrupts
中看到哪个CPU接收哪些硬件中断,只有一个内核处理系统调用,而只有一个内核处理中断
我手头上没有任何关于中断是如何路由的参考资料——也许在这里会有所帮助
但是,想象一下,如果所有内核都被每个系统调用或中断中断。Linux被设计成可扩展到多个核心。这将扼杀这种可伸缩性——在大型服务器上,每一次磁盘I/O、计时器中断等都将有效地使系统中的每一个内核停止运行,从而阻止它们执行有用的工作