Re: drop_caches ...

Markus
2009-03-05T11:55:42Z

Am Donnerstag, 5. März 2009 schrieb Wu Fengguang:
> On Wed, Mar 04, 2009 at 08:47:41PM +0200, Markus wrote:
> > Am Mittwoch, 4. März 2009 schrieb Zdenek Kabelac:
> > > Markus napsal(a):
> > > >>>>>>> The memory mapped pages won't be dropped in this way.
> > > >>>>>>> "cat /proc/meminfo" will show you the number of mapped
pages.
> > > >>>>>> # sync ; echo 3 > /proc/sys/vm/drop_caches ; free -m ;
> > > >>>> cat /proc/meminfo
> > > >>>>>> total used free shared
buffers
> > > >>>>>> cached
> > > >>>>>> Mem: 3950 3262 688 0
0
> > > >>>>>> 359
> > > >>>>>> -/+ buffers/cache: 2902 1047
> > > >>>>>> Swap: 5890 1509 4381
> > > >>>>>> MemTotal: 4045500 kB
> > > >>>>>> MemFree: 705180 kB
> > > >>>>>> Buffers: 508 kB
> > > >>>>>> Cached: 367748 kB
> > > >>>>>> SwapCached: 880744 kB
> > > >>>>>> Active: 1555032 kB
> > > >>>>>> Inactive: 1634868 kB
> > > >>>>>> Active(anon): 1527100 kB
> > > >>>>>> Inactive(anon): 1607328 kB
> > > >>>>>> Active(file): 27932 kB
> > > >>>>>> Inactive(file): 27540 kB
> > > >>>>>> Unevictable: 816 kB
> > > >>>>>> Mlocked: 0 kB
> > > >>>>>> SwapTotal: 6032344 kB
> > > >>>>>> SwapFree: 4486496 kB
> > > >>>>>> Dirty: 0 kB
> > > >>>>>> Writeback: 0 kB
> > > >>>>>> AnonPages: 2378112 kB
> > > >>>>>> Mapped: 52196 kB
> > > >>>>>> Slab: 65640 kB
> > > >>>>>> SReclaimable: 46192 kB
> > > >>>>>> SUnreclaim: 19448 kB
> > > >>>>>> PageTables: 28200 kB
> > > >>>>>> NFS_Unstable: 0 kB
> > > >>>>>> Bounce: 0 kB
> > > >>>>>> WritebackTmp: 0 kB
> > > >>>>>> CommitLimit: 8055092 kB
> > > >>>>>> Committed_AS: 4915636 kB
> > > >>>>>> VmallocTotal: 34359738367 kB
> > > >>>>>> VmallocUsed: 44580 kB
> > > >>>>>> VmallocChunk: 34359677239 kB
> > > >>>>>> DirectMap4k: 3182528 kB
> > > >>>>>> DirectMap2M: 1011712 kB
> > > >>>>>>
> > > >>>>>> The cached reduced to 359 MB (after the dropping).
> > > >>>>>> I dont know where to read the "number of mapped pages".
> > > >>>>>> "Mapped" is about 51 MB.
> > > >>>>> Does your tmpfs store lots of files?
> > > >>>> Dont think so:
> > > >>>>
> > > >>>> # df -h
> > > >>>> Filesystem Size Used Avail Use% Mounted on
> > > >>>> /dev/md6 14G 8.2G 5.6G 60% /
> > > >>>> udev 10M 304K 9.8M 3% /dev
> > > >>>> cachedir 4.0M 100K 4.0M
3% /lib64/splash/cache
> > > >>>> /dev/md4 19G 15G 3.1G 83% /home
> > > >>>> /dev/md3 8.3G 4.5G 3.9G 55% /usr/portage
> > > >>>> shm 2.0G 0 2.0G 0% /dev/shm
> > > >>>> /dev/md1 99M 19M 76M 20% /boot
> > > >>>>
> > > >>>> I dont know what exactly all that memory is used for. It
varies
> > > >>>> from about 300 MB to up to one GB.
> > > >>>> Tell me where to look and I will!
> > > >>> So you don't have lots of mapped pages(Mapped=51M) or tmpfs
files.
> > > > It's strange to me that there are so many undroppable cached
pages(Cached=359M),
> > > > and most of them lie out of the LRU queue(Active+Inactive
file=53M)...
> > > >>> Anyone have better clues on these 'hidden' pages?
> > > >> Maybe try this:
> > > >>
> > > >> cat /proc/`pidof X`/smaps | grep drm | wc -l
> > > >>
> > > >> you will see some growing numbers.
> > > >>
> > > >> Also check cat /proc/dri/0/gem_objects
> > > >> there should be some number # object bytes - which should be
close
> > to
> > > > your
> > > >> missing cached pages.
> > > >>
> > > >>
> > > >> If you are using Intel GEM driver - there is some unlimited
caching
> > > > issue
> > > >> see: http://bugs.freedesktop.org/show_bug.cgi?id=20404
> > > >>
> > > > # cat /proc/`pidof X`/smaps | grep drm | wc -l
> > > > 0
> > > > # cat /proc/dri/0/gem_objects
> > > > cat: /proc/dri/0/gem_objects: No such file or directory
> > > >
> > > > I use Xorg 1.3 with an nvidia gpu. Dont know if I use a "Intel
GEM
> > > > driver".
> > > >
> > >
> > >
> > > Are you using binary driver from NVidia ??
> > > Maybe you should ask authors of this binary blob ?
> > >
> > > Could you try to use for a while Vesa driver to see, if you are
able
> > to get
> > > same strange results ?
> >
> > I rebooted in console without the nvidia-module loaded and have the
same
> > results (updated to 2.6.28.7 btw):
> > # sync ; echo 3 > /proc/sys/vm/drop_caches ; free -m ;
cat /proc/meminfo
> > total used free shared buffers
> > cached
> > Mem: 3950 1647 2303 0 0
> > 924
> > -/+ buffers/cache: 722 3228
> > Swap: 5890 0 5890
> > MemTotal: 4045444 kB
> > MemFree: 2358944 kB
> > Buffers: 544 kB
> > Cached: 946624 kB
> > SwapCached: 0 kB
> > Active: 1614756 kB
> > Inactive: 7632 kB
> > Active(anon): 1602476 kB
> > Inactive(anon): 0 kB
> > Active(file): 12280 kB
> > Inactive(file): 7632 kB
> > Unevictable: 0 kB
> > Mlocked: 0 kB
> > SwapTotal: 6032344 kB
> > SwapFree: 6032344 kB
> > Dirty: 72 kB
> > Writeback: 32 kB
> > AnonPages: 675224 kB
> > Mapped: 17756 kB
> > Slab: 19936 kB
> > SReclaimable: 9652 kB
> > SUnreclaim: 10284 kB
> > PageTables: 8296 kB
> > NFS_Unstable: 0 kB
> > Bounce: 0 kB
> > WritebackTmp: 0 kB
> > CommitLimit: 8055064 kB
> > Committed_AS: 3648088 kB
> > VmallocTotal: 34359738367 kB
> > VmallocUsed: 10616 kB
> > VmallocChunk: 34359716459 kB
> > DirectMap4k: 6080 kB
> > DirectMap2M: 4188160 kB
>
> Markus, you may want to try this patch, it will have better chance to
figure out
> the hidden file pages.
>
> 1) apply the patch and recompile kernel with CONFIG_PROC_FILECACHE=m
> 2) after booting:
> modprobe filecache
> cp /proc/filecache filecache-`date +'%F'`
> 3) send us the copied file, it will list all cached files, including
> the normally hidden ones.

The file consists of 674 lines. If I interpret it right, "size" is the
filesize and "cached" the amount of the file being in cache (why can
this be bigger than the file?!).

# sync ; echo 3 > /proc/sys/vm/drop_caches ; free -m ;
cat /proc/meminfo ; cp /proc/filecache filecache-$(date +"%F")
total used free shared buffers
cached
Mem: 3950 1935 2015 0 0
1009
-/+ buffers/cache: 925 3025
Swap: 5890 0 5890
MemTotal: 4045436 kB
MemFree: 2063976 kB
Buffers: 480 kB
Cached: 1033724 kB
SwapCached: 0 kB
Active: 1846000 kB
Inactive: 48552 kB
Active(anon): 1790892 kB
Inactive(anon): 8 kB
Active(file): 55108 kB
Inactive(file): 48544 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 6032344 kB
SwapFree: 6032344 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 860380 kB
Mapped: 101908 kB
Slab: 25772 kB
SReclaimable: 12560 kB
SUnreclaim: 13212 kB
PageTables: 16476 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8055060 kB
Committed_AS: 4132748 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 42256 kB
VmallocChunk: 34359683067 kB
DirectMap4k: 14272 kB
DirectMap2M: 4179968 kB

# sort -n -k 3 filecache-2009-03-05 | tail -n 5
15886 7112 7112 100 1 d- 00:08
(tmpfs) /dev/zero\040(deleted)
16209 35708 35708 100 1 d- 00:08
(tmpfs) /dev/zero\040(deleted)
16212 82128 82128 100 1 d- 00:08
(tmpfs) /dev/zero\040(deleted)
15887 340024 340024 100 1 d- 00:08
(tmpfs) /dev/zero\040(deleted)
15884 455008 455008 100 1 d- 00:08
(tmpfs) /dev/zero\040(deleted)

The sum of the third column is 1013 MB.
To note the biggest ones (or do you want the whole file?)... and thats
after a sync and a drop_caches! (Can be seen in the commands given.)

Thanks!
Markus