正在缓存什么?

正在缓存什么?

我有一个内存量较低的嵌入式系统。系统存在分配问题。可能是由于碎片:NOMMU 上的内存分配问题? 该平台是 NOMMU 平台,因此我怀疑 linux 缓存是造成此碎片的原因。也许是,也许不是。问题是,我无法真正看到我的系统会从缓存中获得什么。该系统由以下分区构建:

  1. 内存分区。 (内核、用户空间fs等)
  2. SPI Flash。(一些配置数据。可能有几kb。)
  3. SD卡。 (记录的数据。永远不会被读取。)

这是我的 top 命令的输出:

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 flash。但这没有什么区别。

答案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 缓存的博客文章。也许这可能对你有帮助。

相关内容