Il nuovo metodo di gestione della memoria di Facebook

Uno dei membri del team di sviluppo del social network Facebook, Gushchin romano, ha proposto nella mailing list degli sviluppatori una serie di Patch del kernel Linuxmirato a migliorare la gestione della memoria attraverso l'implementazione di un nuovo controller di gestione della memoria - lastra (controller di memoria della lastra).

distribuzione della lastra è un meccanismo di gestione della memoria progettato per allocare la memoria in modo più efficiente ed eliminare una frammentazione significativa. La base di questo algoritmo è archiviare la memoria allocata contenente un oggetto di un certo tipo e riutilizzare quella memoria la prossima volta che viene allocata per un oggetto dello stesso tipo. Questa tecnica è stata introdotta per la prima volta in SunOS da Jeff Bonwick ed è ora ampiamente utilizzata nei kernel di molti sistemi operativi Unix, inclusi FreeBSD e Linux.

Il nuovo controller si basa sullo spostamento della contabilità dello stable dal livello della pagina di memoria al livello dell'oggetto del kernel, il che rende possibile condividere una sola pagina in cgroup diversi, invece di allocare una cache separata per ciascun cgroup.

Sulla base dei risultati dei test, ne consegue che il metodo di gestione della memoria proposto consente di aumentare efficacia utilizzando la lastra al 45%e ridurrà anche il consumo complessivo di memoria del kernel del sistema operativo. Inoltre, riducendo il numero di pagine allocate per lastra, si riduce la frammentazione della memoria nel suo complesso, il che non può che influire sulle prestazioni del sistema.

Il nuovo controller è stato testato per diversi mesi sui server Facebook di produzione, e finora questo test può dirsi riuscito: senza perdita di prestazioni e senza aumento del numero di errori, è stata notata una netta diminuzione del consumo di memoria - su alcuni server fino a 1 GB. Questo numero è abbastanza soggettivo, ad esempio i test precedenti hanno mostrato risultati leggermente inferiori:

  • 650-700 MB sul frontend web
  • 750-800 MB sul server con cache del database
  • 700 MB sul server DNS

>>> Pagina dell'autore su GitHub


>>> Primi risultati dei test

Fonte: linux.org.ru

Aggiungi un commento