Facebooks nya minneshanteringsmetod

En av medlemmarna i utvecklingsteamet för sociala nätverk Facebook, Roman Gushchin, föreslog en uppsättning kärnpatchar Linux, som syftar till att förbättra minneshanteringen genom implementering av en ny minneshanteringskontroller - slab (slabminneskontroller).

Plattfördelning – är en minneshanteringsmekanism utformad för att allokera minne mer effektivt och eliminera betydande fragmentering. Kärnan i denna algoritm är att spara allokerat minne som innehåller ett objekt av en viss typ och återanvända det minnet nästa gång ett objekt av samma typ allokeras. Denna metod introducerades först i SunOS av Jeff Bonwick och används nu i stor utsträckning i kärnorna i många Unix-operativsystem, inklusive FreeBSD och Linux.

Den nya styrenheten är baserad på att flytta slab-redovisning från minnessidesnivå till kärnobjektnivå, vilket möjliggör delning av en enda slab-sida mellan olika cgroups, istället för att allokera en separat cache för varje cgroup.

Testresultaten visar att den föreslagna minneshanteringsmetoden möjliggör ökad effektivitet användning av platta att 45%, och kommer också att minska den totala minnesförbrukningen för operativsystemkärnan. Genom att minska antalet sidor som allokeras för slabs minskas även minnesfragmenteringen i allmänhet, vilket oundvikligen påverkar systemets prestanda.

Den nya kontrollern har testats på Facebooks produktionsservrar i flera månader nu, och hittills kan testningen kallas framgångsrik: utan prestandaförluster eller ökning av fel har en tydlig minskning av minnesförbrukningen observerats – upp till 1 GB på vissa servrar. Denna siffra är ganska subjektiv, till exempel visade tidigare genomförda tester något lägre resultat:

  • 650–700 MB på webbgränssnittet
  • 750–800 MB på servern med databascache
  • 700 MB på DNS-servern

>>> Författarens sida på GitHub


>>> Tidiga testresultat

Källa: linux.org.ru

Köp pålitlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster