ハードウェア

アプリを動作させ続けるために必要なメモリ容量「ワーキングセットサイズ(WSS)」を見積もる方法


サーバーのメモリ容量を選択する際は「メモリはできるだけ多い方が快適」と考えがちですが、実際には必要以上のメモリを搭載しても無駄になってしまいます。Intelのフェローでコンピューティングパフォーマンスの専門家であるブレンダン・グレッグ氏は、アプリケーションが動作し続けるために必要なメモリの容量である「ワーキングセットサイズ(WSS)」の求め方を解説しています。

Working Set Size Estimation
https://www.brendangregg.com/wss.html


WSSを調べるには、現在のシステムで目的のアプリケーションを動作させた状態で「スワップファイルが作成されているか否か」を調べればOK。スワップファイルが常に作成されているようであれば、「WSSは現在のメモリ容量より大きい」ということを示し、スワップファイルがまったく作成されていない場合は、「WSSは現在のメモリ容量より小さい」ということになります。

スワップファイルの作成状況はLinuxやUNIX系OSなら「vmstat」、macOSなら「vm_stat」というコマンドで調査できます。

vmstatやvm_statを実行すると、システム状況が以下のように出力されます。出力のうち、「swap」欄の「si」がディスクからスワップインしているメモリの量、「so」がスワップアウトしている量を示しています。この出力例ではスワップファイルがまったく作成されていないため、「WSSは現在のメモリ容量より小さい」ということが分かります。

# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 7198308  10796 337144    0    0  2374    62  509  796 10  5 77  8  0


グレッグ氏が開発したパフォーマンス測定ツール郡「pmc-cloud-tools」でもWSSの手掛かりをえることができます。例えば、pmc-cloud-toolsに含まれる「pmcarch」を使えば、CPUのLLC(L3キャッシュ)の使用率を確認できます。pmcarchの実行結果は以下のように表示され、右端の「LLC」でLLCの使用率が分かります。下表のワークロードの場合、LLCのキャッシュヒット率であるLLC%がほぼ100%となっているので、ワークロードのWSSはLLCの容量以下と見積もることが可能です。

workload_A# ./pmcarch
K_CYCLES   K_INSTR      IPC BR_RETIRED   BR_MISPRED  BMR% LLCREF      LLCMISS     LLC%
3062544    4218774     1.38 498585136    540218      0.11 455116420   680676     99.85
3053808    4217232     1.38 499144330    524938      0.11 454770567   667970     99.85
3132681    4259505     1.36 515882929    680336      0.13 457656727   980983     99.79
[...]


さらに、pmc-cloud-toolsに含まれる「cpucache」を使えば、L1キャッシュやL2キャッシュの使用状況も確認できます。

# ./cpucache
All counter columns are x 1000
CYCLES     INSTR        IPC L1DREF    L1DMISS    L1D% L2REF    L2MISS     L2% LLCREF   LLCMISS   LLC%
13652088   5959020     0.44 1552983   12993     99.16 19437    8512     56.20 10224    4306     57.88
7074768    5836783     0.83 1521268   12965     99.15 21182    10380    51.00 13081    4213     67.79
7065207    5826542     0.82 1520193   12905     99.15 19397    8612     55.60 10319    4118     60.09
[...]


なお、グレッグ氏はほかにも様々な手法でWSSを見積もる手順を解説しています。また、Windowsの場合、Microsoftが公開している以下のドキュメントを参考にWSSを検証できます。

メモリ使用量に対する参照セットとシステム全体に対する影響 | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows-hardware/test/wpt/wpa-reference-set

この記事のタイトルとURLをコピーする

・関連記事
Amazon EC2上のサーバー開発と運用方法をARMORED CORE Vのインフラで学ぶ - GIGAZINE

ドラゴンクエストXは「世界は一つ」を実現するためにどのようなサーバ構成にしているのか? - GIGAZINE

サーバーマシン1台で同時接続者数1万名を実現するにはどうすればいいのかというノウハウと考え方 - GIGAZINE

非ECCメモリを使った結果データが破損したという体験談 - GIGAZINE

in ソフトウェア,   ハードウェア, Posted by log1o_hf

You can read the machine translated English article here.