私はメモリ量の少ない組み込みシステムを持っています。システムに割り当ての問題があります。おそらく断片化が原因です: NOMMUでのメモリ割り当ての問題? プラットフォームはNOMMUプラットフォームであるため、Linuxキャッシュがこの断片化の原因であると思われます。多分そうです、多分そうではありません。問題は、私のシステムがキャッシングから何を得るのか本当にわかりません。システムは、次のパーティションから構築されます。
これが私のトップコマンドからの出力です:
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フラッシュをマウントしようとしました。しかし、それは違いを生みません。
これは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キャッシングについてのブログ投稿はこちら を書きました。おそらくこれはあなたを助けるかもしれません。