Date: Tue, 6 Oct 2015 23:58:33 +1100 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Martin T <m4rtntns@gmail.com> Cc: freebsd-i386@freebsd.org Subject: Re: questions regarding "Inactive", "Cache" and "Buffers" memory Message-ID: <20151006231051.Q2729@besplex.bde.org> In-Reply-To: <CAJx5YvGbZyEL3Dnzu_0bZyfgmFMW5z2ufahR4wqWbhNyAcCnfg@mail.gmail.com> References: <CAJx5YvGbZyEL3Dnzu_0bZyfgmFMW5z2ufahR4wqWbhNyAcCnfg@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 6 Oct 2015, Martin T wrote: This is not really i386-specific. > FreeBSD "top" utility categorizes memory into "Active", "Inact", > "Wired", "Cache", "Buf" and "Free" sections. For example: > > Mem: 125M Active, 42M Inact, 51M Wired, 17M Cache, 34M Buf, 2720K Free > Swap: 512M Total, 512M Free > > Those sections should have following meanings: "should" according to top's UI? Some of them are too FreeBSD-specific to match a general UI. > Active: Memory currently being used by processes. > Inactive: Memory that was used by processes that are no longer > running, but is cached since it may be used again. > Wired: Memory in use by the FreeBSD kernel. This memory cannot be swapped out. > Cache: Memory being used to cache data. Can be freed immediately if required. > Buffers: Disk(HDD/SSD) cache. "Buf" is a generic idea, but top only displays a FreeBSD buffer variable that is unrelated to top's idea of what it is, and is among the least useful of FreeBSD buffer-related variables. It is what is given by the vfs.bufspace sysctl. Most of the disk cache lives in VMIO pages which are counted under "Inact". Under some loads (especially light ones), "Inact" is mostly for the disk cache, but it is not easy to say exactly when this applies. "Buf" is just the amount of virtual memory currently used for mapping VMIO pages. In normal use (not using zfs) after the system has read a lot off disks, it is much smaller than the amount buffered in VMIO pages. The mapping may be sparse or fragmented, so it may be much larger than the amount mapped. It is limited to a fixed amount given by the vfs.maxbufspace syscall. This value is even less interesting since it is fixed at boot time and is determined by the amount of memory unless it is manually configured. But unless the mapping is very sparse or fragmented, after the buffer cache warms up bufspace is much the same as maxbufspace. So all that the dynamic bufspace tells you most of the time is how ineffective the mapping is. > Free: Completely free and ready to use. > > Questions: > > 1) Is it possible to flush "Inactive", "Cache" or "Buffers" memory? Or > can this be done only be kernel automatically? I don't know of any way except unmounting a file system. That moves all pages for buffering the file system out of "Inact", and any of these that are mapped into the buffer cache out of "Buf". zfs doesn't use the normal mechism, so I think neither "Inact" or "Buf" is relevant for it. It now has its own line on the top display. > 2) What is the difference between "Cache" and "Buffers" memory? "Cache" is even more technical and unsuitable for putting in the top display than "Buf". Since it is a FreeBSD (mach vm) thing, users shouldn't even detect top to display it. This seems to be fixed in -current -- "Cache" is just not displayed. It usually has a small value (28K on my old system) so was best ignored. "Wired" and "Inact" are also techical vm things, but they are worth displaying since they have interesting values that can be partly understood without knowing all the details. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20151006231051.Q2729>