radix_tree_nodeのキャッシュサイズを減らすには?

radix_tree_nodeのキャッシュサイズを減らすには?

radix_tree_nodeキャッシュ全体のサイズを減らすことなく、Linuxでキャッシュに使用されるスペースを減らすことは可能ですか?

たとえば、私は現在

$ sudo slabtop -sc --once | awk '{ if (0 + $1  > 0) { printf "%20s: % 6d MB, active %3.0f%%\n", $8, $7 / 1024, (100*$2/$1); } }'
    ext4_inode_cache:  10387 MB, active 100%
              dentry:   2042 MB, active 100%
     radix_tree_node:    263 MB, active  90%
         buffer_head:    117 MB, active 100%
      kmalloc-rcl-64:     92 MB, active 100%
      kmalloc-rcl-96:     79 MB, active 100%
   dmaengine-unmap-2:     43 MB, active 100%
      vm_area_struct:     18 MB, active  99%
         task_struct:     13 MB, active  98%
  ext4_extent_status:     12 MB, active 100%
   ext4_groupinfo_4k:     10 MB, active 100%
         inode_cache:     10 MB, active  90%
          kmalloc-4k:      7 MB, active  99%
     kmalloc-rcl-128:      7 MB, active 100%
   kernfs_node_cache:      5 MB, active 100%
    proc_inode_cache:      5 MB, active  99%

したがって、他のすべてのキャッシュに少なくとも98%アクティブですが、radix_tree_node90%のみアクティブです。システムは多くのメモリを無駄にしませんが、radix_tree_node非アクティブキャッシュを削除するためにサイズを縮小すると、キャッシュ全体の使用量が増加するようです。slabtop -scを実行しましたが、それは間違った会計だと思いますUSE 0%radix_tree_node

たとえば、キャッシュはわずか20%で、/proc/sys/vm/vfs_cache_pressureどちらもアクティブな状態が100%であるため、削減する必要があるようです。私のワークロードの場合、システムは多数のディレクトリエントリを計算する必要があります。dentryext4_inode_cache

ベストアンサー1

実験の後は、Linuxカーネルバージョン5.4以降を実行し、必要に応じて調整する必要があると言いたいと思います/proc/sys/vm/vfs_cache_pressure。システムが遅くならない可能な最小値を使用しようとしています。私の経験ではvfs_cache_pressure、カーネルバージョン5.3では1〜10の範囲の値がうまく機能しますが、カーネルバージョン5.4では同様の動作を得るには100に近い値が必要です。

値が低いほど、vfs_cache_pressureより多くのディレクトリメタデータをRAMに保持できるため、プロセスがファイルにアクセスするときに記憶媒体はファイルの実際の内容を取得するだけです。これは、ランダムアクセス速度が遅いHDDの場合に特に重要です。ストレージメディアの場合、システムは複数のレベルのディレクトリを読み取る必要があり、各ディレクトリが物理ストレージメディアの異なる領域にあるため、ディープディレクトリ層のメタデータを取得することはランダムなデータアクセスとして見えます。

ただし、あまりにも小さくすると、vfs_cache_pressureシステムがキャッシュからディレクトリメタデータを削除するのではなくスワップを開始でき、パフォーマンスが低下する可能性があります。私はこれがカーネルバージョン5.3と5.4の最も重要な違いだと思います。バージョン5.3では、システムがRAMに残るようにスワップを開始しないようにvfs_cache_pressure常に設定できます。カーネルバージョン5.4を使用しているシステムでは、次のことを知っていると交換が楽しくなります。1dentries100

/proc/sys/vm/vfs_cache_pressureとの様々な組み合わせをベンチマークしてみるべきだと思います/proc/sys/vm/swappiness。現在 vfs_cache_pressure120とswappiness80を実行していますが、バックグラウンドプロセスがシステム内の多くのディレクトリをチェックするときに時折遅くなることがあります(たとえば、バックアップスクリプトがシステム上の新しいファイルをチェックする場合など)。私の考えでは、システムがキャッシュにRAMを使用する現在の方法はあまりにもdentries積極的であり、より多くのメモリを要求するプログラムは、要求を処理する前に他のキャッシュを削除してRAMを解放する必要があるときに遅くなります。

おすすめ記事