On Wed, 15 Feb 2006, Paul de Weerd wrote:
> All,
>
> I'm a bit confused on the difference between SIZE and RES in the
> output of top(1) (the same goes for VSZ vs RSS in ps(1) output). The
> manpage says :
>
> SIZE The total size of the process (the text, data, and stack
> segments).
>
> RES The current amount of resident memory.
>
> Reading the page I'd think they should be equal; I'd say the total
> size of the process should equal the amount of resident memory. This
> is of course completely wrong (there's two fields for a reason), looking
> at a semi-random pair of processes on a system I have running here, I
> have one process with a SIZE of 696K and a RES of 19M (SIZE < RES) and
> also another one with a SIZE of 176K and a RES of 4K (SIZE > RES).
>
> I figured I'd check the code for more enlightenment. In
> /usr/src/usr.bin/top/machine.c I see :
>
> format_k(pagetok(PROCSIZE(pp))),
> format_k(pagetok(pp->p_vm_rssize)),
>
> PROCSIZE is #defined as the sum of (pp)->p_vm_[tds]size, but I can not
> find how these sizes relate to p_vm_rssize. I eventually end up in
> sys/sysctl.h where the kinfo_proc2 structure is defined. It says :
>
> int32_t p_vm_rssize; /* SEGSZ_T: current resident set size
> in pages */
> int32_t p_vm_tsize; /* SEGSZ_T: text size (pages) */
> int32_t p_vm_dsize; /* SEGSZ_T: data size (pages) */
> int32_t p_vm_ssize; /* SEGSZ_T: stack size (pages) */
>
> This, unfortunately, does not clear things up for me, I'd still read
> this to mean that rssize = tsize + dsize + ssize. How come SIZE can be
> larger or smaller than RES ? Is there any documentation on this ?
>
> The only thing I can think of is that RES does not take swapped out
> memory into account ("resident" as in "active and currently loaded in
> RAM"), but in that case SIZE >= RES, never SIZE < RES. And then I also
> see SIZE > RES on machines that have never touched swapped since boot,
> so that (partially) rules out swap as an answer. Is this perhaps
> related to dynamic libraries which are shared between processes and
> thus not counted in SIZE but are part of RES (or vice versa) ?
> Unlikely to be a good/complete answer, static binaries also have
> different values for SIZE and RES.
Yes, shared pages complicate matters a lot. Also, there are pages
(like code or other r/o pages) that are counted in SIZE, but are not
paged in, so they are not counted in RES.
-Otto
>
> Anyway, I should probably stop making a fool out of myself by making
> any more pointless guesses. Does anyone have a cluebat available for
> me ?
>
> Thanks,
>
> Paul 'WEiRD' de Weerd
>
> --
> >++++++++[<++++++++++>-]<+++++++.>+++[<------>-]<.>+++[<+
> +++++++++++>-]<.>++[<------------>-]<+.--------------.[-]
> http://www.weirdnet.nl/