무엇이 캐시되고 있나요?

무엇이 캐시되고 있나요?

메모리가 부족한 임베디드 시스템이 있습니다. 시스템에 배포 문제가 있습니다. 아마도 조각화 때문일 것입니다.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

이것은 훌륭한 유틸리티입니다.리눅스 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 캐싱에 대한 블로그 게시물이 있습니다.. 어쩌면 이것이 당신에게 도움이 될 수도 있습니다.

관련 정보