Kelių sriegių atminties spynos C / C + +

Šiuo metu turiu daug sriegių serverio taikomąją programą, ir aš mėgstu gerą daugiaukelę atminties paskirstiklį.

Iki šiol aš esu suplėšytas tarp:

  • „Sun umem“
  • „Google tcmalloc“
  • „Intel Threading Building Block“ platintojas
  • Vairuoti smilkalų berger

Iš to, ką radau, lobis gali būti greičiausias, bet apie tai iki šiol negirdėjau, todėl esu skeptiškas, jei tai tikrai taip gerai, kaip atrodo. Ar kas nors turi kokią nors asmeninę patirtį bandant šiuos platintojus?

34
29 сент. nustatė Robert Gould 29 sep. 2008-09-29 05:13 '08 at 5:13 2008-09-29 05:13
@ 8 atsakymai

Aš naudoju tcmalloc ir perskaityčiau apie „Hoard“. Abu variantai yra panašūs ir užtikrina maždaug linijinį našumo skalę, palyginti su siūlų / procesorių skaičiumi (pagal jų atitinkamų svetainių grafikus).

Taigi: jei našumas yra tikrai nepaprastai svarbus, atlikite našumo / apkrovos bandymus. Priešingu atveju, paprasčiausiai pasukite mirtį ir pasirinkite vieną iš išvardytų (svertinis naudojimo paprastumas tikslinėje platformoje).

Ir iš trshiv nuorodos atrodo, kad „Hoard“, „tcmalloc“ ir „ptmalloc“ yra maždaug panašūs į greitį. Apskritai, tt atrodo kaip ptmalloc yra optimizuotas naudoti kuo mažiau vietos, „Hoard“ yra optimizuotas greičio ir atminties naudojimo kompromisui, ir tcmalloc yra optimizuotas grynam greičiui.

17
29 сент. atsakymas suteiktas hazzen 29 sep . 2008-09-29 07:01 '08 at 7:01 am 2008-09-29 07:01

Vienintelis būdas išsiaiškinti, kuris atminties paskirstytojas yra tinkamas jūsų programai, yra išbandyti keletą. Visus minėtus platintojus parašė sumanūs žmonės, o kiti sužavės vienoje konkrečioje mikrobangoje. Jei visa jūsų paraiška veikia visą dieną, tai yra „8“ baitų fragmentas „A“ sraute ir atleiskite jį „B“ sraute, ir jam nereikia nieko apdoroti. išvardyti iki šiol. Tai tiesiog nebus labai naudinga kitiems. :)

Turiu patirties naudojant „Hoard“, kur dirbau (pakanka, kad dėl šios patirties vienas iš neaiškesnių klaidų, aptartų naujausiame 3.8 leidinyje). Tai labai geras platintojas, bet kaip gerai jums priklauso nuo jūsų darbo krūvio. Ir jums reikia mokėti už „Hoard“ (nors tai nėra pernelyg brangu) jį naudoti komerciniame projekte be GPL kodo.

Labai mažai pritaikytas ptmalloc2 jau seniai yra platintojas „glibc malloc“, todėl jis yra labai plačiai naudojamas ir išbandytas. Jei stabilumas yra svarbiausias, tai gali būti geras pasirinkimas, bet jūs to nepaminėte savo sąraše, todėl leisiu tai padaryti. Dėl kai kurių darbo krūvių tai yra baisu - bet tas pats pasakytina ir apie bet kokią bendro tikslo malloc.

Jei esate pasirengęs mokėti už tai (ir mano patirtis yra pagrįsta kaina), SmartHeap SMP taip pat yra geras pasirinkimas. Dauguma kitų minėtų skirstytuvų yra suprojektuoti kaip išskleidžiamajame malloc / nemokamai nauji / ištrinti pakeitimai, kurie gali būti LD_PRELOAD'd. SmartHeap taip pat gali būti naudojamas tokiu būdu, tačiau jis taip pat apima visą platinimo API, leidžiančią tiksliai sureguliuoti dozatorius savo širdies turiniui. Bandymuose, kuriuos mes atlikome (vėlgi, labai būdingi konkrečiai programai), „SmartHeap“ buvo maždaug toks pat, kaip ir „Hoard“, skirtas metalo kūrimui; realus jų skirtumas yra pritaikymo laipsnis. Jūs galite gauti geresnius rezultatus, mažiau universalius, kuriems jums reikia platintojo.

Ir, priklausomai nuo jūsų naudojimo atvejo, universalus daugiapakopis skirstytuvas gali būti ne tas, kurį norite naudoti; jei esate nuolat Malloc ir laisvas objektų, kurie yra tokio pat dydžio, galite tiesiog parašyti paprastą plokštės paskirstytoją. Plokštės paskirstymas yra naudojamas keliose Linux branduolio vietose, kurios atitinka šį aprašymą. (Norėčiau jums pateikti keletą naudingų nuorodų, bet aš esu „naujas vartotojas“, o ngn-wiki.ru nusprendė, kad nauji vartotojai negali būti per daug naudingi viename atsakyme. Tačiau „Google“ gali jums padėti.)

11
14 нояб. atsakymas pateikiamas strangelydim 14 lapkričio. 2009-11-14 22:46 '09 10:46 val. 2009-11-14 22:46

Aš asmeniškai norėčiau ir rekomenduoju ptmalloc kaip daugiapakopį platintoją. Gerai verta, tačiau vertinant mano komanda prieš keletą metų dirbo tarp Hoard ir ptmalloc, ptmalloc buvo geriau. Iš to, ką aš žinau, ptmalloc buvo maždaug keletą metų ir yra plačiai naudojamas kaip kelių sriegių platintojas.

Šis palyginimas gali būti naudingas.

5
29 сент. atsakymas duotas trshiv rugsėjo 29 d 2008-09-29 07:38 '08 at 7:38 2008-09-29 07:38

Galbūt tai yra neteisingas požiūris į tai, ko prašote, bet galbūt galite naudoti kitą taktiką. Jei ieškote tikrai greito atminties skirstytuvo, jums gali prireikti paklausti, kodėl jums reikia praleisti visą laiką, skiriant atmintį, kai galite tiesiog palikti su kamino kintamųjų platinimu. Skirstant kaminą, o dar daugiau erzina, jei tai daroma teisingai, galima sutaupyti daug pinigų, kad galėtumėte susidoroti su „mutex“, o taip pat sutaupyti atminties korupcijos problemų. Be to, jūs galite mažiau susiskaidyti, o tai gali padėti.

4
29 сент. Atsakymas, kurį pateikė Mark Kegel rugsėjo 29 d 2008-09-29 05:22 '08 at 5:22 am 2008-09-29 05:22

Mes naudojome lobį projekte, kur dirbau prieš keletą metų. Atrodė, kad tai gerai. Aš neturiu patirties su kitais platintojais. Tai turėtų būti gana lengva pabandyti kitaip ir atlikti apkrovos bandymus, ne?

3
29 сент. atsakymas pateikiamas 29 sep . 2008-09-29 05:26 '08, 5:26 am. 2008-09-29 05:26

„Locklessinc“ dozatorius yra labai geras ir kūrėjas reaguoja, jei turite klausimų. Straipsnis, kurį jis parašė apie keletą naudojamų optimizavimo gudrybių, yra įdomus skaityti: http://locklessinc.com/articles/allocator_tricks/ . Aš naudoju jį praeityje su puikiais rezultatais.

2019

3
17 авг. atsakymą pateikė Eloff 17 rug . 2013-08-17 20:56 '13, 08:56 pm 2013-08-17 20:56

Jūs galite pabandyti „ ltalloc“ (universalus pasaulinis atminties paskirstiklis greitojo baseino skirstytuvo greičiu).

2
17 авг. atsakymas pateikiamas tav 17 rug. 2013-08-17 20:14 '13, 20:14, 2013-08-17 20:14

Galbūt vėlyvas atsakymas į jūsų klausimą, bet

kodėl mallocs, jei turite hick ups našumą?

Geriausia būtų inicijuoti didelį atminties >light weight Memory manager , kuri būtų lease out the memory chunks at run time .

Taip išvengiama bet kokios sistemos skambučių galimybės, kai išplėsite krūvą.

2
25 апр. atsakymą pateikė jay d 25 Bal 2012-04-25 04:03 '12 at 4:03 2012-04-25 04:03

Kiti klausimai dėl žymių arba Užduoti klausimą