I did an experiment on our system. I added a small kernel patch, as mentioned by Daniel in first email of this thread, to compute the droppable pagecache without actually dropping it. Using this value I computed the Available memory by adding droppable-page count to memFree count. Then used a test application to analyze the difference between memAvailable, and dropcacheinfo output. The application creates 32 threads. Each allocates 64MB block using malloc(). There is 5 second interval between each allocation, which allows me to gather data. After all allocation is done, the threads then write data to these blocks, using memset. This is also done incrementally, allowing me track meminfo and dropcacheinfo. If you look at the attached pdf, you will notice that OOM messages start to appear when memAvailable is showing 253MB (259228 KB) Free, memFree is 13.5MB (14008 KB) Free, and dropcache based calculation ³Available memory² is showing 21MB (21720 KB) Free. So, it appears that memAvailable is not as accurate, especially if data is used to warn user about system running low on memory. -KM On 2/11/16, 2:11 PM, "Rik van Riel" <riel@xxxxxxxxxx> wrote: >On Wed, 2016-02-10 at 11:11 -0800, Daniel Walker wrote: >> On 02/10/2016 10:13 AM, Dave Hansen wrote: >> > On 02/10/2016 10:04 AM, Daniel Walker wrote: >> > > > [Linux_0:/]$ echo 3 > /proc/sys/vm/drop_caches >> > > > [Linux_0:/]$ cat /proc/meminfo >> > > > MemTotal: 3977836 kB >> > > > MemFree: 1095012 kB >> > > > MemAvailable: 1434148 kB >> > > I suspect MemAvailable takes into account more than just the >> > > droppable >> > > caches. For instance, reclaimable slab is included, but I don't >> > > think >> > > drop_caches drops that part. >> > There's a bit for page cache and a bit for slab, see: >> > >> > https://kernel.org/doc/Documentation/sysctl/vm.txt >> > >> > >> >> Ok, then this looks like a defect then. I would think MemAvailable >> would >> always be smaller then MemFree (after echo 3 > >> /proc/sys/vm/drop_caches).. Unless there is something else be >> accounted >> for that we aren't aware of. > >echo 3 > /proc/sys/vm/drop_caches will only >drop unmapped page cache, IIRC > >The system may still have a number of page >cache pages left that are mapped in processes, >but will be reclaimable if the VM needs the >memory for something else. > >-- >All rights reversed
Attachment:
dropcacheinfo_data.pdf
Description: dropcacheinfo_data.pdf