Facebook avab F14 räsitabelite juurutamise

Facebooki ettevõte kuulutas välja räsitabelite avatud lähtekoodiga juurutamise kohta F14, optimeeritud tõhusaks mälutarbimiseks. F14 kasutatakse Facebooki infrastruktuuris enamiku tüüpi räsitabelite asendajana ja see võib vähendada mälutarbimist jõudlust ohverdamata. F14 edestab märgatavalt google::sparse_hash_map räsitabeleid, mida on seni peetud mälukulu osas kõige tõhusamaks. Projekti kood on kirjutatud C++ keeles ja see sisaldub raamatukogus Õnnelik.

F14 viitab algoritmidele, mille kokkupõrkelahendussüsteem põhineb topelträsimisel 14-ga proovide jadad (ühes räsitabeli lahtris on salvestatud 14 pesast koosnev ahel ja lahtrite vaheline intervall arvutatakse abiräsifunktsiooni abil). Lahtrite filtreerimistoimingute kiirendamiseks kasutab juurutus vektorkäske SSE2 x86_64 süsteemide jaoks ja NEON Aarch64 jaoks, mis võimaldavad paralleelselt toimingute täitmist võtmehoidjatega pesade valimisel ja võtmete väljasõelumist ahela sees. Korraga töödeldakse 14 pesa plokke, mis on optimaalne tasakaal protsessori vahemälu kasutamise efektiivsuse ja kokkupõrgete arvu vahel.

F14 eripäraks on võimalus valida erinevaid andmesalvestusstrateegiaid:

  • F14NodeMap – kulutab kõige vähem mälu suurte ja keskmise suurusega võtmete jaoks. Tagab, et elemendid salvestatakse kaudselt, kutsudes igal sisestusel mallocile;
  • F14ValueMap – tagab väikeste klahvide jaoks minimaalse mälukulu. Elemendid salvestatakse lahtritesse endisse (inline). Keskmiste ja suurte klahvide puhul toob see lähenemine kaasa märgatava mälumahu;
  • F14VectorMap – töötab suurte tabelite ja keeruliste võtmete puhul kiiremini, kuid lihtsate klahvide ja väikeste tabelite puhul aeglasemalt. Elemendid pakitakse pidevalt asustatud massiivi ja adresseeritakse 32-bitise indekskursoriga;
  • F14FastMap on kombineeritud strateegia. Kui võti on väiksem kui 24 baiti, valitakse F14ValueMap ja kui rohkem, siis F14VectorMap.

Facebook avab F14 räsitabelite juurutamise

Allikas: opennet.ru

Lisa kommentaar