LinuxCon Japan 2013 Preview

第5回 Linuxのメモリ管理最新事情─MM Summit 2013から

この記事を読むのに必要な時間:およそ 1.5 分

Linuxを取り巻く環境の変化に併せて,LinuxCon JapanはCloudOpen Japanとの併催となり,話題も多彩になってきました。IBMや富士通等のベンダが注力するエンタープライズ系の話題,ARMをはじめとする組込み分野の話題,KVMやOpenStack等を中心とする仮想化とクラウドの話題などさまざまなセッションが行われます。今年はLinus Torvaldsも来日してIntelのチーフエンジニアDirk Hohndelさんと対談するので注目が集まりそうですね。

個人的には29日の「Integrating Atomic IO into Filesystems Transactions Improve Linux swap for High Speed Flash Storage」30日のOpen vSwitchやGoogleのケーススタディ,31日のVFS Host Data Trackingやsystemdの話等に興味を惹かれています。

私はというと,4月に行われた「Linux Storage, Filesystem & MM Summit 2013」の内容をレポートするセッションを行います。今回の記事では宣伝を兼ねていくつかピックアップしてその内容について触れてみたいと思います。

memory compression

従来,メモリが足りないとスワップに追い出すような処理が行われてきましたが,CPUパワーが余りがちな現在,メモリを圧縮したほうがスワップに出すよりも高速な場合が多くあります。

メモリ圧縮の機能としてすでにカーネルに取り込まれてる機能がzramという機能で,/dev/zramというデバイスをスワップデバイスとして利用すると,スワップデバイスの代わりに/dev/zramという仮想デバイスに圧縮して保存してくれます。ただ,このzramから実際のスワップデバイスにデータを追い出すような処理はありませんでした。

これに対し,zcacheやzswapという機能が提案されています。zcache/zswapはメモリ管理とスワップデバイスの間に中間層を作り,ここで圧縮を行って必要ならスワップデバイスにデータを追い出す機能です。コンセプトは似ているのですが実装に差異があり,どちらをどういう風にカーネルにマージしていくのか話し合いがあり,zswapを先にマージしてzcacheはこれに追加する形でマージするようになりそうです。

図1 zswapの仕組み

図1 zswapの仕組み

zswap等の問題点として,メモリ上では圧縮してあってもデバイスに書くときには元のサイズに戻しておく必要があります。たとえば,4Mのデータが1Mに圧縮されてzswapに置かれていても,この1Mをデバイスに追い出すためには4M分のI/Oが必要になるかもしれない点が挙動が予測できないと懸念されています。……とはいえ楽しみな機能ですね。なお,zswapはスワップのあるサーバ等,zramはスワップデバイスを持たない組み込みデバイス等で有効と考えられています。

OOM Killer

毎年,槍玉に上がっている気がしますが,OOM-Killerというのはメモリ枯渇時にプロセスを勝手に殺してくれる機能で,悪名の高さは折り紙つきです。現在の実装はとにかくメモリをたくさん使い込んでいるプロセスを強制終了させるようになっていて,一応プロセスごとに優先度のチューニングができるようになっています。ただし実際の運用を考えると,メモリ枯渇時に実際に誰が死ぬのか判りません。この点がユーザおよび開発者を苛立たせているという状況です。

これに対して,万人に通用する「殺し」のアルゴリズムは無いからユーザランドのプログラムに通知を上げるようにして,ユーザにどのプロセスを殺すか選ばせるようなアイデアが議論されました。結局,メモリが枯渇している時点でユーザプログラムが確実に動作するのは難しいためこの意見は取り下げられましたが,これを発展させ,カーネル内にOOM Killerアルゴリズムをプログラムできるようなスクリプティング機能を追加するのはどうかという方向の議論になったりしています。

筆者的にはアプリケーションの関係性を意識してくれるようになれば良いのかなとは思いますが,具体的に進展があると良いですね。

page cache reclaim

巨大なファイルを読み込み,データを繰り返し利用する際,現状のメモリ管理アルゴリズムではうまく扱えないことが議論されました。たとえば,⁠ずっと頻繁に使われてきたけども今は使ってないページ」がある程度残っている状態で新しく巨大なファイルへのアクセスを始めると,古くからメモリにあるけど「もう使わない」データが追い出されずに新しいファイルのデータが追い出されるようなことがあります。

この問題に対して,追い出された後,すぐにもう一度読みだされるような状態を検出し,LRUのアルゴリズムに反映させて状況を改善しようという取組について議論されました。現状のLRUではうまく扱えないところを付加情報をいれてなんとかしようというわけです。

他にもロック競合の話やcgroupの話,コプロセッサとのメモリ共有の話などがあったのですが,その辺は会場で,ということで LinuxCon Japan 2013でお会いしましょう。

著者プロフィール

亀澤寛之(かめざわひろゆき)

静岡県在住のLinuxエンジニアです。現在,memory cgroupのメンテナの一人をつとめており,主にメモリ関連の話題に口を出しています。富士通株式会社のLinuxエンジニアの一人としてサーバシステムの開発やサポートに従事しています。

コメント

コメントの記入