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/