Roman Gushchin () della società Facebook nella mailing list degli sviluppatori del kernel Linux un set di patch con l'implementazione di un nuovo controllore di distribuzione della memoria (controllore di memoria slab). Il nuovo controllore si distingue per il trasferimento della contabilizzazione dello slab dal livello delle pagine di memoria al livello degli oggetti del kernel, consentendo così di condividere le pagine slab tra diversi cgroup, invece di riservare cache slab separate per ciascun cgroup.
L'approccio proposto consente di migliorare l'efficienza dell'uso dello slab, riducendo del 30-45% la dimensione della memoria utilizzata per lo slab e riducendo significativamente il consumo totale di memoria da parte del kernel. Grazie alla diminuzione del numero di slab non migrabili, si osserva anche un effetto positivo nella riduzione della frammentazione della memoria. Il nuovo controllore di memoria semplifica notevolmente il codice per la contabilizzazione dello slab e non richiede l'uso di algoritmi complessi per la creazione e eliminazione dinamica delle cache slab per ciascun cgroup. Tutti i cgroup per la memoria nella nuova implementazione utilizzano un set condiviso di cache slab, e la durata delle cache slab non è più vincolata alla durata dei cgroup istanziati. sull'uso della memoria.
Il nuovo controllore slab, implementando una contabilizzazione più accurata delle risorse, dovrebbe teoricamente caricare di più la CPU, ma nella pratica le differenze si sono rivelate non significative. In particolare, il nuovo controllore slab è già in uso da diversi mesi sui server di produzione di Facebook, che gestiscono vari tipi di carico, e non sonostate riscontrate regressioni significative. Allo stesso tempo, si osserva una sostanziale riduzione del consumo di memoria: su alcuni host è stato possibile risparmiare fino a 1GB di memoria, ma questo dato dipende notevolmente dalla natura del carico, dalla dimensione totale della RAM, dal numero di CPU e dalle caratteristiche di gestione della memoria. I test effettuati precedentemente una riduzione del consumo di memoria di 650-700 MB (42% della memoria slab) nel frontend web, 750-800 MB (35%) su un server con cache DBMS e 700 MB (36%) su un server DNS.
Fonte: opennet.ru
