1===================== 2Overcommit Accounting 3===================== 4 5The Linux kernel supports the following overcommit handling modes 6 70 8 Heuristic overcommit handling. Obvious overcommits of address 9 space are refused. Used for a typical system. It ensures a 10 seriously wild allocation fails while allowing overcommit to 11 reduce swap usage. This is the default. 12 131 14 Always overcommit. Appropriate for some scientific 15 applications. Classic example is code using sparse arrays and 16 just relying on the virtual memory consisting almost entirely 17 of zero pages. 18 192 20 Don't overcommit. The total address space commit for the 21 system is not permitted to exceed swap + a configurable amount 22 (default is 50%) of physical RAM. Depending on the amount you 23 use, in most situations this means a process will not be 24 killed while accessing pages but will receive errors on memory 25 allocation as appropriate. 26 27 Useful for applications that want to guarantee their memory 28 allocations will be available in the future without having to 29 initialize every page. 30 31The overcommit policy is set via the sysctl ``vm.overcommit_memory``. 32 33The overcommit amount can be set via ``vm.overcommit_ratio`` (percentage) 34or ``vm.overcommit_kbytes`` (absolute value). These only have an effect 35when ``vm.overcommit_memory`` is set to 2. 36 37The current overcommit limit and amount committed are viewable in 38``/proc/meminfo`` as CommitLimit and Committed_AS respectively. 39 40Gotchas 41======= 42 43The C language stack growth does an implicit mremap. If you want absolute 44guarantees and run close to the edge you MUST mmap your stack for the 45largest size you think you will need. For typical stack usage this does 46not matter much but it's a corner case if you really really care 47 48In mode 2 the MAP_NORESERVE flag is ignored. 49 50 51How It Works 52============ 53 54The overcommit is based on the following rules 55 56For a file backed map 57 | SHARED or READ-only - 0 cost (the file is the map not swap) 58 | PRIVATE WRITABLE - size of mapping per instance 59 60For an anonymous or ``/dev/zero`` map 61 | SHARED - size of mapping 62 | PRIVATE READ-only - 0 cost (but of little use) 63 | PRIVATE WRITABLE - size of mapping per instance 64 65Additional accounting 66 | Pages made writable copies by mmap 67 | shmfs memory drawn from the same pool 68 69Status 70====== 71 72* We account mmap memory mappings 73* We account mprotect changes in commit 74* We account mremap changes in size 75* We account brk 76* We account munmap 77* We report the commit status in /proc 78* Account and check on fork 79* Review stack handling/building on exec 80* SHMfs accounting 81* Implement actual limit enforcement 82 83To Do 84===== 85* Account ptrace pages (this is hard) 86