注目★★★★★Lobsters
PostgreSQL ベンチマーク低下は設定ミス、Linux 7.0 カーネルは無実
30秒で把握
- 1Linux 7.0 の PREEMPT_NONE 廃止で PostgreSQL スループット 0.51 倍に低下と報道されたが、回帰は 4KB ページ+大規模共有メモリ環境での spinlock 内ページフォルト拡大が主因
- 2ほぼ全ユーザーはカーネルアップグレード延期不要、huge_pages 有効化でページフォルト ~31M→~61K-120 に激減して低下は消失
- 3ベンチマークが非現実的な 96 vCPU + 1,024 クライアント設定を使用、本番環境の shared_buffers マッピング方式とワークロードで個別評価すべき
要約
AWS のベンチマークで Linux 7.0 上の PostgreSQL スループットが 6.x 比 0.51 倍に低下した報告が話題になったが、実態は設定の問題であり、ほぼ全ユーザーはカーネルアップグレード延期の必要がない。回帰の根本原因は、96 vCPU マシンで 4KB ページ上の 100GB 超の共有メモリを使う際、バッファマネージャの spinlock 内でマイナーページフォルトが発生し、Linux 7.0 の PREEMPT_LAZY 化がその可視化を 2 倍に拡大した点にある。huge_pages を有効化すればページフォルトが ~31M から ~61K-120 に劇減してスループット低下は消失する。
あなたへの影響
ベンチマークが非現実的な設定 (4KB ページ + 大規模共有メモリ + 1,024 クライアント同時接続) を使っていたため、大多数の本番 PostgreSQL 環境では影響を受けない。
推奨:カーネルアップグレード判断は shared_buffers のマッピング方式 (huge_pages の状態) とワークロード特性で評価し、根拠なくカーネルバージョンを固定する必要はない。