何がキャッシュされていますか?

何がキャッシュされていますか?

メモリ不足の組み込みシステムがあります。システムに展開の問題があります。おそらく断片化によるものでしょう。NOMMUのメモリ割り当てに問題がありますか? プラットフォームはNOMMUプラットフォームであるため、Linuxキャッシュがこれらの断片化の原因であると疑われます。そうかもしれないし。問題は、私のシステムがキャッシュから何を得るかを実際に見ることができないということです。システムは次のパーティションで構成されます。

  1. メモリパーティション。 (カーネル、ユーザースペース fs など)
  2. SPIフラッシュ。 (一部の構成データ。おそらく数kb程度です。)
  3. SDカード。 (記録されたデータです。読みないでください。)

これは私のトップコマンドの出力です。

Mem: 23376K used, 5912K free, 0K shrd, 1624K buff, 8404K cached
CPU:  10% usr  42% sys   0% nic   0% idle  47% io   0% irq   0% sirq
Load average: 1.07 1.00 0.96 2/68 4299
...

私のシステムは15Mの利用可能なRAMで起動します。数分以内にスペースの60%以上がキャッシュに使用されました。通常、NOMMU の問題により断片化の問題が発生しない限り、これは重要ではありません。今カーネルがキャッシュしようとしているものは何ですか?メモリパーティション? (ちょっと愚かなことです。)SPIフラッシュ? (いい考えですが、そこには数kbしかありません。)SDカード? (この特別な場合はキャッシュする必要はありません。)

何がキャッシュされているかをどうやって確認できますか?キャッシュシナリオを減らすには? (キャッシュはあまり必要ありません。何の利点もありません。)

-osyncを使ってSDカードとSpiフラッシュをマウントしてみました。しかし、それには違いはありません。

ベストアンサー1

これは素晴らしいユーティリティです。Linux ftools。ファイル名を入力として指定する必要があり、現在キャッシュ内のファイル数を数えます。

# fincore --pages=false --summarize --only-cached <file_name>

fincore [options] files...

  --pages=false      Do not print pages
  --summarize        When comparing multiple files, print a summary report
  --only-cached      Only print stats for files that are actually in cache.

root@xxxxxx:/var/lib/mysql/blogindex# fincore --pages=false --summarize --only-cached * 
stats for CLUSTER_LOG_2010_05_21.MYI: file size=93840384 , total pages=22910 , cached pages=1 , cached size=4096, cached perc=0.004365 
stats for CLUSTER_LOG_2010_05_22.MYI: file size=417792 , total pages=102 , cached pages=1 , cached size=4096, cached perc=0.980392 
stats for CLUSTER_LOG_2010_05_23.MYI: file size=826368 , total pages=201 , cached 
---
total cached size: xxx

しかも一時ファイルシステムまたはメモリファイルシステムファイルシステムはキャッシュの一部です。

で述べたようにtmpfs ドキュメント

Since tmpfs lives completely in the page cache and on swap, all tmpfs
pages currently in memory will show up as cached. It will not show up
as shared or something like that

tmpfs has three mount options for sizing:

size:      The limit of allocated bytes for this tmpfs instance. The 
           default is half of your physical RAM without swap. 

           **If you oversize your tmpfs instances the machine will deadlock
           since the OOM handler will not be able to free that memory.**

nr_blocks: The same as size, but in blocks of PAGE_CACHE_SIZE.
nr_inodes: The maximum number of inodes for this instance. The default
           is half of the number of your physical RAM pages, or (on a
           machine with highmem) the number of lowmem RAM pages,
           whichever is the lower.

tmpfsファイルシステムを制限できます

# mount -t tmpfs -o size=60M tmpfs /tmp -> Size limited to 60M

より良いキャッシュのために/proc/sys/vm/*エントリを調整することもできます。

私は書いたここにLinuxキャッシュのブログ記事があります。。たぶんこれはあなたに役立つかもしれません。

おすすめ記事