MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
設定 - キャッシュのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
設定 - キャッシュ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Linuxにおけるキャッシュは、ディスクI/Oの遅延を隠蔽してシステム全体の応答性を高める仕組みである。<br> <br> ファイルの内容を保持するページキャッシュ (page cache) が中心的な役割を果たす。<br> <br> パス名解決を高速化するdentryキャッシュとファイルの属性情報を保持するinodeキャッシュが仮想ファイルシステム (VFS) の処理を支える。<br> カーネル内部のオブジェクト割り当てを効率化するSlabアロケータ (現行標準はSLUB) がdentryやinode等の部品を管理する。<br> <br> キャッシュ量の確認には、<code>free</code> コマンドによる概要把握が有効である。<br> <u>/proc/meminfo</u> の項目を読むことにより、ページキャッシュやSlabの内訳を詳細に把握できる。<br> <code>slabtop</code> コマンドを使用すると、どのSlabキャッシュがメモリを消費しているか特定できる。<br> <br> キャッシュの削除には、<code>sync</code> コマンド と <u>/proc/sys/vm/drop_caches</u> への書き込みを組み合わせる。<br> <code>echo 1</code> はページキャッシュ、<code>echo 2</code> はdentryとinode等の回収可能なSlab、<code>echo 3</code> はその両方を解放する。<br> <br> 削除操作は非破壊的であり、dirty状態のオブジェクトは解放しない。<br> <u>カーネルの公式文書では、テスト環境やデバッグ環境以外での使用は推奨しないと明記されている。</u><br> <br> 動作の調整には、<code>vm.swappiness</code> や <code>vm.vfs_cache_pressure</code> 等のvmパラメータを使用する。<br> 書き戻しの挙動は、<code>vm.dirty_ratio</code> や <code>vm.dirty_background_ratio</code> 等で制御する。<br> <br> メモリが少ない環境では、圧縮技術であるzramとzswapが有効な選択肢となる。<br> zramはRAM上の圧縮ブロックデバイスであり、zswapは既存のswapデバイスの前段に置く圧縮キャッシュである。<br> <br> カーネル6.1以降では、新しいページ回収実装であるMGLRU (multi-gen LRU) が利用できる。<br> MGLRUは世代管理により走査コストを削減し、単発の大規模読み込みによるキャッシュ汚染に強い。<br> <br> アプリケーションレベルでは、<u>fsync</u> や <u>fdatasync</u> や <u>O_DIRECT</u> が永続化とキャッシュ挙動を決める。<br> <br><br> == キャッシュの種類と仕組み == LinuxのファイルI/Oは、仮想ファイルシステム (VFS) とページキャッシュを中心に構成される。<br> <br> 読み込みはキャッシュ探索が先行し、書き込みはライトバック方式で非同期にディスクへ反映される。<br> メモリが逼迫すると、カーネルはキャッシュを自動的に縮小してメモリを確保する。<br> <br> ==== ページキャッシュ ==== ページキャッシュは、ファイルデータをRAM上にページ単位 (通常は4KiB) で保持する仕組みである。<br> <br> <code>read()</code> はキャッシュにヒットすればメモリから即時に返し、ミスした場合は先読み (readahead) を伴いブロック層から読み込む。<br> <code>write()</code> はページキャッシュへ複写してDirtyページとして印を付け、後でフラッシャスレッドが書き戻す。<br> <br> <code>mmap()</code> によるメモリマップドI/Oもページキャッシュを経由する。<br> <code>fsync</code> が実行されるまで、書き込み内容の永続化は保証されない。<br> <br> 下図に、ページキャッシュの位置づけを示す。<br> <br> [[ファイル:Linux Cache Page Cache Overview.png|フレームなし|中央|700px]] <br> ==== dentryキャッシュとinodeキャッシュ ==== dentryキャッシュは、パス名からinodeへの解決結果を保持する仕組みである。<br> 存在しないパスに対する問い合わせ結果も保持し、これをネガティブデントリと呼ぶ。<br> <br> inodeキャッシュは、ファイルの属性情報 (モード、UIDとGID、サイズ、時刻、ブロック位置) を保持する。<br> <br> VFSのdentryオブジェクトとinodeオブジェクトとfileオブジェクトが連携して動作する。<br> <br> inodeごとのaddress_spaceが、inodeとページキャッシュ (xarrayとradix treeによる管理) を結び付ける。<br> dentryとinodeの回収積極度は、<code>vm.vfs_cache_pressure</code> で調整する。<br> <br> ==== Slabアロケータ ==== Slabアロケータは、同一サイズのカーネルオブジェクトをページ群 (slab) ごとに事前確保する層である。<br> 確保と解放のオーバーヘッドを削減し、断片化を抑える目的で使用する。<br> <br> Buddyアロケータ (ページ単位) の上位に位置し、<code>kmalloc</code> の基盤となる。<br> <br> 実装の種類は以下の通りである。<br> <br> * SLUB *: カーネル2.6.23以降の既定であり、現行の標準実装である。 * SLAB *: 古典的な実装であり、非推奨化が進んでいる。 * SLOB *: 組み込み向けの実装であり、削除済みである。 <br> 主要なSlabキャッシュの例を以下に示す。<br> <br> * <code>dentry</code> *: ディレクトリエントリのキャッシュである。 * <code>inode_cache</code> *: inodeオブジェクトのキャッシュである。 * <code>buffer_head</code> *: ページキャッシュ内のページを指す記述子である。 * <code>kmalloc-*</code> *: 汎用カーネルメモリ割り当てのサイズ別キャッシュである。 * <code>skbuff_head_cache</code> *: ネットワーク用ソケットバッファのキャッシュである。 <br> 統計情報は <u>/proc/slabinfo</u> で確認できる。<br> <code>/proc/meminfo</code> のSlabとSReclaimable (回収可能) とSUnreclaim (回収不可) が対応する。<br> <br> 旧来のバッファキャッシュは、カーネル2.4以降でページキャッシュに統合された。<br> 統合後は <code>buffer_head</code> が記述子として残り、<code>free</code> のbuffとcache表示は合算で扱う。<br> <br><br> == キャッシュ量の確認 == キャッシュの状態確認では、概要から詳細へ段階的に掘り下げる方法が有効である。<br> <br> 最初に <code>free</code> コマンドで全体像を見て、次に <u>/proc/meminfo</u> で内訳を見て、最後に <code>slabtop</code> コマンドでSlab内訳を見る。<br> <br> ==== free コマンド ==== <code>free</code> コマンドは、<u>/proc/meminfo</u> を整形して表示するコマンドである。<br> <br> 基本的な実行例を以下に示す。<br> <br> free -h free -w free -s 5 free -t <br> 各オプションの意味は以下の通りである。<br> <br> * <code>free -h</code> *: 読みやすい単位で表示する。 * <code>free -w</code> *: buffersとcacheを分離して表示する。 * <code>free -s N</code> *: N秒間隔で定期表示する。 * <code>free -t</code> *: swap行を追加表示する。 <br> 下表に、出力列の意味を示す。<br> <br> <center> {| class="wikitable" |+ freeコマンド出力の列と意味 ! 列名 !! 意味 |- | total || MemTotalとSwapTotalの合計値 |- | used || totalからfreeとbuffersとcacheを引いた値 |- | free || 完全未使用のメモリ (MemFreeとSwapFree) |- | shared || 共有メモリ (Shmem、主にtmpfs) |- | buff/cache || BuffersとCachedとSReclaimableの合計値 |- | available || swapなしで新規アプリが確保可能な見積り (MemAvailable、カーネル3.14以降) |} </center> <br> 判断では、freeの値ではなくavailableの値を見ることが重要である。<br> これは、freeが少なくてもbuffとcacheが大きければ健全な状態であり、空きメモリは無駄という設計思想に基づく。<br> <br> <u>availableの枯渇とswap使用率の上昇が同時に起きた場合は、危険信号として扱う。</u><br> <br> ==== /proc/meminfo ==== <u>/proc/meminfo</u> は、メモリ関連の統計を直接確認できる仮想ファイルである。<br> <br> 確認例を以下に示す。<br> <br> cat /proc/meminfo grep -E "MemTotal|MemFree|MemAvailable|Buffers|^Cached|Slab|SReclaimable|SUnreclaim|Dirty|Writeback" /proc/meminfo <br> 下表に、主要項目の意味を示す。<br> <br> <center> {| class="wikitable" |+ /proc/meminfoの主要項目 ! 項目名 !! 意味 |- | MemTotal || 利用可能な物理RAM総量 (カーネル予約分を除く) |- | MemFree || 完全未使用の物理メモリ |- | MemAvailable || swapなしで新規アプリが確保可能な見積り |- | Buffers || ブロックデバイス用バッファ (rawブロックI/Oや属性情報用) |- | Cached || ページキャッシュ |- | SwapCached || RAMとswapの両方に存在するメモリ |- | ActiveとInactive || 最近使用したページと最近使用していないページ (anonとfileに細分) |- | Dirty || 書き戻し待ちのページ |- | Writeback || 書き戻し中のページ |- | AnonPages || 匿名ページ |- | Mapped || マップ済みファイル |- | Shmem || 共有メモリ (tmpfs等) |- | Slab || Slab全体の使用量 |- | SReclaimable || 回収可能なSlab (dentryやinode等) |- | SUnreclaim || 回収不可のSlab |- | KernelStack || カーネルスタックの使用量 |- | PageTables || ページテーブルの使用量 |- | SwapTotalとSwapFree || swap総量と空き量 |- | CommitLimitとCommitted_AS || オーバーコミットの上限と割り当て済み量 |} </center> <br> ==== slabtop ==== <code>slabtop</code> コマンドは、Slabキャッシュの使用状況を対話的に表示するコマンドである。<br> procps-ngパッケージに含まれており、実行にはroot権限が必要である。<br> <br> 実行例を以下に示す。<br> <br> sudo slabtop sudo slabtop -o -s c sudo slabtop -o -b -s c <br> 下表に、各オプションの意味を示す。<br> <br> <center> {| class="wikitable" |+ slabtop の主なオプション ! オプション !! 意味 |- | <code>-o</code> || 1回だけ出力して終了する。 |- | <code>-b</code> || 太字等の制御文字を使わない出力にする。 |- | <code>-s c</code> || キャッシュサイズ順に整列する。 |- | <code>-s a</code> || 使用中オブジェクト数順に整列する。 |- | <code>-d N</code> || N秒間隔で更新する。 |- | <code>-n N</code> || N回だけ更新して終了する。 |} </center> <br> 出力列の意味は、以下の通りである。<br> <br> <center> {| class="wikitable" |+ slabtop の出力列 ! 列名 !! 意味 |- | OBJS || 総オブジェクト数 |- | ACTIVE || 使用中のオブジェクト数 |- | USE% || 利用率 |- | SLABS || slab数 |- | OBJS/SLAB || slab当たりのオブジェクト数 |- | OBJ SIZE || オブジェクト単体のサイズ |- | CACHE SIZE || キャッシュ全体のサイズ |} </center> <br> 診断の目安として、dentryのACTIVEが単調に増加する場合はSlabリークの疑いがある。<br> また、<u>USE%</u> が低く、<u>CACHE SIZE</u> が大きい場合は、回収可能なのに滞留していると判断できる。<br> <br><br> == キャッシュの削除 == キャッシュの削除には、<code>sync</code> コマンド と <u>/proc/sys/vm/drop_caches</u> ファイルへの書き込みを組み合わせる。<br> <br> 既存の手順として、以下のコマンドが使用されている。<br> <br> # ページキャッシュのみクリア sync; echo 1 > /proc/sys/vm/drop_caches # dentryとinodesのクリア sync; echo 2 > /proc/sys/vm/drop_caches # ページキャッシュとdentry、inodesのクリア sync; echo 3 > /proc/sys/vm/drop_caches <br> <code>sync</code> コマンドは、メモリキャッシュの内容をディスクへ流し込むコマンドである。<br> <code>echo</code> コマンドで、<u>/proc/sys/vm/drop_caches</u> ファイルに <code>1〜3</code> の数値を書き込んでいる。<br> <br> この数値を <u>/proc/sys/vm/drop_caches</u> ファイルに直接書き込むことにより、ソフトウェアやサービスを停止せずにメモリキャッシュをクリアすることができる。<br> 数値の <code>3</code> は、ページキャッシュ・dentry・iノードの全てを削除するが、Linuxでどのようなサービスがそれらを使用しているのかが明確に分かるまでは使用しない方がよい。<br> <br> 下図に、drop_caches操作の対象を示す。<br> <br> [[ファイル:Linux Cache drop caches Targets.png|フレームなし|中央|700px]] <br> ==== 正式仕様 ==== カーネルの公式文書では、このファイルへの書き込みはクリーンなキャッシュと回収可能なSlabオブジェクトを破棄する操作と定義されている。<br> 操作は非破壊的であり、dirty状態のオブジェクトは解放しない。<br> <br> 解放数を増やすには、事前に <code>sync</code> を実行してdirtyを減らす必要がある。<br> <br> 各数値の意味は、以下の通りである。<br> <br> * <code>echo 1</code> *: ページキャッシュを解放する。 * <code>echo 2</code> *: dentryとinode等の回収可能なSlabを解放する。 * <code>echo 3</code> *: ページキャッシュと回収可能なSlabの両方を解放する。 * <code>echo 4</code> *: カーネルログへの情報メッセージ出力を無効化する。 <br> <code>sysctl</code> 経由でも同じ操作が可能であり、実行にはroot権限またはCAP_SYS_ADMINが必要である。<br> <br> 確認手順の例を以下に示す。<br> <br> sync; echo 3 > /proc/sys/vm/drop_caches free -h sudo slabtop -o -s c dmesg | tail <br> ==== 注意事項 ==== この仕組みは、キャッシュの成長を制御する手段ではない。<br> <br> キャッシュは他の用途でメモリが必要になれば自動的に回収される。<br> 削除したオブジェクトの再作成には大量のI/OとCPUを要するため、性能問題を引き起こす可能性がある。<br> <br> 公式文書では、テスト環境とデバッグ環境以外での使用は推奨しないと明記されている。<br> <br> カーネルログに <code>cat (1234): drop_caches: 3</code> のような情報メッセージが出ることがあるが、異常ではない。<br> <br> 安全な用途は、ベンチマーク前のコールド測定とメモリリーク切り分け時に限る。<br> <br> <u>本番環境でのCronによる定期実行は禁止であり、キャッシュヒット率低下により遅延が増大する。</u><br> <br><br> == 主要なvmパラメータ == vmパラメータは、<u>/proc/sys/vm/</u> 以下と <code>sysctl</code> コマンドで確認と設定を行う。<br> <br> 現在の設定値の確認例を以下に示す。<br> <br> sysctl -a --pattern "vm.swappiness|vm.vfs_cache_pressure|vm.dirty_|vm.min_free_kbytes" cat /proc/sys/vm/swappiness cat /proc/sys/vm/vfs_cache_pressure <br> 下表に、主要パラメータの一覧を示す。<br> <br> <center> {| class="wikitable" |+ 主要なvmパラメータ ! パラメータ名 !! 既定値 !! 意味 !! 調整指針 |- | <code>vm.swappiness</code> || 60<br>(範囲は0から200、カーネル5.8以降) || 匿名ページとページキャッシュのどちらを回収するかの重み (100で均等) || サーバやDBでは1から10に下げる例が多い。<br>zramとzswap環境では100超 (例として133) も有効である。 |- | <code>vm.vfs_cache_pressure</code> || 100 || dentryとinode回収の積極度<br>(100で公平、低値で保持、高値で積極) || 小ファイル大量サーバでは下げ方向 (例と: 50)<br>dentry肥大時は上げ方向 (例として200から500)<br>1000超はロック競合で逆効果である。 |- | <code>vm.dirty_ratio</code> || 20 || dirtyページが全メモリ比でこの割合に達すると、<br>書き込みプロセス自身が同期書き戻しを開始する。 || DB等では低め (10から15) にして、I/Oスパイクを回避する。 |- | <code>vm.dirty_background_ratio</code> || 10 || dirtyページがこの割合に達すると、<br>バックグラウンドのフラッシャが非同期書き戻しを開始する。 || dirty_ratioより必ず低くする。<br>例: 5に下げて早期フラッシュする。 |- | <code>vm.dirty_bytes</code>と<code>vm.dirty_background_bytes</code> || 0<br>(未設定時はratio側が有効) || 上記のバイト数指定版であり、片方だけが有効になる。 || 大容量RAMで割合指定が粗い場合に使用する。<br>(例: dirty_bytes=1G) |- | <code>vm.dirty_expire_centisecs</code> || 3000 (30秒) || dirtyデータが書き戻し対象になるまでの経過時間 (100分の1秒単位) || 長くするとバッチ化で効率化するが停電時損失が増える。<br>短くすると頻繁なI/Oになる。 |- | <code>vm.dirty_writeback_centisecs</code> || 500 (5秒) || フラッシャスレッドの起床間隔 || 0で定期書き戻し無効となるが非推奨である。 |- | <code>vm.min_free_kbytes</code> || 可変 (起動時にRAM比で自動算出) || 各ゾーンの最低空き確保量であり、<br>direct reclaimとOOMの境界となる || 高速ネットワークやdirect reclaim多発時は増やす。<br>RAMの1から2パーセントが目安であり、上げすぎは即OOMとなる。 |} </center> <br> 前提として、<code>vm.dirty_background_ratio</code> は <code>vm.dirty_ratio</code> より必ず低く設定する。<br> 前者は非同期書き戻しの開始点であり、後者はアプリが停止して同期書き戻しを行う開始点である。<br> <br> <code>watermark_scale_factor</code> (既定値は10であり、0.1パーセントに相当) がkswapdの起動点 (watermark) を決め、<code>vm.min_free_kbytes</code> と連動する。<br> <br> 設定例を以下に示す。<br> <br> # DBサーバ向けの書き戻し抑制の例 sysctl -w vm.dirty_background_ratio=5 sysctl -w vm.dirty_ratio=10 # 小ファイル大量サーバ向けのdentry保持の例 sysctl -w vm.vfs_cache_pressure=50 # dentry肥大時の積極回収の例 sysctl -w vm.vfs_cache_pressure=200 # 設定の永続化の例 echo "vm.dirty_background_ratio=5" > /etc/sysctl.d/99-cache.conf echo "vm.dirty_ratio=10" >> /etc/sysctl.d/99-cache.conf sysctl --system <br> 設定の確認例を以下に示す。<br> <br> sysctl vm.dirty_ratio vm.dirty_background_ratio vm.vfs_cache_pressure vm.swappiness <br><br> == zram と zswap == メモリが少ない環境では、圧縮により実効メモリを増やすzramとzswapが有効である。<br> <br> 下表に、両者の比較を示す。<br> <br> <center> {| class="wikitable" |+ zram と zswap の比較 ! 項目 !! zram !! zswap |- | 実体 || RAM上の圧縮ブロックデバイス (<code>/dev/zramN</code>) || 既存の実swapデバイスの前段にある圧縮キャッシュ |- | 実swapの要否 || 不要であり、独立したswapデバイスとして動作する。 || 必須であり、溢れたページは実ディスクswapへ書き戻す。 |- | 用途 || swap用途と高速ディスク用途 (例: <u>/tmp</u>) の両方に使用できる。 || swap-outページをRAM内で圧縮保持する用途に限定される。 |- | 追加機能 || CONFIG_ZRAM_WRITEBACKにより待機ページをbackingデバイスへ逃がせる。 || 既存のswap運用を変えずに導入できる。 |- | 統計と操作 || <u>/sys/block/zram0/mm_stat</u> と <code>zramctl</code> で確認する。 || 通常のswap統計と合わせて確認する。 |} </center> <br> 圧縮アルゴリズムには、lzoとlzo-rleとlz4とzstd等がある。<br> 使用可能な方式は、<u>/sys/block/zram0/comp_algorithm</u> で確認する。<br> <br> 各ディストリビューションの採用状況は以下の通りである。<br> <br> * RHEL *: 従来のディスクswap基準であり、クラウド環境やK8s環境ではswap無効や低swappiness運用が多い。 * Fedora *: バージョン33以降で既定のSwapOnZRAM (systemd-zram-generator) を採用する。 *: RAM等倍 (zram-fraction=1.0、上限8[GB]) でpriorityは100である。 * openSUSE / SLE *: 既定ではzram swapなしであり、<u>systemd-zram-service</u> や <u>zram-generator</u> で手動有効化する。 *: SLE Micro 6.1で関連文書が整備された。 * Raspberry Pi OS *: 小メモリ機でのzramとzswap有効化が定番の調整である。 <br> 確認コマンドの例を以下に示す。<br> <br> zramctl swapon --show cat /sys/block/zram0/comp_algorithm cat /sys/block/zram0/mm_stat <br> zramとzswapの導入時は、<code>vm.swappiness</code> の見直しを合わせて行う。<br> <br><br> == MGLRU == MGLRU (multi-gen LRU) は、カーネル6.1で統合された新しいページ回収実装である。<br> 従来のactiveとinactiveによるLRUに代わり、ページを最終アクセス時刻ごとに世代 (generation、通常は4世代) に分けて管理する。<br> <br> 古い世代から回収することで、アクセスビット走査のコストを削減する。<br> 単発の大規模読み込み (例としてddやtar) によるキャッシュ汚染に強く、kswapdのCPU使用量を削減できる。<br> <br> 各ディストリビューションで既定の有効化が進んでいる。<br> <br> 有効状態の確認例を以下に示す。<br> <br> cat /sys/kernel/mm/lru_gen/enabled cat /sys/kernel/mm/lru_gen/min_ttl_ms <br> 有効化の操作例を以下に示す。<br> <br> # 全有効化の例 (0x0007は全有効を意味する) echo y > /sys/kernel/mm/lru_gen/enabled # 無効化の例 echo 0 > /sys/kernel/mm/lru_gen/enabled <br> <code>min_ttl_ms</code> は、Nミリ秒以内のワーキングセットを追い出さない保護時間である。<br> スラッシング防止が目的であり、既定値は0である。<br> <u>1000</u> に設定すると体感改善が見込め、<u>3000</u> に設定するとさらに低減するがOOMが早まる側面がある。<br> <br> 設定例を以下に示す。<br> <br> echo 1000 > /sys/kernel/mm/lru_gen/min_ttl_ms cat /sys/kernel/mm/lru_gen/min_ttl_ms <br><br> == ディスクキャッシュとI/O同期 == 書き込みの階層は、アプリからページキャッシュ (dirty) を経てファイルシステムとブロック層を通り、ディスク内蔵の揮発性ライトキャッシュを経て不揮発メディアに至る。<br> <code>write()</code> の完了は、永続化の完了を意味しない。<br> <br> 下表に、各同期手段の比較を示す。<br> <br> <center> {| class="wikitable" |+ 同期手段の比較 ! 手段 !! 意味 !! 用途と注意点 |- | <code>fsync(fd)</code> || データと属性情報を不揮発領域へ同期し、ディスクキャッシュもフラッシュする。 || 新規ファイル作成後は親ディレクトリのfdへのfsyncも必要である。 |- | <code>fdatasync(fd)</code> || データに不要な属性情報 (atime等) を省く軽量版 || 永続化が必要なアプリではこちらを優先する。 |- | <code>O_DIRECT</code> || ページキャッシュを迂回する直接I/O || 自前キャッシュを持つDB向けであり、<br>配置制約があるディスク内蔵キャッシュは迂回しないため永続化にはfdatasync併用が必要である。 |- | <code>O_SYNC</code>と<code>O_DSYNC</code> || writeとfsync、writeとfdatasyncと等価の同期書き込みフラグ || 書き込みごとに同期するため性能低下と引き換えに耐久性が上がる。 |} </center> <br> ディスク内蔵キャッシュは、停電で内容が消失する揮発性メモリである。<br> <br> 無効化の選択肢として、<code>hdparm -W 0</code> コマンドによる書き込みキャッシュ無効化がある。<br> 永続化が必要なアプリでは、<code>fdatasync</code> と ディレクトリへの <code>fsync</code> を組み合わせる。<br> <br> 操作例を以下に示す。<br> <br> # ディスクの書き込みキャッシュ状態の確認例 sudo hdparm -W /dev/sda # ディスクの書き込みキャッシュ無効化の例 sudo hdparm -W 0 /dev/sda <br><br> == 運用のポイント == 本番環境では、<u>drop_caches</u> を定期実行しないことが原則である。<br> キャッシュは自動回収されるため、監視ではavailableとPSI (<u>/proc/pressure/memory</u>) を使用する。<br> <br> Slab肥大の切り分けでは、<code>slabtop -o -s c</code> コマンドで内訳を確認する。<br> 根本対策として、<code>vfs_cache_pressure</code> の調整と一時ファイル運用の見直しを行う。<br> <br> DBサーバでは、<code>vm.dirty_background_ratio=5</code> と <code>vm.dirty_ratio=10</code> 等でライトスパイクを抑制する。<br> zramとzswapの導入時は、<code>vm.swappiness</code> の見直しを合わせて行う。<br> <br> 永続化が必要なアプリでは、<u>fdatasync</u> と ディレクトリへの <code>fsync</code> を組み合わせる。<br> <br> 確認コマンドの例を以下に示す。<br> <br> free -h cat /proc/pressure/memory sudo slabtop -o -s c <br><br> == 関連情報 == * [https://docs.kernel.org/mm/page_cache.html カーネル公式文書 - ページキャッシュ] *: ページキャッシュとdentryとinodeの仕組みに関する説明である。 * [https://docs.kernel.org/admin-guide/sysctl/vm.html カーネル公式文書 - vmパラメータとdrop_caches] *: drop_cachesの正式仕様とvmパラメータの既定値に関する説明である。 * [https://docs.kernel.org/admin-guide/blockdev/zram.html カーネル公式文書 - zram] *: zramの仕組みと統計情報に関する説明である。 * [https://docs.kernel.org/admin-guide/mm/multigen_lru.html カーネル公式文書 - MGLRU] *: MGLRUの有効化とmin_ttl_msに関する説明である。 * [https://man7.org/linux/man-pages/man1/free.1.html manページ - free] *: freeコマンドの列定義に関する説明である。 * [https://man7.org/linux/man-pages/man5/proc_meminfo.5.html manページ - proc_meminfo] *: meminfo各項目の定義に関する説明である。 * [https://man7.org/linux/man-pages/man1/slabtop.1.html manページ - slabtop] *: slabtopの列とオプションに関する説明である。 * [https://man7.org/linux/man-pages/man2/fsync.2.html manページ - fsync] *: fsyncとfdatasyncとO_DIRECTに関する説明である。 <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - Linuxにおけるキャッシュ (ページキャッシュ・確認・削除・vmパラメータ・zramとzswap・MGLRU) に関する技術 | This page is {{PAGENAME}} in MochiuWiki - technical documentation about cache management in Linux (page cache, drop_caches, vm parameters, zram, and MGLRU) |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
設定 - キャッシュ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse