Linuxこのブログは、日々頭の中に蓄積されては薄れていく技術情報を書き留めておく為のものです。Linuxメモリチューニングの一環としてページキャッシュの効率化を纏めてみます。ちなみにLinuxは空きメモリをがしがしファイルI/O用のキャッシュとして利用しますが、メモリはページ単位で分割管理されており、これらのキャッシュをページキャッシュと言います。要は無駄なページキャッシュを残さないようにしてあげればよいのです。通常のI/O処理はライトバックで処理されているので、ページキャッシュに書き込まれた時点でプロセスには書き込み完了通知が返され、キャッシュ上のデータはバックグランドでディスクに書き込まれていきます。頻繁にライトバックをしてあげる事でキャッシュの解放サイクルを早める事が出来ます。結果的に無駄なページキャッシュの使用を抑える事が出来るのです。カーネル2.6系では「pdflush」デーモンがライトバックしているので、pdflushのタイミングを変更していく事になります。変更方法はカーネルパラメータで、以下の4種類が主なパラメータになります。vm.dirty_backgroud_ratiovm.dirty_ratiovm.dirty_expire_centisecsvm.dirty_writeback_centisecsではひとつずつ見ていきましょう。全物理ページに対する割合(%)を超えているとpdfluashによるライトバックが行われます。ライトバック処理は優先度の低いバックグラウンドプロセスとして動きます。デフォルト値は10%です。vm.dirty_ratioこれはvm.dirty_backgroup_ratioと全く同じ意味ですが、唯一異なるのはこの値を超えた場合は、優先度が高いフォアグラウンドプロセスとして動くという事です。デフォルト値は40%です。この二つはお互い関連していて、通常vm.dirty_backgroud_ratioはvm.dirty_ratioの半分ぐらいの値を目安にして設定していきます。ちなみにvm.dirty_backgroud_ratioの値をvm.dirty_ratioより大きくするとその値は無視されます。vm.dirty_expire_centisecsこれは、キャッシュ上に存在しているページの存在時間がこの値を過ぎた場合にライトバックされます。デフォルト値は3000です(単位は10m/s)vm.dirty_writeback_centisecsこれは、pdflushの起動間隔を指定するパラメータです。デフォルト値は500です(単位は10m/s)これらの値を適宜変更してあげれば効率化が出来ます。環境によって違いがあるので一概には言えませんが、vm.dirty_ratioの値を低くしてあげるのが一番効果が高いと思います。実際にページを解放するのはまた別の処理になります。ライトバックと同時に「ページ回収」も早めてやる必用があります。ページ回収処理もカーネルパラメータで調整可能です。値はmin-free-kbytes空きメモリーがこの値を下回った場合にページ回収処理が動くので、この値を大きくしてあげればページの解放処理も早くなります。この値を大きくし過ぎてしまうと常にシステム上に大量の空きメモリが必要となり、メモリーを有効に活用出来なくなってしまうので注意が必用です。これらの値を調整しつつ、自システムに最適な値を見つけて下さい。Cesati商品詳細を見るメモリ管理とプロセス・スケジューリングの項が増補されている。プロセス管理、ファイルシステム、メモリ管理、割り込みハンドラ、同期などソースを交えて説明があるので結構分かりやすい。Linuxページキャッシュを手動で解放するやり方。カーネルパラメータのdrop_cachesを使えば簡単に出来ます。drop_cachesはライトバック済みのページキャッシュやslabキャッシュを解放します。/proc/sys/vm/drop_cachesちなみにデフォルト状態に戻す場合は"0"を書き込みます。Cesati商品詳細を見るメモリ管理とプロセス・スケジューリングの項が増補されている。プロセス管理、ファイルシステム、メモリ管理、割り込みハンドラ、同期などソースを交えて説明があるので結構分かりやすい。Linux前回のLDAPセッション数の問題ついでに。扱いはローカルのファイルと同じ。ファイルディスクリプタによる訳です。filesによるので、ulimitを使えば簡単に変更可能。デフォルトは1024だった。(前回はセッション数1000を超えていたのでかなり危険な状態でした。)サービス毎にulimitiの値を指定するにはinitスクリプトに以下を追記するだけ。LDAP(slpad)のulimitの値を変えるには以下のようにする。←ハードリミットを8192に変更これでセッション数が1000を超えても全然大丈夫。(もちろん物理リソースの許す限り)ついでにOS全体の扱えるファイルディスクリプタを変更するにはカーネルパラメータで。←システム全体で使えるスレッド上限(ついで)以上。ラブ商品詳細を見るLinuxの概要、カーネル、Cライブラリ、Cコンパイラの基礎知識から、ファイルI/O、バッファサイズ管理、メモリマッピング、システムコール、メモリ管理等実践的なトピックが多く盛り込まれている。LinuxLinux関連トピック中心のブログにするつもりでしたが気付いたらあんまりLinux関連の記事をUPしてませんでした。今日は珍しくLinuxの話題を一つ。世間一般にはあまり浸透してないようですね。(ext4が既にリリースされている事を知っている人自体私の周りでもあまりいませんでした。)かくいう私も一度だけ話題作りの検証をしてみただけです。検証したのが結構前で情報も乏しかったので今回はとりあえずext4の特徴について纏めてみたいと思います。初めにですが、ext4は今も開発中ですので機能リストは常に流動的です。watchしておいて下さい。今回は現時点の最新stable版2.6.28を中心に特徴を纏めます。16TB越ファイルシステムの利用(e2fsprogsではまだ未サポート)1EB(100万TB)まで利用可能らしい、誰が使うんでしょうかと言いたくなる数字です。大規模なディスクアレイを組むシステムには(将来的にも)有用かも知れませんね。ちなみに現行主流であるext3は最大約8TB(or16TB)です。メタデータのオーバヘッドを減らすエクステントフォーマットext3ではブロックアルゴリズムで4Kbytesなどの単位(ブロック)に分けてディスク領域を管理しています。ブロックアルゴリズムではディスク上の実アドレスを特定する時サイズが小さめであれば直接参照できますが、サイズが大きくなると間接ブロックなるものを使用して間接参照しなければいけません。間接ブロックは使用するブロック数を減らせるのでそういう意味では非常に有難いのですが、直接参照と比べるとデータブロックへのアクセス回数も増えますのでパフォーマンスが低下します。多段になっていきますのでよりパフォーマンスが悪化します。そこで、ext4では「エクステント」方式を採用しています。エクステントとは、連続したブロック領域には一つのアドレス(開始アドレス)だけをサイズ、オフセットなどと一緒に論理セットとして渡してあげアドレッシングを効率化する方式です。ファイルサイズの大きいファイルの削除時などはこれによって削除時間が短縮できます。その他にもfsckの時間が短くなるといった利点もあります。(複数ブロックアロケーション)ext3では連続データを書き込む時に都度空きブロックを探して割り当てていました。ext4ではブロックアロケーター自身が書込みデータ量に応じて必要となる合計ブロック数を認識し、単一コールで複数ブロックを一気に割り当てる事が可能になりました。これにより、ブロックアロケートによるオーバヘッドを緩和する事が出来ます。サブディレクトリ数制限の撤廃ext3では32000までとサブディレクトリの制限がありましたが、ext4では撤廃されました。単位のタイムスタンプext3やたいていファイルシステムでは秒単位のタイムスタンプですが、ext4ではナノ秒単位まで拡張します。(NFSv4、Lustre)これらのファイルシステムで利用される64bitのバージョン番号が導入されました。時間の削減ファイルシステム作成時に全てのグループを初期化しないので、ファイルシステム作成時間が短くなります。未初期化(未使用)部分はfsck時にスキップされるので、fsckの時間も短縮されます。頑健さと性能を向上させるジャーナルチェックサム機能ジャーナルデータにチェックサム機構を取り入れました。これにより信頼性とパフォーマンスが向上します。永続的事前割り当て(ストリーミングメディアやデータベース向け)実際の動作前に、予めアプリケーションが使用予定の領域を確保する場合、ほとんどのファイルシステムは確保済みだが未使用の領域には0を書き込みます。ext4はこの方法を使わず一括してディスク割当てが行われるので、フラグメンテーションを抑えられる。一部のデータベースやストリーミングではパフォーマンスが向上する。巨大ファイルのサポートext3では2TBであった最大ファイルサイズが、ext4では16TBになりました。遅延割当てext3では、データがバッファに書き込まれる際にディスク空間(ブロック)の割当てが行われていました。これに対してext4ではバッファからディスクに書き込まれる際に割当てが行われるようになったので、ディスク上でより連続した領域への保存が出来ます。短期間やテンポラリなファイルは物理ディスク空間が割り当てられる前に消去される可能性もあるので、パフォーマンスも向上します。この他にもflex_bgといった機能や将来的にはオンラインデフラグツールなんかもあるよとのことです。sourceを読んで見てください。Cesati商品詳細を見るメモリ管理とプロセス・スケジューリングの項が増補されている。プロセス管理、ファイルシステム、メモリ管理、割り込みハンドラ、同期などソースを交えて説明があるので結構分かりやすい。Linuxちょっとした事情でBIG-IPで管理していたSSLの証明書をWEBサーバに直接入れる事になりました。ちなみに証明書はベリサインで署名済みのCSRです。BIG-IPで証明書と秘密鍵をエクスポートします。この時中間証明書も忘れない事に注意。後はWEBサーバに持ってきてApacheで設定するだけ。hostを使いました。最近はSNIやワイルドカード証明書、subjectAltNameを使用すればいけます。機会がありましたらこちらは纏めてみたいと思います。今回はApacheの2.0系を使用しましたので、SSLの設定はssl.confで行います。ssl.confはデフォルトの設定のままでも動きますので、設定するパラメータはこれくらい。(中間証明書)あとはerrorlogやtransferlogなどお好みで設定してください。ちなみに一度設定した後にApacheの再起動をかけたら起動しませんでした。起動時のログに以下の文言が。/xxx/xxx/xxx/xxxどうやら証明書が壊れていて読み込めなかったようで、もう一度BIG-IPから引っ張ってきて入れ直したら動きました。あとはブラウザでアクセスして証明書をチェックして終了です。CowboyフリーランスのLinuxエンジニア(仕事募集中@20代後半)生業として主にインフラ系(サーバ、ネットワーク、ストレージとなんでも)設計、構築、運用を行ってます。技術書の執筆などなど仕事があれば何でもこなします。問いませんのでご興味のある方はご相談下さい。記事にご質問、ご興味のある方はご連絡頂ければ可能な限り回答致します。