SapMM - Efektivní Memory Manager pro multithreaded aplikace

vložil Radek Červinka 5. září 2015 01:27

FastMM4 je geniální. V podstatě ve většině instancí je nepřekonatelný - a že se o to stále někdo pokouší. Ale v případech brutálních vícevláknových (hodně vláken), paměťově intenzivních programů je možné, že FastMM přestane dobře škálovat díky tomu, že své interní struktury chrání spinlocky.

Objevil jsem jeden pozoruhodný (a podle všeho úspěšný) pokus jak to řešit - SapMM (Simple As Possible Memory Manager) původem z Ruska. Pokud se nepletu, tak je stále jen 32bitový, vyvíjen pro DXE a další.

Přečtete si rozhovor s autorem thedelphigeek.com/2013/12/sapmm.html, zdrojáky jsou na code.google.com/p/sapmm/.

Ale jak říkám, toto je speciální případ, navíc přijdete o všechny cool věci jako je detekce problémů atd.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: , ,

Optimalizace | Praxe

Komentáře

7.9.2015 15:52:05 #

Petr Nehéz

My vyvíjíme ISAPI modul, který nám běží na serveru se 48 jádry a jediný zatím nejlepší MM, který se osvědčil, je defaultní heap manažer ve Windows a to tento modul zvládá zpracovat 100+ miliónů requestů za den.
Zkoušel jsem několik manažerů (FastMM, ScaleMM, ScaleMM2, LibHoard, TBBMM), ale ten windowsí je ze všech nejlepší pro tento typ aplikace.
Samozřejmě při vývoji používáme FastMM, ale release verze už pak jede bez něj.
Vzpomínám si na prvotní spuštění modulu na takovém serveru - prostě všechny vlákna čekaly na ostatní a výsledek byl takový, že na 64-cores serveru nám to jelo asi tak 10x pomaleji než na 8-cores serveru (na tomto to FastMM verze ještě zvládá v pohodě).

Petr Nehéz

7.9.2015 16:07:40 #

radekc

Tak nějak jsem to myslel. Nešlo by zkusit pro zajímavost tento? Velmi by mne zajímal výsledek, podle toho co jsem viděl na různých testech to vypadalo fakt zajímavě - mluvím o multithreaded aplikacích.

radekc

7.9.2015 16:14:56 #

Petr Nehéz

Vyzkouším a dám vědět výsledek.
Bohužel to můžu udělat pouze jako test, provozní spotřeba paměti je mezi 2,5 a 3 GB na process, ale trvá tak 2 hodiny než se to dostane na takové hodnoty.

Petr Nehéz

10.9.2015 8:40:09 #

Petr Nehéz

Tak se mi podařilo SapMM umluvit, aby se zkompiloval v našem projektu v D2010 bez toho, aby to hlásilo Internal Error (problém s "inline" direktivou).
Ještě jsem musel zakomentovat SSE2 procedury, neb D2010 neumožnují zarovnání na 16 bytů.

Po prvotním spuštění musím říci, že to jede zatím dobře, rychlost je +/- jako s windowsím MM.
Spotřeba paměti je také zatím v pohodě, ale trochu se o ní obávám, neboť SapMM má per-thread heap a my těch threadů máme 60+ a hodně používáme cache.
Použití v pořádné zátěži uvidím až o víkendu odpoledne, kdy máme zhruba tak 8x větší provoz než během týdne a během těchto výkyvů se opravdu masivně aktualizuje ta cache.

Petr Nehéz

10.9.2015 10:26:07 #

radekc

Jsem zvědav na výsledek. Ono to SSE2 tam určitě bylo k vůli rychlosti, ale i tak je to podle mne zatím slušné.

Moc děkuji.

radekc

10.9.2015 11:08:01 #

Petr Nehéz

Přesně, SSE2 tam je jen pro náhradu Move a FillChar.
A protože používáme Synopse mORMot framework, který tyhle procedury přesměrovává, tak mne to vůbec netrápí.

Petr Nehéz

15.9.2015 14:34:58 #

Petr Nehéz

Tak test na produkci dopadl téměř na výbornou, vše běželo výborně.
Vypadá to, že SapMM byl o chlup pomalejší než windowsí MM, ale to bylo jen z pozorování celkové zátěže CPU oproti jiným víkendům.
Jediný problém nastal tehdy, kdy to vyhodilo OutOfMemory při allokaci cca 2MB streamu při obsazení paměti cca 2,8 GB. Ale mohlo to souviset s nějakým naším jiným problémem (třeba masivní obnova cache, kdy staré instance - jako interface - necháváme ještě nějakou chvíli v paměti). Naštěstí máme zajištěn auto-recycle ISAPI modulu, když se něco takového stane. Ještě pracuji na paměťové optimalizaci a pak tomu dám ještě jeden test.
Za mne můžu tento MM jednoznačně doporučit (s tím, že to nepodporuje 64 bit).

Petr Nehéz

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS