使用 schedo 命令修改 MAXSPIN 参数
如果一个线程想获得一个当前正由另一个线程拥有的锁,而且上述第二个线程正运行在另一个 CPU 上,那么需要该锁的线程将在 CPU 上自旋,直到作为所有者的线程释放该锁到某一特定值,该值由名为 MAXSPIN 的可调参数指定。
MAXSPIN 对于 SMP 系统的缺省值是 0x4000 (16384),而在 UP 系统上保持为 1。 如果您注意到一个系统上前所未有的更多闲置或 I/O 等待时间,可能是因为线程更频繁地进入睡眠。 如果这会引起性能问题,那么对 MAXSPIN 调整,使它的值更大,或者将它设置为-1,该值意味着自旋达到 0xFFFFFFFF 次。
要在进入休眠之前修改要旋转的次数,请使用 schedo 命令的 max旋 选项。 为了减少可能由过度自旋引起的 CPU 使用,如下减小 MAXSPIN 的值:
# schedo -o maxspin=8192您可能会观察到上下文切换的增加。 如果上下文切换成为瓶颈,那么增大 MAXSPIN。
为了更改该值,您必须是 root 用户。