● 摘要
计算机的发展已经进入了多核时代。在功耗墙与内存墙的限制下,依靠主频提升来提高处理器计算速度的方法已经不再有效。一方面,由于处理器的功耗与处理器频率的平方成正比,更快的主频往往意味着更大的电能消耗;另一方面,处理器与内存之间日益增大的速度鸿沟也否定了这种方法。作为一种妥协,我们通过增加处理单元的数目来实现并行计算,从而进一步提升计算机的性能。操作系统中有大量共享数据结构,对它们的访问需要被串行化。用于线程串行化的机算法被称为同步机制。自旋锁是一种非常重要的同步机制。然而,现有的自旋锁或者表现出很差的扩展性,或者虽然可扩展但却牺牲了其它方面的特性。
本文结合现代多处理器的硬件架构,探讨弹性可扩展自旋锁(Flexible and Scalable Lock, FSL)的设计方案。与现有的工作相比,FSL具备以下四个特点。首先,它的设计充分考虑了当代分布式共享内存的多核处理器架构,并且针对这种架构的特性做出了专门的优化;其次,这种新的可扩展锁使用去集中化的设计理念,每一个锁的实例都具备若干个独立的缓存行。再次,现有的同步算法均使用一个锁在所有线程之间同步,而本文将要提出的设计使用双层锁结构,即每一个弹性可扩展锁的实例均由两层子锁构成。最后,该锁支持不同的分组粒度。 使用者可以根据不同的锁上下文对不同的锁实例设定不同的分组粒度。与现有的专为NUMA体系结构设计的同步算法相比,本文进一步考虑了位于同一个处理器芯片内部的处理核心之间表现出的物理亲和性,进一步探索这种类型的锁的设计空间,并且提出弹性可扩展锁的设计方案,来为不同的自旋锁上下文和锁实例提供可变的、精准调制的分组大小。这一新的设计为亲和性锁的讨论提供了一个统一的模型,并且可以将现有的考虑NUMA架构的设计完全纳入其中,因为与这种弹性可扩展锁的设计相比,它们仅考虑了模型中的一个特例。新的锁设计方案提供与现有Linux内核兼容的使用接口,因此可以被方便地集成到内核中。使用这个锁的实验表明,在不同的负载场景下,弹性可扩展锁相对于ticket lock的性能提升可达到12倍至14倍。
相关内容
相关标签