通过限制并发以避免可扩展性崩溃
摘要:多线程应用程序中的饱和锁经常会降低性能,导致所谓的可扩展性崩溃问题。当越来越多的线程在饱和锁中循环时,会导致整个应用程序的性能逐渐衰退甚至突然下降。这个问题在超额订阅系统(比可用硬件核心更多的线程系统)上特别严重(但不完全)。在本文中,我们介绍了一种名为GCR(通用并发限制)的机制,旨在避免可扩展性崩溃。设计为通用的、与锁无关的封装器,GCR拦截锁获取调用,并决定何时允许线程进行底层锁的获取。此外,我们还提出了GCR-NUMA,这是GCR的非一致内存访问(NUMA)感知扩展,旨在确保允许获取锁的线程是在同一插槽上运行的线程。广泛的评估包括两打以上的锁、三台计算机和三个基准测试表明,在竞争和增长的线程数的情况下,GCR可以显著提高性能(在许多情况下,高达三个数量级),而在底层锁不竞争时几乎不会引入明显的减速。GCR-NUMA从更轻的锁竞争开始带来更大的性能提升。
作者:Dave Dice and Alex Kogan
论文ID:1905.10818
分类:Operating Systems
分类简称:cs.OS
提交时间:2019-07-15