Systems

malloc の効率を超えフリートの効率に対応

#gcp

※この投稿は米国時間 2021 年 7 月 16 日に、Google Cloud blog に投稿されたものの抄訳です。

「メモリウォール」はコンピュータ ハードウェア設計における長年の課題でした。CPU の高速化はとどまることを知りませんが、メインメモリ(またはもっと悪い場合にはディスク)は、帯域幅とレイテンシの点で性能向上が追いついていません。データセンター ワークロードのワーキング セットが大規模であるためにこの問題がさらに悪化し、トランスレーション ルックアサイド バッファー(TLB)のミスが、ウェアハウス規模コンピュータの「データセンターにつきもののトラブル」の大部分を占めるようになりました。この投稿では、TLB ミスを削減し、アプリケーションのパフォーマンスを改善する手法の 1 つである hugepage について説明します。

TLB を使用すると、プロセッサのコアはプログラム内の仮想アドレスを、データが保持されているメモリ内の物理的な位置にマッピングできます。TLB でキャッシュできる TLB エントリの数は限られています。マッピングが TLB に存在しない場合、負荷の高いオペレーションでフェッチする必要があります。x86 プロセッサの場合、各 TLB エントリが 4 KiB のメモリ領域に仮想から物理へのマッピングを提供します。それに対し、hugepage の場合、1 つの TLB エントリが 2 MiB のメモリ領域のマッピングを提供します。同じ数の TLB エントリでメモリを 512 倍マッピングできるようになりました。これにより、TLB ミスの数とそれに関連する費用が大幅に削減されます。

Google は、hugepage により成し遂げられたいくつもの改善を直接目にしてきました。OSDI 2021 の論文「Beyond malloc efficiency to fleet efficiency(malloc の効率を超えフリートの効率に対応)」では、本番環境のメモリ アロケータである TCMalloc を改良して hugepage 対応にした Temeraire について説明しています。これらを反映したコードは GitHub で入手できます

hugepage レベルでユーザー スペースのメモリを管理することにより、アプリケーション コードを高速化すると同時に、オペレーティング システムにメモリをより高速に返すことで、アロケータのメモリ オーバーヘッドを削減できます。この改善により、Google のデータセンターでは TLB のストールが 6% 減少し、メモリのフラグメンテーションが 26% 削減されました。

この作業は、アロケータ コードのサイクルを最小限に抑えるという発想から、フリート全体の生産性(特定のサーバーセットが実行できる有用な作業の量)を向上させるという発想への方向転換を象徴しています。アプリケーションのパフォーマンスが向上するのであれば、malloc に費やす時間を増やし、いっそう適切な割り当ての判断をできるようにする(ひいてはメモリストールを削減する)ことは、適切なトレードオフです。このアプローチの利点の一例を挙げます。あるサービスでは TCMalloc の時間を 2.7% から 3.5% に増やしました。これは明らかに退歩です。しかしその代わりに、1 秒あたりのリクエスト数が 3.4% 増加し、レイテンシが 1.7% 削減され、ピークメモリ使用量が 6.5% 削減されました。

また、TCMalloc の最適化から得た教訓により、最適化プロセスを改善することもできました。こうした改善は OSDI ペーパーでも紹介しています。

  • サーバーで実行されている TCMalloc インスタンスにテレメトリーを追加し、Google 全体のプロファイリングで収集することで、Google のデータセンター内のさまざまなワークロードにおける TCMalloc の使用量を把握できます。

  • サイト信頼性エンジニアリングを活用して、ごく一部のマシンで A/B テストを実施するためのツールを開発しました。これにより、一部のマシンに新しい最適化を安全に展開し、パフォーマンスへの影響を観察できます。

どちらの場合も、変更の影響に関するフィードバックを早めに取得すると、観察から最適化までのサイクルが短縮されます。これらのツールは重要な機能を提供します。ソフトウェアが直接効率化されるわけではありませんが、最適化が可能になり、最適化の進歩の原動力になります。

Temeraire の設計、実装、有効化から得た教訓を利用することで、最適化の好循環が実現されました。Temeraire を導入してから、hugepage 割り当ての判断をさらに改善する分析情報を獲得できました。この取り組みは、ISMM 2021 の論文「Adaptive Hugepage Subrelease for Non-moving Memory Allocators in Warehouse-Scale Computers(ウェアハウス規模のコンピュータの非移動メモリ アロケータに適応できる hugepage をサブリリース)」で紹介しています。この取り組みをきっかけに、他の取り組みにおいても、データセンターの負担によって消耗されるサイクル数という狭い視点を超えて、データセンターの負担を最適化することによるアプリケーション レベルの改善に目を向けていけたらと考えています。


-シニア スタッフ ソフトウェア エンジニア Chris Kennelly