在我的 Ubuntu 机器上,正在运行的默认内核映像是为 smp ( CONFIG_SMP=y
) 构建的。但是这台机器只有1个cpu。
在单处理器内核上,与 smp 内核不同,spin_lock/unlock
是空函数。那么在这个设置中是如何表现的spin_lock()
呢?spin_unlock()
这种 smp 特定代码是否会对性能产生影响?
在我的 Ubuntu 机器上,正在运行的默认内核映像是为 smp ( CONFIG_SMP=y
) 构建的。但是这台机器只有1个cpu。
在单处理器内核上,与 smp 内核不同,spin_lock/unlock
是空函数。那么在这个设置中是如何表现的spin_lock()
呢?spin_unlock()
这种 smp 特定代码是否会对性能产生影响?
当前的 Linux 内核包含一个补丁,您可以使用术语“SMP 替代品”搜索该补丁。简而言之,在引导过程中,如果内核检测到它正在单处理器机器上运行,则自旋锁功能会被热修补而没有任何操作。
是的(可能没有)。
是: A. 自旋锁定/解锁将运行锁定和解锁的实际代码,因为当您编译它时,编译器不知道您是否要在具有一个或多个 CPU 的机器上运行它。B. 虽然你有一个 CPU,但如果你使用线程,你可能仍然想使用它。
可能不会:我猜您会问,因为您没有为需要锁定的部分使用线程,而且您只有一个 CPU。在这种情况下,自旋锁不应该进入自旋状态。所以性能开销可以忽略不计。