forked from OSchip/llvm-project
3 Commits
Author | SHA1 | Message | Date |
---|---|---|---|
![]() |
56dafd024c |
[scudo] Add PageReleaseContext to convey page usage status.
PageReleaseContext contains all the information needed for determing if a page can be released. Splitting out the context increases the flexibility of heterogenous free lists in the future. Also rename PackedCounterArray to PageMap. Reviewed By: cryptoad, cferris Differential Revision: https://reviews.llvm.org/D133895 |
|
![]() |
79de8f8441 |
[scudo][standalone] Release smaller blocks less often
Summary: Releasing smaller blocks is costly and only yields significant results when there is a large percentage of free bytes for a given size class (see numbers below). This CL introduces a couple of additional checks for sizes lower than 256. First we want to make sure that there is enough free bytes, relatively to the amount of allocated bytes. We are looking at 8X% to 9X% (smaller blocks require higher percentage). We also want to make sure there has been enough activity with the freelist to make it worth the time, so we now check that the bytes pushed to the freelist is at least 1/16th of the allocated bytes for those classes. Additionally, we clear batches before destroying them now - this could have prevented some releases to occur (class id 0 rarely releases anyway). Here are the numbers, for about 1M allocations in multiple threads: Size: 16 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 0% released 93% freed -> 0% released 94% freed -> 0% released 95% freed -> 0% released 96% freed -> 0% released 97% freed -> 2% released 98% freed -> 7% released 99% freed -> 27% released Size: 32 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 0% released 93% freed -> 0% released 94% freed -> 0% released 95% freed -> 1% released 96% freed -> 3% released 97% freed -> 7% released 98% freed -> 17% released 99% freed -> 41% released Size: 48 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 0% released 93% freed -> 0% released 94% freed -> 1% released 95% freed -> 3% released 96% freed -> 7% released 97% freed -> 13% released 98% freed -> 27% released 99% freed -> 52% released Size: 64 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 1% released 93% freed -> 2% released 94% freed -> 3% released 95% freed -> 6% released 96% freed -> 11% released 97% freed -> 20% released 98% freed -> 35% released 99% freed -> 59% released Size: 80 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 1% released 91% freed -> 1% released 92% freed -> 2% released 93% freed -> 4% released 94% freed -> 6% released 95% freed -> 10% released 96% freed -> 17% released 97% freed -> 26% released 98% freed -> 41% released 99% freed -> 64% released Size: 96 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 1% released 90% freed -> 1% released 91% freed -> 3% released 92% freed -> 4% released 93% freed -> 6% released 94% freed -> 10% released 95% freed -> 14% released 96% freed -> 21% released 97% freed -> 31% released 98% freed -> 47% released 99% freed -> 68% released Size: 112 85% freed -> 0% released 86% freed -> 1% released 87% freed -> 1% released 88% freed -> 2% released 89% freed -> 3% released 90% freed -> 4% released 91% freed -> 6% released 92% freed -> 8% released 93% freed -> 11% released 94% freed -> 16% released 95% freed -> 22% released 96% freed -> 30% released 97% freed -> 40% released 98% freed -> 55% released 99% freed -> 74% released Size: 128 85% freed -> 0% released 86% freed -> 1% released 87% freed -> 1% released 88% freed -> 2% released 89% freed -> 3% released 90% freed -> 4% released 91% freed -> 6% released 92% freed -> 8% released 93% freed -> 11% released 94% freed -> 16% released 95% freed -> 22% released 96% freed -> 30% released 97% freed -> 40% released 98% freed -> 55% released 99% freed -> 74% released Size: 144 85% freed -> 1% released 86% freed -> 2% released 87% freed -> 3% released 88% freed -> 4% released 89% freed -> 6% released 90% freed -> 7% released 91% freed -> 10% released 92% freed -> 13% released 93% freed -> 17% released 94% freed -> 22% released 95% freed -> 28% released 96% freed -> 37% released 97% freed -> 47% released 98% freed -> 61% released 99% freed -> 78% released Size: 160 85% freed -> 1% released 86% freed -> 2% released 87% freed -> 3% released 88% freed -> 4% released 89% freed -> 5% released 90% freed -> 7% released 91% freed -> 10% released 92% freed -> 13% released 93% freed -> 17% released 94% freed -> 22% released 95% freed -> 28% released 96% freed -> 37% released 97% freed -> 47% released 98% freed -> 61% released 99% freed -> 78% released Size: 176 85% freed -> 2% released 86% freed -> 3% released 87% freed -> 4% released 88% freed -> 6% released 89% freed -> 7% released 90% freed -> 9% released 91% freed -> 12% released 92% freed -> 15% released 93% freed -> 20% released 94% freed -> 25% released 95% freed -> 32% released 96% freed -> 40% released 97% freed -> 51% released 98% freed -> 64% released 99% freed -> 80% released Size: 192 85% freed -> 4% released 86% freed -> 5% released 87% freed -> 6% released 88% freed -> 8% released 89% freed -> 10% released 90% freed -> 13% released 91% freed -> 16% released 92% freed -> 20% released 93% freed -> 24% released 94% freed -> 30% released 95% freed -> 37% released 96% freed -> 45% released 97% freed -> 55% released 98% freed -> 68% released 99% freed -> 82% released Size: 224 85% freed -> 8% released 86% freed -> 10% released 87% freed -> 12% released 88% freed -> 14% released 89% freed -> 17% released 90% freed -> 20% released 91% freed -> 23% released 92% freed -> 28% released 93% freed -> 33% released 94% freed -> 39% released 95% freed -> 46% released 96% freed -> 53% released 97% freed -> 63% released 98% freed -> 73% released 99% freed -> 85% released Size: 240 85% freed -> 8% released 86% freed -> 10% released 87% freed -> 12% released 88% freed -> 14% released 89% freed -> 17% released 90% freed -> 20% released 91% freed -> 23% released 92% freed -> 28% released 93% freed -> 33% released 94% freed -> 39% released 95% freed -> 46% released 96% freed -> 54% released 97% freed -> 63% released 98% freed -> 73% released 99% freed -> 85% released Reviewers: cferris, pcc, hctim, eugenis Subscribers: #sanitizers, llvm-commits Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D82031 |
|
![]() |
fc69967a4b |
[scudo][standalone] Shift some data from dynamic to static
Summary: Most of our larger data is dynamically allocated (via `map`) but it became an hindrance with regard to init time, for a cost to benefit ratio that is not great. So change the `TSD`s, `RegionInfo`, `ByteMap` to be static. Additionally, for reclaiming, we used mapped & unmapped a buffer each time, which is costly. It turns out that we can have a static buffer, and that there isn't much contention on it. One of the other things changed here, is that we hard set the number of TSDs on Android to the maximum number, as there could be a situation where cores are put to sleep and we could miss some. Subscribers: mgorny, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D74696 |