Daniel Micay
e0891c8cfc
implement the option of large size classes
...
This extends the size class scheme used for slab allocations to large
allocations. This drastically improves performance for many real world
programs using incremental realloc growth instead of using proper growth
factors. There are 4 size classes for every doubling in size, resulting
in a worst case of ~20% extra virtual memory being reserved and a huge
increase in performance for pathological cases. For example, growing
from 4MiB to 8MiB by calling realloc in increments of 32 bytes will only
need to do work beyond looking up the size 4 times instead of 1024 times
with 4096 byte granularity.
2019-04-07 08:52:17 -04:00
Daniel Micay
ec8fb347ed
document CONFIG_STATS
2019-04-07 00:10:22 -04:00
Daniel Micay
beaa39a5a3
move to only supporting current generation AOSP
2019-04-06 23:46:35 -04:00
Daniel Micay
494cc5ec50
update README now that arenas are implemented
2019-03-25 16:18:01 -04:00
Daniel Micay
c5e911419d
add initial implementation of arenas
2019-03-25 14:59:50 -04:00
Daniel Micay
ddd616aa0b
add documentation on system calls
2019-03-20 11:59:58 -04:00
Daniel Micay
ae96835b94
fix scalability header levels
2019-02-04 15:59:14 -05:00
Daniel Micay
e4061899aa
add documentation on scalability design choices
2019-02-04 15:01:15 -05:00
Daniel Micay
41df5005e8
add a top-level header to the README
2019-02-04 13:59:19 -05:00
Daniel Micay
9cc0ac3efa
add basic documentation on memory tagging approach
2019-02-04 11:58:28 -05:00
Daniel Micay
33b1a2740e
update default slab quarantine sizes in README
2019-01-02 15:42:41 -05:00
Arlo Breault
dea2788539
fix typo in README.md
2019-01-02 15:40:58 -05:00
Daniel Micay
57f115b33c
scale slab quarantine based on size
2019-01-02 14:52:13 -05:00
Daniel Micay
ccc2a86501
rename quarantine size -> length for clarity
2019-01-02 14:17:02 -05:00
Daniel Micay
830a7d338d
make class_region_size configurable
2018-12-05 09:38:13 -05:00
Daniel Micay
11fe467b7c
clarify wording
2018-11-19 08:04:37 -05:00
Daniel Micay
c9dfe586b3
add initial documentation on API extensions
2018-11-19 06:54:48 -05:00
Daniel Micay
4d85a61db2
remove obsolete duplicate information
2018-11-19 06:31:58 -05:00
Daniel Micay
d88a8c9813
mention that the same hash table code is reused
2018-11-19 05:45:34 -05:00
Daniel Micay
433b37b4a9
explain more of the size class reasoning
2018-11-19 01:44:46 -05:00
Daniel Micay
a052be762d
explain some differences from the previous project
2018-11-19 01:08:53 -05:00
Daniel Micay
a5ed64d01a
explain slot counts tied to slab size classes
2018-11-19 00:29:18 -05:00
Daniel Micay
5b048a28c2
improve explanation of jemalloc size classes
2018-11-19 00:29:15 -05:00
Daniel Micay
ac99282773
remove duplicate word
2018-11-17 10:53:04 -05:00
Daniel Micay
54a0313d9b
split out dependencies section
2018-11-16 18:41:27 -05:00
Daniel Micay
d208d093a2
add more of an introduction describing the project
2018-11-16 18:39:19 -05:00
Daniel Micay
2bb568b473
improve documentation about mapping count
2018-11-16 18:04:46 -05:00
Daniel Micay
8a38c4fb2a
add initial documentation for integer options
2018-11-16 15:40:48 -05:00
Daniel Micay
f3623e1f2b
finish migration away from config.h
2018-11-16 15:40:45 -05:00
Daniel Micay
315415acf2
clarify write-after-free detection feature
2018-11-16 03:26:07 -05:00
Daniel Micay
11c717a7b9
update progress on randomization
2018-11-05 18:06:54 -05:00
Daniel Micay
2d892e58ad
per-slab canary values are good enough for now
2018-11-05 18:05:56 -05:00
Daniel Micay
3a488c9a27
add initial slab allocation quarantine
2018-11-05 16:43:08 -05:00
Daniel Micay
ca465f6b3e
clarify scope of sized dealloc mismatch detection
2018-11-04 18:52:01 -05:00
Daniel Micay
1fed72a9c3
slab internal fragmentation is always the same
2018-11-04 03:59:54 -05:00
Daniel Micay
c12d6795de
expand a bit on future config for slab cache size
2018-11-03 04:47:45 -04:00
Daniel Micay
d5b773b2bc
clarify documentation about the 0 byte size class
2018-11-03 04:43:47 -04:00
Daniel Micay
f949698c7a
note that MPK-based hardening is off by default
2018-11-03 03:15:42 -04:00
Daniel Micay
f2a7ccde75
add basic overview of part of the approach to MTE
2018-11-03 03:09:03 -04:00
Daniel Micay
1da51ddde1
migrate bool configuration options out of config.h
2018-11-02 21:35:09 -04:00
Daniel Micay
5bee717134
use -march=native by default with a disable toggle
2018-10-28 22:49:15 -04:00
Daniel Micay
6f30211da8
some clarifications for the README
2018-10-28 20:28:10 -04:00
Daniel Micay
e985afe0e1
document relatively high performance cost of MPK
2018-10-23 19:38:48 -04:00
Daniel Micay
0b963078d5
guard metadata with Memory Protection Keys (MPK)
2018-10-23 01:11:31 -04:00
Daniel Micay
64b655f062
set scope of planned metadata protection
2018-10-18 20:35:25 -04:00
Daniel Micay
e37b36c9dd
update configuration documentation again
2018-10-18 20:18:55 -04:00
Daniel Micay
cf053e74d1
metadata region unification is completed
2018-10-18 16:10:49 -04:00
Daniel Micay
74139112d0
explain the purpose of CONFIG_CXX_ALLOCATOR
2018-10-18 14:57:33 -04:00
Daniel Micay
da8e9aa1d8
document allocator state region
2018-10-15 15:44:31 -04:00
Daniel Micay
e8eca2d430
explain the production-oriented design rationale
2018-10-15 04:07:20 -04:00
Daniel Micay
124d958da1
document free slabs quarantine
2018-10-14 22:19:10 -04:00
Daniel Micay
3504465584
document progress on protected allocator state
2018-10-14 22:15:48 -04:00
Daniel Micay
0a64c7d6a1
document the randomized array in the quarantine
2018-10-12 15:10:35 -04:00
Daniel Micay
2381d973b1
expand on metadata address space security
2018-10-10 18:55:31 -04:00
Daniel Micay
29fd86ab37
document sized deallocation validation
2018-10-10 18:49:17 -04:00
Daniel Micay
1a10c17e8b
add quarantine for large allocations
2018-10-08 16:14:07 -04:00
Daniel Micay
cf07ae6007
update configuration in README
2018-10-06 15:38:09 -04:00
Daniel Micay
e6e9ac1fc9
support replacing C++ new/delete implementation
...
This adds support for sanity checks based on sized deallocation and will
reduce the overhead of calls through the C++ allocator.
2018-10-05 02:11:29 -04:00
Daniel Micay
08a633b244
fix another typo in the README
2018-10-04 04:12:21 -04:00
Daniel Micay
e99191d5d4
document tuning vm.max_map_count
2018-10-04 03:44:19 -04:00
Daniel Micay
d12cf324dd
add documentation on testing
2018-10-04 03:27:30 -04:00
Daniel Micay
2a31c7291b
add basic documentation on configuration
2018-10-04 03:15:55 -04:00
Daniel Micay
15e5e2d0ac
fix typo in README
2018-10-03 17:23:20 -04:00
Daniel Micay
b24569b6ca
zero leading byte of canaries
2018-10-03 17:09:57 -04:00
Daniel Micay
b52d9ca831
aggressive write-after-free check is implemented
2018-09-11 05:17:22 -04:00
Daniel Micay
3751b85e47
document minimum musl version for external use
2018-09-06 19:52:09 -04:00
Daniel Micay
1be74ec40d
add initial guard slabs implementation
2018-09-06 18:55:24 -04:00
Daniel Micay
bf55fad6d0
document that slab canaries are implemented
2018-09-05 00:19:27 -04:00
Daniel Micay
2ec65306dd
expand documentation on supported environments
2018-09-02 06:05:37 -04:00
Daniel Micay
e93d039214
only use reserved memory for regions hash table
2018-09-01 10:23:06 -04:00
Daniel Micay
dba330fde7
expand documentation in the README
2018-08-30 11:12:43 -04:00
Daniel Micay
b424c95737
clarify memory is zero on init without more writes
2018-08-27 01:14:36 -04:00
Daniel Micay
1b3d485e87
clarify that the slab design isn't like jemalloc
2018-08-26 07:19:58 -04:00
Daniel Micay
c97bbc141c
add missing word
2018-08-26 07:11:22 -04:00
Daniel Micay
f793a2719f
add some basic initial documentation to the README
2018-08-26 06:39:33 -04:00
Daniel Micay
510291646b
document minimum versions for dependencies
2018-08-24 19:30:36 -04:00