microsoft / microsoft/mimalloc
Use mremap for `mi_realloc` on large objects
Nessuno ha ancora preso questa issue.
- Lingua principale
- C
- Stelle
- 13.4k
- Fork
- 1.2k
- Merge medio
- 4g 45m
- PR unite (30g)
- 13
Descrizione
I'd like to be able to use mimalloc to manage my huge objects (arrays or hashmaps which are many gigabytes), not just my small objects. For arrays and hashmaps, we use realloc (in turn, mi_realloc) to grow the underlying storage. This ensures that, from the array/hashmap perspective, we atomically transition from having an old_size object in memory to having an new_size object in memory, without ever needing an old_size+new_size footprint.
Sadly, mimalloc's internal implementation breaks this invariant. It is internally implemented by allocating a new object, copying, and deallocating the old object.
I'd like the following extension to mimalloc:
- pick some
MMAP_THRESHOLD, perhaps MMAP_THRESHOLD=64MiB - all objects
>=MMAP_THRESHOLDare allocated by a (non-cached) syscall tommap(likely with appropriate HUGEPAGE flags) - for
mi_reallocwhere both the before and after size are>=MMAP_THRESHOLD, it is implemented by a (non-cached) syscall tomremap
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Parti da mi_realloc e segui come vengono attualmente gestite le allocazioni di grandi dimensioni. Leggi le interfacce mmap e mremap della piattaforma e determina come MMAP_THRESHOLD, i mapping non memorizzati nella cache e i flag delle huge page si integrerebbero nell’allocator. Il lavoro è completato quando le allocazioni di grandi dimensioni usano mmap e le riallocazioni idonee preservano tramite mremap l’invariante del footprint dato da vecchio più nuovo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c
- Ambito
- operating-systems, performance
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Attiva
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100