* PagesAllocator: A process-global caching strategy for the allocator. It deals with allocating virtual addresses and memory, and gives us back some of the performance that's lost by having an actual decommitment strategy (which the hoard2 glue code doesn't.) It uses two SplayTrees to manage free lists, and resizes areas on allocate if they aren't next to a free chunk (which saves a lot of time for large reallocations.) There's still room for improvement here, see inline TODOs. But overall we get pretty good performance with it. * Add a TLS slot for the allocator glue to use. Right now it just puts integers in there (since thread IDs are not evenly distributed), but we could put a data structure pointer in there as well, potentially. Change-Id: I56ddb0b022a468dc04275075ed7e174b339c8ca4 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8335 Reviewed-by: waddlesplash <[email protected]> Tested-by: Commit checker robot <[email protected]>
36 lines
774 B
C
36 lines
774 B
C
/*
|
|
* Copyright 2003-2009, Axel Dörfler, [email protected].
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _KERNEL_TLS_H
|
|
#define _KERNEL_TLS_H
|
|
|
|
|
|
#include <support/TLS.h>
|
|
|
|
|
|
#define TLS_SIZE (TLS_MAX_KEYS * sizeof(void *))
|
|
#define TLS_COMPAT_SIZE (TLS_MAX_KEYS * sizeof(uint32))
|
|
|
|
enum {
|
|
TLS_BASE_ADDRESS_SLOT = 0,
|
|
// contains the address of the local storage space
|
|
|
|
TLS_THREAD_ID_SLOT,
|
|
TLS_ERRNO_SLOT,
|
|
TLS_ON_EXIT_THREAD_SLOT,
|
|
TLS_USER_THREAD_SLOT,
|
|
TLS_DYNAMIC_THREAD_VECTOR,
|
|
TLS_MALLOC_SLOT,
|
|
TLS_LOCALE_SLOT,
|
|
|
|
// Note: these entries can safely be changed between
|
|
// releases; 3rd party code always calls tls_allocate()
|
|
// to get a free slot
|
|
|
|
TLS_FIRST_FREE_SLOT
|
|
// the first free slot for user allocations
|
|
};
|
|
|
|
#endif /* _KERNEL_TLS_H */
|