tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Reducing libc size



On Tue, Apr 29, 2008 at 08:02:47AM +0100, David Laight wrote:
> No, if you run multiple copies of a static binary the code and readonly
> data are shared between the processes, any data is shared copy-on-write.
> 
> The crunched programs are slightly smaller (since they don't need a PIC
> libc), but the main benefit is the linker selecting the required parts
> of libc for you.

Hmm, I think I got this now. Is there a way I could easily show this
memory saving behaviour in numbers?

Before I started hacking with libc I thought about measuring the memory
consumption, but ended up looking at the /lib/libc.so.12.159 file size
since it was so easy.

But now, if open a few /bin/sh's and a few /rescue/sh's to the background, 
top shows:

load averages:  0.01,  0.06,  0.03    up 0 days,  1:48   07:58:10
9 processes:   4 sleeping, 4 stopped, 1 on CPU
CPU states:     % user,     % nice,     % system,     % interrupt,     %
idle
Memory: 2376K Act, 20K Inact, 252K Wired, 1284K Exec, 124K File, 44M
Free
Swap:

  PID USERNAME PRI NICE   SIZE   RES STATE      TIME   WCPU    CPU
COMMAND
 3644 root      43    0    88K  712K CPU        0:00  0.00%  0.00% top
    0 root     125    0     0K  416K schedule   0:00  0.00%  0.00% [system]
 1749 root      85    0   140K  800K wait       0:00  0.00%  0.00% sh
 2102 root      85    0  6868K  552K wait       0:00  0.00%  0.00% sh
    1 root      81    0    32K  356K wait       0:00  0.00%  0.00% init
 3640 root      43    0   140K  752K STOP       0:00  0.00%  0.00% sh
 3642 root      43    0   140K  752K STOP       0:00  0.00%  0.00% sh
 3641 root      43    0  6868K  520K STOP       0:00  0.00%  0.00% sh
 3643 root      43    0  6868K  520K STOP       0:00  0.00%  0.00% sh

Here 140k sized sh's are dynamic /bin/sh's and 6868k sized sh's are
static /rescue/sh's. I suppose SIZE is not important, but does RES contain the
copy-on-write pages shared by a number of processes? If it does the per 
process memory usage is not relevat, and I should be looking the total 
memory used. Correct?

> For the install ramdisk there are 'small' versions of some functions
> in a separate library - used to avoid getting bloat from libc.

Thanks, I'll have a look at these.

-Mikko


Home | Main Index | Thread Index | Old Index