3 min read
[AI 小众新闻]

Linux 7.0下PostgreSQL性能下降50%!?调度器变更的陷阱


  • 性能剧烈下降: 在搭载Linux 7.0的96-vCPU Graviton4机器上,PostgreSQL的吞吐量与Linux 6.x相比下降了大约一半(约9.8万条→约5万条/秒)。...
※この記事はアフィリエイト広告を含みます

Linux 7.0下PostgreSQL性能下降50%!?调度器变更的陷阱

📰 新闻概述

  • 性能剧烈下降: 在搭载Linux 7.0的96-vCPU Graviton4机器上,PostgreSQL的吞吐量与Linux 6.x相比下降了大约一半(约9.8万条→约5万条/秒)。
  • 瓶颈的识别: AWS的工程师Salvatore Dipietro的调查发现,CPU时间的55%以上消耗在s_lock(自旋锁)函数中。
  • 调度器的仕様变更: 在Linux 7.0中,之前推荐的服务器配置“PREEMPT_NONE”被废除,强制应用“PREEMPT_LAZY”或“FULL”。

💡 重要要点

  • 自旋锁的崩溃: 持有自旋锁的线程被内核中断执行(抢占),导致其他线程在等待该锁时处于空转状态,形成“负循环”。
  • StrategyGetBuffer的竞争: PostgreSQL在共享缓冲池中查找缓冲时使用的StrategyGetBuffer函数的竞争带来了致命的损害。
  • 现代架构的挑战: 在96 vCPU的多核环境和高并发负载下,操作系统调度的微小差异使整个系统面临瘫痪的风险。

🦈 鲨鱼的眼(策展人的视角)

这条新闻是操作系统“本意良好的进化”对数据库等中间件核心的直接打击的一个非常有趣的例子啊!

尤其是,Linux 6.12中作为妥协方案引入的“PREEMPT_LAZY”,在像PostgreSQL这样高度依赖自旋锁的高负载服务器工作负载中显得不足,这一点尤为具体。55%的CPU时间被一个函数s_lock消耗的事实,显示了操作系统的抢占(中断)是多么精细地平衡。考虑迁移到Linux 7.0的工程师们,必然需要应用补丁或进行配置更改,以避免这个“调度器的陷阱”!

🚀 接下来会怎样?

在Linux内核社区中,针对像PostgreSQL这样的案例进行抢占控制补丁的讨论和修正的引入的可能性很高。此外,数据库方面也可能加速向不再过度依赖自旋锁的更高级的无锁算法的转变。

💬 鲨鱼视角的一句话

最新的操作系统并不一定意味着更快!自旋锁让人头晕,鲨鱼都快变成黄油了呢!🦈🌀

📚 术语解读

  • 抢占: 操作系统强制中断正在执行的进程,并将CPU分配给其他进程。

  • 自旋锁: 一种轻量级同步机制,CPU在锁释放前会不断循环(空转)等待。

  • 缓冲池: 数据库将从磁盘读取的数据缓存到内存中的区域。

  • 信息来源: Linux 7.0 Broke PostgreSQL: The Preemption Regression Explained

【免責事項 / Disclaimer / 免责声明】
JP: 本記事はAIによって構成され、運営者が内容の確認・管理を行っています。情報の正確性は保証せず、外部サイトのコンテンツには一切の責任を負いません。
EN: This article was structured by AI and is verified and managed by the operator. Accuracy is not guaranteed, and we assume no responsibility for external content.
ZH: 本文由AI构建,并由运营者进行内容确认与管理。不保证准确性,也不对外部网站的内容承担任何责任。
🦈