2.2. Ticket 自旋锁


系统设计的关键是要保证进程不会更改另一个进程使用的内存。无法控制的内存更改可导致数据污染和系统崩溃。要防止此类情况出现,操作系统要允许进程锁定一个内存片段,执行操作,然后解锁或者“释放”内存。
内存锁定的常见使用是通过自旋锁实现的,它可让进程一直检查是否有可用的锁,并在所可用时立即使用。如果有多个进程竞争同一锁,那么在该锁被释放后第一个请求该锁定进程会得到它。当所有进程有对内存相同的访问时,这个方法是“公平”的且运作良好。
遗憾的是,在 NUMA 系统中,不是所有进程都对所有对等的访问。与该锁处于同一 NUMA 节点中的进程明显可以优先获得该锁。远程 NUMA 节点中的进程可能会有锁不足和性能下降的问题。
为解决这个问题,红帽企业版 Linux 采用 ticket 自旋锁。这个功能为锁添加了预留队列机制,可让所有进程根据其提出请求的时间顺序使用锁。这样可以消除计时问题以及不公平的锁请求利益。
虽然 ticket 自旋锁负担比普通自旋锁要高,但它缩放比例更大,并可在 NUMA 系统中提供更好的性能。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.