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>.