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