Path: utzoo!news-server.csri.toronto.edu!rpi!usc!cs.utexas.edu!romp!auschs!awdprime!perelandra.austin.ibm.com!ransom From: ransom@perelandra.austin.ibm.com (Jeff Peek) Newsgroups: comp.unix.aix Subject: Re: Page Space Problems Message-ID: <5971@awdprime.UUCP> Date: 18 Mar 91 15:35:23 GMT References: <1991Mar17.185553.9181@menudo.uh.edu> Sender: news@awdprime.UUCP Organization: Internation Business Machines - Austin, TX Lines: 68 In article <1991Mar17.185553.9181@menudo.uh.edu> jet@karazm.math.uh.edu ("J. Eric Townsend") writes: >Again, I repeat my plea for some IBM employee to come out of the woodwork >and explain this: > >oiler> ps aux > USER PID %CPU %MEM SZ RSS TT STAT TIME CMD > root 0 0.0% 78% 7592 6376 - S 1:31 swapper > root 1 0.1% 1% 164 120 - S 2:41 /etc/init > root 514 0.0% 0% 12 8 - R 3994:08 kproc > root 771 0.0% 0% 20 20 - S 0:05 kproc > root 1028 0.1% 0% 16 16 - S 3:45 kproc > root 1285 0.0% 0% 16 8 - S 0:00 kproc > root 1685 0.0% 0% 84 28 - S 0:18 /etc/syncd 60 > jet 1867 2.9% 5% 168 404 pts/0 S 0:01 -csh >.... [my previous posting about what SZ meant for process 0 was incorrect.] OK. You wanted it you got it. I did some mucking around in the code and actual experimentation on the machine and here is what I found. When you run ps -lk (the way I used to get the sizes for all the kprocs) you get: F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD b03 S 0 0 0 120 16 -- 1008 11008 - 4:50 swapper 303 R 0 514 0 103 127 -- 1209 28 - 9332:43 kproc 303 S 0 771 0 0 37 -- a05 36 20cd0 - 4:00 kproc 303 S 0 1028 0 1 39 -- 160b 36 20cd8 - 10:20 kproc 303 S 0 1285 0 0 36 -- 180c 32 20ce0 - 0:00 kproc 40201 S 0 1645 1 0 60 20 3058 32 - 0:00 kproc 40a01 S 0 2641 1 0 60 20 e27 32 - 0:00 kproc 40b03 S 0 4016 1 0 39 -- 8a4 32 1bbd844 - 3:08 kproc a01 S 7 7856 4527 0 60 20 fc7 32 - 0:00 kproc Here is a description of what is in the SZ field: SZ (-l, l) The size in 1024 byte units of the core image of the process. So, SZ is in 1K chunks. Then it appears my swapper is close to 11meg. The nitty gritty: The SZ is based on the number of paging space blocks (4K) associated with the TEXT and DATA segments for a process. Note, this is NOT real memory, just the number of page spaces blocks used by the process. The DATA segment includes user data, user stack, kernel stack, and the ublock. Now, the segments register values used for the calculation are taken from the u_adspace structure from the process's ublock. These srvals amount to the user's address space in USER MODE! The swapper is a special kproc, handcrafted at System Initialization. The u_adspace structure for the swapper is never initialized, i.e., it is all zeroes. On the RISC System/6000 an invalid segment register value is 7fffff. '0' is a valid srval and in fact is the srval for the kernel's text segment. This segment is only addressable to processes in kernel mode. So, ps is counting the kernel's TEXT segment TWICE for process 0. The reason this is not a problem for other kernel processes is that their u_adspace structure is inherited from their parent when they are created, thus initialized properly. Only process 0 has no parent (or is it it's own mother and father?). The strange but true facts about the swapper. >-- >J. Eric Townsend - jet@uh.edu - bitnet: jet@UHOU - vox: (713) 749-2120 >Skate UNIX or bleed, boyo... >(UNIX is a trademark of Bell Laboratories). Jeff Peek AIX Operating System Architecture -- IBM Personal Systems Programiming ransom@perelandra.austin.ibm.com VNET PEEK at AUSVMQ T/L 793-3935 Austin, TX