Le ottimizzazioni alla tabella delle pagine costituiscono
La parte più controversa nel design della VM di FreeBSD ed ha
mostrato un po' di affanno con l'avvento di un uso pesante di
mmap()
.
Penso che questa sia una caratteristiche della maggior parte dei
BSD anche se non sono sicuro di quando è stata introdotta
la prima volta. Ci sono due ottimizzazioni maggiori. La prima è
che le tabelle della pagine hardware non contengono uno stato persistente
ma possono essere gettate via in qualsiasi momento con un sovraccarico di
gestione minimo.
La seconda è che ogni pagina attiva nel sistema ha una struttura di
controllo pv_entry
che è integrata con la
struttura vm_page
. FreeBSD può semplicemente
operare attraverso quelle mappature di cui è certa l'esistenza,
mentre Linux deve controllare tutte le tabelle delle pagine che
potrebbero contenere una mappatura specifica per
vedere se lo stanno effettivamente facendo, il che può portare ad
un sovraccarico computazionale O(n^2) in alcune situazioni.
È per questo che FreeBSD tende a fare scelte migliori su quale
pagina riutilizzare o mandare in swap quando la memoria è messa
sotto sforzo, fornendo una miglior performance sotto carico. Comunque,
FreeBSD richiede una messa a punto del kernel per accomodare situazioni
che richiedano grandi spazi di indirizzamento condivisi, come quelli che
possono essere necessari in un sistema di news perché potrebbe
esaurire il numero di struct pv_entry
.
Sia Linux che FreeBSD necessitano di lavoro in quest'area. FreeBSD sta cercando di massimizzare il vantaggio di avere un modello di mappatura attiva potenzialmente poco denso (non tutti i processi hanno bisogno di mappare tutte le pagine di una libreria condivisa, ad esempio), mentre linux sta cercando di semplificare i suoi algoritmi. FreeBSD generalmente ha dei vantaggi prestazionali al costo di un piccolo spreco di memoria in più, ma FreeBSD crolla nel caso in cui un grosso file sia condiviso massivamente da centinaia di processi. Linux, d'altro canto, crolla nel caso in cui molti processi mappino a macchia di leopardo la stessa libreria condivisa e gira in maniera non ottimale anche quando cerca di determinare se una pagina deve essere riutilizzata o no.
Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
Per domande su FreeBSD, leggi la
documentazione prima di contattare
<questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a
<doc@FreeBSD.org>.