microsoft / microsoft/mimalloc

Use mremap for `mi_realloc` on large objects

Aperta
#693 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

stale
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_THRESHOLD are allocated by a (non-cached) syscall to mmap (likely with appropriate HUGEPAGE flags)
  • for mi_realloc where both the before and after size are >=MMAP_THRESHOLD, it is implemented by a (non-cached) syscall to mremap

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. 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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.