Elementi di progettazione del sistema di VM di FreeBSD
Indietro |  | Avanti

# 6 Ottimizzazioni della Tabella delle Pagine

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.

Indietro | Partenza | Avanti
Pre-Faulting e Ottimizzazioni di Azzeramento |  | Colorazione delle Pagine

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