t0mmy

2020年12月30日に参加

学習履歴詳細

Linuxのしくみ 増量改訂版 8章 記憶階層 読了

ポイント

  • ダーティ状態
  • キャッシュ戦略
    • ライトスルー , ライトバック

学び

  • レジスタの計算速度と、メモリアクセス速度は、数十倍違う
  • 「キャッシュラインに変更があった」ことを、「ダーティである」「ダーティ状態」と表現する
  • Simultaneous Multi Threading (SMT)
  • ページキャッシュでファイルのデータを、バッファキャッシュでファイル以外のデータをキャッシュする

気づき

  • 空間的局所性 の特徴を知っていれば、意図的にパフォーマンスを悪化させることが可能
  • キャッシュ関連情報は、 sar コマンドで大体取得できる
  • パフォーマンスが大幅なに低下した場合、ページキャッシュおよびメモリ I/O のスラッシングが原因の可能性がある
    • sarコマンドでスラッシングの有無を特定できるようになると、トラブルシュートの幅が広がりそう

メモ

キャッシュメモリ

レジスタの計算速度と、メモリアクセス速度は、数十倍違う。
この差を埋めるのが、キャッシュメモリ。

cpuがキャッシュメモリを書き換えた場合、書き換えた情報をメモリにも伝える必要がある。
この時、メモリに情報を伝える方法には、以下の二つが存在する。

  • ライトスルー方式 : 都度メモリに伝える
  • ライトバック方式 : 所定のタイミングで、まとめてメモリに伝える

キャッシュメモリが一杯の時にデータ書き込みが発生する場合、キャッシュライン上のデータを一つ破棄する。
この破棄が頻繁に発生する状態をスラッシングと呼ぶ。スラッシング状態では、I/O性能が大幅に低下する。

階層型キャッシュメモリ

最近のCPU は、キャッシュメモリが階層化されている。
- 「L1キャッシュ」「L2キャッシュ」「L3キャッシュ」のように表現する
「L1キャッシュ」が、最もレジスタに近い。
階層の番号が増えるほど、レジスタから遠のき、大容量/低速 になる。

Simultaneous Multi Threading (SMT)

一つのCPUで複数スレッドを同時実行することで、疑似的な対照型マルチプロセッシング環境を構築できる技術。

待機中(≒空き)のCPUリソースを有効活用する手段の一つ。

同時実行するスレッドにて、リソースの競合が発生しない場合、非常に高い効果を得ることが出来る。

ページキャッシュ

(ストレージデバイスの)ファイルから読み込んだデータを、メモリ上にキャッシュする技術。
ページキャッシュ領域は、カーネルのメモリ上に存在する。
つまり、ページキャッシュは、カーネル上で動作する。

仕組みはキャッシュメモリとほぼ同じ。
ページキャッシュでは、名前の通り、ページ単位でデータを扱う。

ページキャッシュの導入により、ストレージデバイスへの I/O 速度向上が期待できる。

/proc/sys/vm/drop_caches に3 を書き込むことで、ページキャッシュをクリアできる。
ページキャッシュをクリアすることで、「パフォーマンスの悪化の原因はページキャッシュか切り分ける」といった使い方が可能。

バッファキャッシュ

ファイルデータ以外のデータをキャッシュする仕組み。
以下のようなときに使用する。

  • ファイルシステムを使用せずに、デバイスファイルを用いてストレージデバイスに直接アクセスするとき
  • ファイルサイズやパーミッションといった、メタデータにアクセスする時

ページキャッシュにおける ライトバック処理のタイミング

※ライトバック : 変更のあったデータを、一定のタイミングでまとめて書き出す処理

ページキャッシュのライトバック処理は、以下のタイミングで動作する。

  • 周期的。デフォルトでは5sに一回
    • 周期は、 syctlvm.dirty_writeback_centisecs で変更可能
    • 「0」は、ライトバック処理を無効化する設定
  • ダーティページが増えてきたとき
    • 物理メモリの内、ダーティページの占める割合が、特定の値を上回ると動作
    • デフォルトは10%
    • 割合は、vm.dirty_backgroud_ratioパラメータで変更可能
    • 割合ではなく、バイト単位による指定も可能

Dicect I/O

以下のような、ページキャッシュを動作させたくないような場合は、「Direct I/O」という仕組みを使用する。

  • 一度しか読み書きしないデータ
  • プロセスが、自分でページキャッシュ相当の仕組みを実装したい場合

ファイルの Open 時に、 O_Direct フラグを立てることで、「Direct I/O」を使用できる。

統計情報

sar -r コマンドで得られる、キャッシュ回りの統計データについてまとめる。

フィールド名 意味
kbmemfree 空きメモリの量(KiB)ページキャッシュ、バッファキャッシュ、スワップ領域はカウントしない
kbavail 事実上の空きメモリ量(KiB) kbmemfree + kbbuffers + kbcached
kbbuffers バッファキャッシュの量(KiB)
kbcached キャッシュメモリの量(KiB)
kbdirty ダーティなページキャッシュとバッファキャッシュの量(KiB)

sar -B コマンドにて、ページイン、ページアウト情報が取得できる。

swapon --showコマンドにて、スワップ領域の容量などを確認できる。

sar -S コマンドにて、スワップ領域の利用状況を確認できる。
スワップ領域の使用量を示す %swpused の値を注視しよう。

linux

2023年04月23日(日)

1.5時間