|
原帖由 colddawn 于 2007-9-20 10:49 发表 ![]()
关于处理器黏着,目前的操作系统大部分都已经加入了这方面的考虑.大体思路是尽量保证某个线程始终在某一特定处理器核心上执行.这样做的意义有:1)避免线程在处理器之间迁移导致的cache miss;2)避免核心间迁移线程带来的额外处理时间;3)对于全抢占式设计的内核,避免某些高优先级内核线程被迁移导致的死锁问题,例如IRQ处理等。
有一点值得商榷:在SMP系统中,线程在处理器之间迁移,不会导致cache miss。因为在SMP系统中,每个CPU的独立cache是需要同步的,具体的说,当一个CPU修改了它的某个cache line,它会通知其他CPU把它们cache中的该cache line设置为invalid, 这样其他CPU以后访问该cache line就会导致一个invalidations of shared cache lines,这种情况就叫做cache miss。CPU之间正是通过cache miss的机制来保证MESI的。
只有在非SMP的系统中,线程迁移才会带来额外的处理时间,因为此时的UMA需要用软件去实现。 |
|