-----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-----