Роман Гущин (софтуерен инженер във Facebook) регистър в списъка за развитие на ядрото на Linux, набор от кръпки към приложението за картографиране на паметта на контролера на плочата (контролер на паметта).
Новият контролер е забележителен чрез преместване на счетоводното отчитане от нивото на страницата на паметта до нивото на ядрото на ядрото, което прави възможно споделянето на страниците на слято в различни групи c, вместо да се разпределят отделни кешови плочи за всяка група c.
Роман откри това, което той нарича „много сериозен недостатък“ в съществуващия контролер на паметта на плочата, което води до ниско използване в наши дни с cgroups.
„Истинската причина, поради която съществуващото оформление води до ниско използване на плоча, е проста: страниците на плочите се използват изключително от пул памет.
Ако има само няколко разпределения с определен размер, направени от cgroup, или ако има някои активни обекти, останали след премахването на cgroup, или cgroup съдържа едно приложение с резба, което едва разпределя никакви обекти на ядрото, но всеки път на нов процесор: във всички тези случаи използваната плоча е много ниска.
Ако отчитането на kmem е деактивирано, ядрото може да използва свободно място на страниците на плочата за други разпределения. «
Предложеният контролер за памет на Slab от Романо Гущин през изминалата година беше доста обещаващо като повишава ефективността от използването на плочата, намаляване на размера на използваната памет за плоча с 30-45% и значително намалява общото потребление на памет на ядрото.
Също, внедрените кръпки са посочили че Facebook вече използва кода в производство на своите сървъри и е бил спестявайки ~ 650-700MB + за уеб сървъри от преден край, кеширане на база данни и DNS сървъри, наред с други награди.
Чрез намаляване на броя на неподвижните плочи се наблюдава положителен ефект и в областта на намаляването на фрагментацията на паметта. Новият контролер на паметта значително опростява кода за счетоводна плоча и не изисква сложни алгоритми за динамично създаване и изтриване на кешове на плочи за всяка група c.
Всички cgroups за памет в новата реализация използват общ набор от кешове на плочи и продължителността на живота на кешовете на плочи вече не е обвързана с продължителността на живота на ограниченията на паметта, зададени чрез cgroup.
По-прецизното отчитане на ресурсите, внедрено в новия контролер на плочи, теоретично би трябвало да натовари повече процесора, но на практика разликите се оказаха незначителни.
По-специално новият драйвер за плоча се използва от няколко месеца на сървърите на Facebook в експлоатация, които се справят с различни видове товари и досега не са открити значителни регресии.
Пластирът съдържа няколко полунезависими части, които също могат да намерят приложение извън контролера на паметта на плочата:
- API за зареждане на подстраници, който може да се използва в бъдеще за преброяване на други обекти, които не са с размер на страница, например разпределения на percpu
- API mem_cgroup_ptr, където се преброяват указатели към memcg, може да се използва повторно за ефективно препращане на други обекти, например кеш на страници.
В същото време, има значително намаляване на консумацията на памет- На някои хостове беше възможно да се спестят до 1 GB памет, но този индикатор до голяма степен зависи от естеството на товара, общият размер на RAM, количеството процесор и характеристиките на работа с памет.
Вместо да се създава отделен набор от kmem_caches за всяка cgroup памет, се използват два глобални набора: основният набор за неотчетени и присвояванията на cgroup на основната група и вторият набор за всички останали назначения. Това позволява опростяване на доживотното управление на отделни kmem_caches.
И накрая, ако се интересувате от познаването на новия набор от 19 лепенки, той може да бъде намерен в списъка поща на ядрото.