-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

I installed cmucl last week in order to start learning more about
Common Lisp.  The system I run on has these specs:

Intel PIII 500
512   MiB core memory
  8   GiB swap space
  8.5 GiB total virtual memory
It runs Debian GNU/Linux (unstable distribution).

However, I couldn't get very far:

$ cmucl
mmap: Cannot allocate memory
ensure_space: Failed to validate 268431360 bytes at 0x28000000

This is because cmucl is trying to allocate vast amounts of memory.
This is the strace output:

[EMAIL PROTECTED]:~$ LD_LIBRARY_PATH=/usr/lib/debug strace cmucl
execve("/usr/bin/cmucl", ["cmucl"], [/* 33 vars */]) = 0
uname({sys="Linux", node="whinlatter", ...}) = 0
brk(0)                                  = 0x806e000
[...]
uname({sys="Linux", node="whinlatter", ...}) = 0
old_mmap(0x10000000, 268431360, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x10000000
old_mmap(0x28000000, 268431360, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = -1 ENOMEM (Cannot 
allocate memory)dup(2)                                  = 3
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fstat64(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7e8f000
_llseek(3, 0, 0xbffff8e0, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
write(3, "mmap: Cannot allocate memory\n", 29mmap: Cannot allocate memory
) = 29
close(3)                                = 0
munmap(0xb7e8f000, 4096)                = 0
write(2, "ensure_space: Failed to validate"..., 63ensure_space: Failed to 
validate 268431360 bytes at 0x28000000
) = 63
exit_group(1)                           = ?

You can see the allocation fails on the second 256 MiB block.

The failure is because there is a system-wide address-space limit
which limits each process to 512 MiB VM.  This is specified in
/etc/security/limits.conf:

*               soft    as              524288

If I remove the limit, cmucl will start up and run.  However, it uses
staggering amounts of memory (as shown by top):

  PID USER      PR  NI  VIRT  RES  SHR S #C %CPU %MEM   TIME COMMAND
10620 roger     15  -1 1284m 5044  24m S  0  0.8  1.0   0:00 cmucl

So cmucl is using over 1.2 GiB VM!  This is the memory map:

# cat /proc/7828/maps
08048000-08064000 r-xp 00000000 fe:00 245819     /usr/bin/lisp
08064000-08065000 rw-p 0001c000 fe:00 245819     /usr/bin/lisp
08065000-0808f000 rw-p 08065000 00:00 0
10000000-1137e000 rwxp 00001000 fe:00 115266     /usr/lib/cmucl/lisp.core
1137e000-1ffff000 rwxp 1137e000 00:00 0
20000000-27fff000 rwxp 20000000 00:00 0
28000000-28318000 rwxp 0137f000 fe:00 115266     /usr/lib/cmucl/lisp.core
28318000-37fff000 rwxp 28318000 00:00 0
38000000-38010000 r-xp 38000000 00:00 0
38010000-3ffff000 rwxp 38010000 00:00 0
58000000-58001000 rwxp 01697000 fe:00 115266     /usr/lib/cmucl/lisp.core
58001000-78000000 rwxp 58001000 00:00 0
b7cf0000-b7cf7000 rwxp b7cf0000 00:00 0
b7cf7000-b7e79000 rw-p b7cf7000 00:00 0
b7e79000-b7fa9000 r-xp 00000000 03:05 20464      /lib/tls/libc-2.3.2.so
b7fa9000-b7fb2000 rw-p 0012f000 03:05 20464      /lib/tls/libc-2.3.2.so
b7fb2000-b7fb4000 rw-p b7fb2000 00:00 0
b7fb4000-b7fd6000 r-xp 00000000 03:05 20482      /lib/tls/libm-2.3.2.so
b7fd6000-b7fd7000 rw-p 00022000 03:05 20482      /lib/tls/libm-2.3.2.so
b7fd7000-b7fd8000 rw-p b7fd7000 00:00 0
b7fd8000-b7fda000 r-xp 00000000 03:05 20481      /lib/tls/libdl-2.3.2.so
b7fda000-b7fdb000 rw-p 00001000 03:05 20481      /lib/tls/libdl-2.3.2.so
b7fe9000-b7fea000 rw-p b7fe9000 00:00 0
b7fea000-b8000000 r-xp 00000000 03:05 12173      /lib/ld-2.3.2.so
b8000000-b8001000 rw-p 00015000 03:05 12173      /lib/ld-2.3.2.so
be000000-be100000 rwxp be000000 00:00 0
bfffe000-c0000000 rwxp bfffe000 00:00 0
ffffe000-fffff000 ---p 00000000 00:00 0

These are the calls it makes:

mmap2(0x10000000, 268431360, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x10000000
mmap2(0x28000000, 268431360, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x28000000
mmap2(0x58000000, 536870912, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x58000000
mmap2(0x38000000, 134205440, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x38000000
mmap2(0x3fffd000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x3fffd000
mmap2(0x20000000, 134213632, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x20000000
mmap2(0xbe000000, 1048576, PROT_READ|PROT_WRITE|PROT_EXEC, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0xbe000000
mprotect(0x38000000, 65536, PROT_READ|PROT_EXEC) = 0
mmap2(NULL, 1576960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7cf7000

So that's a whole lot of memory!  Most systems don't have anything
like that installed!  Is there a reason for this excessive memory usage?


There are some more details here:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=282716


Regards,
Roger

(BTW, please could you CC me on any replies--I'm not subscribed to the
list. Thanks!)

- -- 
Roger Leigh
                Printing on GNU/Linux?  http://gimp-print.sourceforge.net/
                Debian GNU/Linux        http://www.debian.org/
                GPG Public Key: 0x25BFB848.  Please sign and encrypt your mail.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>

iD8DBQFBp4X/VcFcaSW/uEgRAiVMAJ4x6mgY69zxpiBisO77lhnsWW1rdACbBLze
tAihOLrsoQVO4FsJQSIafCM=
=hzvw
-----END PGP SIGNATURE-----

Reply via email to