Bagong Pamamaraan ng Pamamahala ng Memorya ng Facebook

Isa sa mga miyembro ng social network development team Facebook, Roman Gushchin, iminungkahi sa mailing list ng developer ng isang set ng Linux kernel patchnaglalayong mapabuti ang pamamahala ng memorya sa pamamagitan ng pagpapatupad ng isang bagong controller ng pamamahala ng memorya - slab (slab memory controller).

pamamahagi ng slab ay isang mekanismo ng pamamahala ng memorya na idinisenyo upang maglaan ng memorya nang mas mahusay at alisin ang makabuluhang pagkapira-piraso. Ang batayan ng algorithm na ito ay upang mag-imbak ng inilalaan na memorya na naglalaman ng isang bagay ng isang tiyak na uri at muling gamitin ang memorya na iyon sa susunod na oras na ito ay inilalaan para sa isang bagay ng parehong uri. Ang pamamaraan na ito ay unang ipinakilala sa SunOS ni Jeff Bonwick at ngayon ay malawakang ginagamit sa mga kernel ng maraming mga operating system ng Unix, kabilang ang FreeBSD at Linux.

Ang bagong controller ay batay sa paglipat ng slab accounting mula sa antas ng memory page patungo sa antas ng kernel object, na ginagawang posible na ibahagi ang isang slab page sa iba't ibang cgroup, sa halip na maglaan ng hiwalay na cache para sa bawat cgroup.

Batay sa mga resulta ng pagsubok, sumusunod na ang iminungkahing paraan ng pamamahala ng memorya ay nagbibigay-daan sa pagtaas bisa gamit ang slab sa 45%, at babawasan din ang kabuuang paggamit ng memorya ng OS kernel. Gayundin, sa pamamagitan ng pagbabawas ng bilang ng mga pahinang inilalaan para sa slab, ang pagkapira-piraso ng memorya sa kabuuan ay nababawasan, na hindi makakaapekto sa pagganap ng system.

Ang bagong controller ay nasubok sa mga production Facebook server sa loob ng ilang buwan, at sa ngayon ang pagsubok na ito ay matatawag na matagumpay: nang walang pagkawala sa pagganap at walang pagtaas sa bilang ng mga error, isang malinaw na pagbaba sa pagkonsumo ng memorya ay napansin - sa ilang mga server hanggang 1GB. Ang bilang na ito ay medyo subjective, halimbawa, ang mga naunang pagsubok ay nagpakita ng bahagyang mas mababang mga resulta:

  • 650-700 MB sa web frontend
  • 750-800 MB sa server na may database cache
  • 700 MB sa DNS server

>>> Pahina ng may-akda sa GitHub


>>> Mga resulta ng maagang pagsubok

Pinagmulan: linux.org.ru

Magdagdag ng komento