Quoting Justus Winter (2015-02-24 17:15:22) > Quoting Samuel Thibault (2015-02-24 01:04:19) > > I tried to start a gcc-5 build, it gets stuck at the tar x stage, with > > gnumach printing: > > > > no more room for vm_map_find_entry in 80223e20 (kmem_map_store) > > no more room for kmem_realloc in 80223e20 (kmem_map_store) > >[...] > > ipc_port 0010 80 4k 50 262239 262350 20988k > > 0k > > kmem_realloc is only used to enlarge the ipc tables, but this is not > due to the lack of space, but due to the lack of a sufficiently large > continuous chunk of the kernel address space. > > As demonstrated by the attached program the maximum number of ports a > task can have seems to be around 250000, which doesn't seem like a > lot. > > % ./test > ./test: mach_port_allocate (last good name: 242175): (os/kern) resource > shortage > > This suggests that we need a different data structure that doesn't > depend on a continuous chunk of memory.
I have replaced the IPC tables (and the reverse hash tables, which were intertwined with the tables) with radix trees. It seems to be working, but it needs some more cleanups, commit messages, and some adjustments of the debug interface (which I assume I can change freely, right?). The patches are here: http://darnassus.sceen.net/gitweb/teythoon/gnumach.git/shortlog/refs/heads/ipc-radix-trees-3 I haven't had a chance to assess the performance impact. This change raises the number of ports that a task can allocate to ~950000. Unfortunately, if the kernel runs out of space, it now simply crashes instead of returning KERN_NO_SPACE. Here are the relevant parts of /proc/slabinfo, before the allocation of 950000 ports and after that: root@debian:~# head -n1 /proc/slabinfo cache obj slab bufs objs bufs total reclaimable root@debian:~# egrep 'ipc_entry|rdxtree_node' /proc/slabinfo rdxtree_node 0010 280 4k 14 2995 3108 888k 24k ipc_entry 0010 16 4k 254 4231 4572 72k 4k root@debian:~# egrep 'ipc_entry|rdxtree_node' /proc/slabinfo rdxtree_node 0010 280 4k 14 18151 18200 5200k 12k ipc_entry 0010 16 4k 254 954283 954532 15032k 0k Cheers, Justus