web-dev-qa-db-ja.com

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

私はメモリ量の少ない組み込みシステムを持っています。システムに割り当ての問題があります。おそらく断片化が原因です: NOMMUでのメモリ割り当ての問題? プラットフォームはNOMMUプラットフォームであるため、Linuxキャッシュがこの断片化の原因であると思われます。多分そうです、多分そうではありません。問題は、私のシステムがキャッシングから何を得るのか本当にわかりません。システムは、次のパーティションから構築されます。

  1. RAMパーティション。 (カーネル、ユーザースペース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の問題が原因で断片化の問題が発生する場合を除いて、それは問題ではありません。さて、カーネルがとにかくキャッシュしたいのは何ですか? RAMパーティション?(少しばかげています。)SPIフラッシュ?(いい考えです。でも、そこには数KBしかありません。)SDカード?(それはこの特定のシナリオではキャッシュは必要ありません。)

キャッシュされているものをどのように確認しますか?また、キャッシュスキームを減らすにはどうすればよいですか? (私は本当にそれほど多くのキャッシュを必要としません。利益はありません。)

-osyncを使用してSDカードとSPIフラッシュをマウントしようとしました。しかし、それは違いを生みません。

3
Illishar

これはNiceユーティリティであり、 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またはramfsファイルシステムはキャッシュの一部です。

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キャッシングについてのブログ投稿はこちら を書きました。おそらくこれはあなたを助けるかもしれません。

2
Joe