Il 24 ottobre Phoronix ha riferito che una modifica a memblock era stata inviata per l’integrazione in Linux 7.4. La patch proposta da Tarun Sahu sostituisce scansioni lineari con la ricerca binaria in due funzioni; per un caso di recupero KHO descritto dall’autore, il tempo riportato scende da circa 268 secondi a circa 50 millisecondi.
Il ruolo di memblock all’avvio
memblock gestisce la memoria fisica nelle prime fasi dell’avvio di Linux, prima che entri in funzione l’allocatore completo delle pagine. La modifica riguarda quindi la ricerca di regioni di memoria in questa fase iniziale.
Come cambia la ricerca nelle due funzioni memblock
La patch interviene su memblock_add_range() e memblock_isolate_range() in mm/memblock.c. Invece di esaminare le regioni candidate partendo dall’inizio della lista, la ricerca binaria individua la prima regione che termina oltre la base dell’intervallo cercato e restringe così il campo di ricerca.
Sahu descrive le scansioni ripetute come O(N²) nel caso di forte frammentazione. Con la ricerca binaria, la complessità massima indicata è O(N log N), mentre gli inserimenti sequenziali restano O(N).
Che cosa misura il dato KHO
Nel caso riferito da Sahu, il recupero di memoria per Kernel Handover (KHO) coinvolge circa 393.000 pagine. I tempi indicati per questa operazione sono:
| Scenario | Prima della modifica | Dopo la modifica |
| Recupero KHO, circa 393.000 pagine | Circa 268 secondi | Circa 50 millisecondi |
Il confronto riguarda il recupero KHO in quel carico di memoria frammentata. La cifra è il risultato riportato dall’autore della patch.
Un secondo rapporto riguarda gli intervalli nei log
Dongli Zhang ha riferito una prova separata su un sistema con 32 CPU e un nodo, THP impostato su “never” e pagine da 4K. Nei log del suo carico, l’intervallo tra i marcatori mem-auto-init e SLUB era di 38,355755 secondi prima di applicare la patch e di 0,264273 secondi dopo.
Tarun Sahu ha osservato che le scansioni lineari possono essere efficienti con liste piccole e ha indicato le liste grandi e frammentate come obiettivo della modifica. Ha descritto le funzioni interessate come parte dell’inizializzazione all’avvio, con l’hotplug della memoria come eccezione.