Merge the memory reservation feature (Phase 1) from
lp:~jakub/helenos/mm.
This merge makes the testcase from ticket #114 non-reproducible. The
testcase is now available as tester's malloc2 test. It also seems to me
that this merge makes it harder for the system to run out of memory
during kconsole 'test *' and 'tester *', even though I did see several
hangs already with this feature in place. See below for what is still
missing to make the hangs even less probable or even impossible.
In Phase 1, I am targeting just the low-hanging fruits. In particular,
only anonymous and ELF backend pages are reserved physical memory at
time of as_area_create() and as_area_resize(). Memory is unreserved on
as_area_destroy(). In all other cases, memory is reserved at the same
time as it is allocated, making those calls subject to infinite
blocking if FRAME_ATOMIC is not used.
Possible sources of memory overcommit not addressed in this merge:
- As mentioned above, only backend pages are reserved; pages for
supporting structures such as B+tree nodes, TTEs are not reserved or
handled otherwise. Kernel heap allocator fragmentation is not included
in the reservations either.
- The initial amount of reservable memory is fed from zone_construct().
Zone merging is not taken into account, which can make the reservable
memory tracking inaccurate.